<?xml encoding=”UTF-8″>By Balaji Ramamoorthy
In ObjectARX, BlockTableRecord provides access to its hyperlink collection using the AcDbEntityHyperlinkPE. In AutoCAD 2015, the Hyperlinks collection is now also accessible using the AutoCAD .Net API.
Here is a C++ and .Net code snippets to create a new block with hyperlink to AutoCAD Devblog :
ObjectARX C++ API :
AcApDocument *pActiveDoc = acDocManager->mdiActiveDocument();
AcDbDatabase *pDB = pActiveDoc->database();
AcDbBlockTable *pBlockTable = NULL;
Acad::ErrorStatus es = pDB->getBlockTable(
pBlockTable, kForWrite);
<span>if</span><span> (! pBlockTable->has(ACRX_T(<span>"Test"</span><span> )))</span></span>
<span>{</span>
<span>// Create the BlockTableRecord with hyperlink</span><span> </span>
AcDbBlockTableRecord *pBTR = <span>new</span><span> AcDbBlockTableRecord();</span>
pBTR->setName(ACRX_T(<span>"Test"</span><span> ));</span>
AcDbObjectId btrId = AcDbObjectId::kNull;
pBlockTable->add(btrId, pBTR);
AcDbCircle *pCircle = <span>new</span><span> AcDbCircle(</span>
AcGePoint3d::kOrigin,
AcGeVector3d::kZAxis, 10.0);
pBTR->appendAcDbEntity(pCircle);
pCircle->close();
AcDbHyperlinkCollection * pcHCL = NULL;
ACRX_X_CALL(pBTR, AcDbEntityHyperlinkPE)
->getHyperlinkCollection(pBTR, pcHCL, <span>false</span><span> , <span>true</span><span> );</span></span>
pcHCL->addTail(
ACRX_T(<span>"http://adndevblog.typepad.com/autocad/"</span><span> ), </span>
ACRX_T(<span>"AutoCAD DevBlog"</span><span> ));</span>
ACRX_X_CALL(pBTR, AcDbEntityHyperlinkPE)
->setHyperlinkCollection(pBTR, pcHCL);
<span>delete</span><span> pcHCL;</span>
pBTR->close();
<span>}</span>
pBlockTable->close();
AutoCAD .Net API (should work in AutoCAD 2015+) :
Database db =
Application.DocumentManager.MdiActiveDocument.Database;
<span>using</span><span> (Transaction tr = </span>
db.TransactionManager.StartTransaction())
<span>{</span>
BlockTable bt = tr.GetObject(
db.BlockTableId,
OpenMode.ForRead
) as BlockTable;
<span>if</span><span> (bt.Has(<span>"MyBlock"</span><span> ) == <span>false</span><span> )</span></span></span>
<span>{</span>
bt.UpgradeOpen();
BlockTableRecord btr = <span>new</span><span> BlockTableRecord();</span>
btr.Name = <span>"MyBlock"</span><span> ;</span>
btr.Origin = Point3d.Origin;
bt.Add(btr);
tr.AddNewlyCreatedDBObject(btr, <span>true</span><span> );</span>
Circle c = <span>new</span><span> Circle(</span>
Point3d.Origin,
Vector3d.ZAxis, 10.0);
btr.AppendEntity(c);
tr.AddNewlyCreatedDBObject(c, <span>true</span><span> );</span>
<span>//Get the hyperlink collection from the entity</span><span> </span>
HyperLinkCollection linkCollection = btr.Hyperlinks;
<span>//Create a new hyperlink</span><span> </span>
HyperLink hyperLink = <span>new</span><span> HyperLink();</span>
hyperLink.Description = <span>"AutoCAD DevBlog"</span><span> ;</span>
hyperLink.Name
= <span>"http://adndevblog.typepad.com/autocad/"</span><span> ;</span>
hyperLink.SubLocation = <span>""</span><span> ;</span>
linkCollection.Add(hyperLink);
<span>}</span>
tr.Commit();
<span>}</span>

Leave a Reply