ADN Open CIS
Сообщество программистов Autodesk в СНГ

06/02/2015

Ассоциация гиперссылки с BlockTableRecord

В ObjectARX BlockTableRecord обеспечивает доступ к коллекции своих гиперссылок при помощи AcDbEntityHyperlinkPE интерфейса. В AutoCAD 2015 к гиперссылкам можно получить доступ и при помощи AutoCAD .NET API.  

Вот образцы кода на C++ и на .NET, которые создают блок с гиперссылкой к блогу AutoCAD DevBlog:

ObjectARX C++ API :

Код - C++: [Выделить]
  1. AcApDocument *pActiveDoc = acDocManager->mdiActiveDocument();
  2.  AcDbDatabase *pDB = pActiveDoc->database();
  3.  
  4.  AcDbBlockTable *pBlockTable = NULL;
  5.  Acad::ErrorStatus es = pDB->getBlockTable(
  6.                                               pBlockTable, kForWrite);
  7.  if (!pBlockTable->has(ACRX_T("Test" )))
  8.  {
  9.         // Создаем the BlockTableRecord с гиперссылкой
  10.         AcDbBlockTableRecord *pBTR = new  AcDbBlockTableRecord();
  11.         pBTR->setName(ACRX_T("Test" ));
  12.         AcDbObjectId btrId = AcDbObjectId::kNull;
  13.         pBlockTable->add(btrId, pBTR);
  14.  
  15.         AcDbCircle *pCircle = new  AcDbCircle(
  16.                AcGePoint3d::kOrigin,
  17.                AcGeVector3d::kZAxis, 10.0);
  18.  
  19.         pBTR->appendAcDbEntity(pCircle);
  20.         pCircle->close();
  21.  
  22.         AcDbHyperlinkCollection * pcHCL = NULL;
  23.         ACRX_X_CALL(pBTR, AcDbEntityHyperlinkPE)->getHyperlinkCollection(pBTR, pcHCL, false , true );
  24.  
  25.         pcHCL->addTail(
  26.                ACRX_T("http://adndevblog.typepad.com/autocad/" ),
  27.                ACRX_T("AutoCAD DevBlog" ));
  28.  
  29.         ACRX_X_CALL(pBTR, AcDbEntityHyperlinkPE)->setHyperlinkCollection(pBTR, pcHCL);
  30.                       
  31.         delete  pcHCL;
  32.         pBTR->close();
  33.  }
  34.  pBlockTable->close();
  35.  

AutoCAD .NET API (должно работать в AutoCAD 2015+) :

Код - C#: [Выделить]
  1. Database db = Application.DocumentManager.MdiActiveDocument.Database;
  2.  
  3.  using  (Transaction tr =  db.TransactionManager.StartTransaction())
  4.  {
  5.      BlockTable bt = tr.GetObject(
  6.                                      db.BlockTableId,
  7.                                      OpenMode.ForRead
  8.                                  ) as BlockTable;
  9.  
  10.      if  (bt.Has("MyBlock") == false )
  11.      {
  12.          bt.UpgradeOpen();
  13.          BlockTableRecord btr = new  BlockTableRecord();
  14.          btr.Name = "MyBlock" ;
  15.          btr.Origin = Point3d.Origin;
  16.          bt.Add(btr);
  17.          tr.AddNewlyCreatedDBObject(btr, true );
  18.  
  19.          Circle c = new  Circle(
  20.                        Point3d.Origin,
  21.                        Vector3d.ZAxis, 10.0);
  22.  
  23.          btr.AppendEntity(c);
  24.          tr.AddNewlyCreatedDBObject(c, true );
  25.          // Получаем коллекцию гиперссылок объекта
  26.          HyperLinkCollection linkCollection = btr.Hyperlinks;
  27.  
  28.          // Создаем новую гиперссылку
  29.          HyperLink hyperLink = new  HyperLink();
  30.          hyperLink.Description = "AutoCAD DevBlog" ;
  31.          hyperLink.Name  = "http://adndevblog.typepad.com/autocad/" ;
  32.          hyperLink.SubLocation = "" ;
  33.          linkCollection.Add(hyperLink);
  34.      }
  35.      tr.Commit();
  36.  }
  37.  

 

Источник: http://adndevblog.typepad.com/autocad/2015/01/associating-hyperlink-with-blocktablerecord.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=1837

Опубликовано 06.02.2015