06/02/2015
Ассоциация гиперссылки с BlockTableRecord
В ObjectARX BlockTableRecord обеспечивает доступ к коллекции своих гиперссылок при помощи AcDbEntityHyperlinkPE интерфейса. В AutoCAD 2015 к гиперссылкам можно получить доступ и при помощи AutoCAD .NET API.
Вот образцы кода на C++ и на .NET, которые создают блок с гиперссылкой к блогу AutoCAD DevBlog:
ObjectARX C++ API :
Код - C++: [Выделить]
- AcApDocument *pActiveDoc = acDocManager->mdiActiveDocument();
- AcDbDatabase *pDB = pActiveDoc->database();
- AcDbBlockTable *pBlockTable = NULL;
- Acad::ErrorStatus es = pDB->getBlockTable(
- pBlockTable, kForWrite);
- if (!pBlockTable->has(ACRX_T("Test" )))
- {
- // Создаем the BlockTableRecord с гиперссылкой
- AcDbBlockTableRecord *pBTR = new AcDbBlockTableRecord();
- pBTR->setName(ACRX_T("Test" ));
- AcDbObjectId btrId = AcDbObjectId::kNull;
- pBlockTable->add(btrId, pBTR);
- AcDbCircle *pCircle = new AcDbCircle(
- AcGePoint3d::kOrigin,
- AcGeVector3d::kZAxis, 10.0);
- pBTR->appendAcDbEntity(pCircle);
- pCircle->close();
- AcDbHyperlinkCollection * pcHCL = NULL;
- ACRX_X_CALL(pBTR, AcDbEntityHyperlinkPE)->getHyperlinkCollection(pBTR, pcHCL, false , true );
- pcHCL->addTail(
- ACRX_T("http://adndevblog.typepad.com/autocad/" ),
- ACRX_T("AutoCAD DevBlog" ));
- ACRX_X_CALL(pBTR, AcDbEntityHyperlinkPE)->setHyperlinkCollection(pBTR, pcHCL);
- delete pcHCL;
- pBTR->close();
- }
- pBlockTable->close();
AutoCAD .NET API (должно работать в AutoCAD 2015+) :
Код - C#: [Выделить]
- Database db = Application.DocumentManager.MdiActiveDocument.Database;
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- BlockTable bt = tr.GetObject(
- db.BlockTableId,
- OpenMode.ForRead
- ) as BlockTable;
- if (bt.Has("MyBlock") == false )
- {
- bt.UpgradeOpen();
- BlockTableRecord btr = new BlockTableRecord();
- btr.Name = "MyBlock" ;
- btr.Origin = Point3d.Origin;
- bt.Add(btr);
- tr.AddNewlyCreatedDBObject(btr, true );
- Circle c = new Circle(
- Point3d.Origin,
- Vector3d.ZAxis, 10.0);
- btr.AppendEntity(c);
- tr.AddNewlyCreatedDBObject(c, true );
- // Получаем коллекцию гиперссылок объекта
- HyperLinkCollection linkCollection = btr.Hyperlinks;
- // Создаем новую гиперссылку
- HyperLink hyperLink = new HyperLink();
- hyperLink.Description = "AutoCAD DevBlog" ;
- hyperLink.Name = "http://adndevblog.typepad.com/autocad/" ;
- hyperLink.SubLocation = "" ;
- linkCollection.Add(hyperLink);
- }
- tr.Commit();
- }
Источник: http://adndevblog.typepad.com/autocad/2015/01/associating-hyperlink-with-blocktablerecord.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=1837
Опубликовано 06.02.2015