<?xml encoding=”UTF-8″>By Madhukar Moogala
Though the post is very much related to AutoCAD Architecture or MEP, I have taken little liberty to attract AutoCAD audience too ![]()
There isn’t a direct API to make annotative MVBlock, however if the internal ACAD block is annotative, same behaviour can be exposed to MVBlocks, we will get all referenced blocks and set annotation on each block which is an ACAD block.
<span>[</span>CommandMethod<span>(</span><span>"</span><span>MakeMVBlockAnnotative</span><span>"</span><span>)</span><span>]</span>
<span>public</span> <span>static</span> <span>void</span> makeMVBlockAnnotative<span>(</span><span>)</span>
<span>{</span>
<span>/*You need to include AecBaseMgd reference from OMF SDK or available with ACAMEP installations*/</span>
Document doc <span>=</span> Application<span>.</span>DocumentManager<span>.</span>MdiActiveDocument<span>;</span>
Database db <span>=</span> doc<span>.</span>Database<span>;</span>
Editor ed <span>=</span> doc<span>.</span>Editor<span>;</span>
PromptEntityOptions peo <span>=</span> <span>new</span> PromptEntityOptions<span>(</span><span>"</span><span>Select a MVBlockreference</span><span>"</span><span>)</span><span>;</span>
PromptEntityResult result <span>=</span> ed<span>.</span>GetEntity<span>(</span>peo<span>)</span><span>;</span>
<span>if</span> <span>(</span>result<span>.</span>Status <span>!</span><span>=</span> PromptStatus<span>.</span>OK<span>)</span> <span>return</span><span>;</span>
<span>try</span>
<span>{</span>
<span>using</span> <span>(</span>Transaction tr <span>=</span>
db<span>.</span>TransactionManager<span>.</span>StartTransaction<span>(</span><span>)</span><span>)</span>
<span>{</span>
MultiViewBlockReference mvBref <span>=</span>
tr<span>.</span>GetObject<span>(</span>result<span>.</span>ObjectId<span>,</span> OpenMode<span>.</span>ForWrite<span>)</span> <span>as</span> MultiViewBlockReference<span>;</span>
MultiViewBlockDefinition mbBdef <span>=</span>
tr<span>.</span>GetObject<span>(</span>mvBref<span>.</span>BlockDefId<span>,</span> OpenMode<span>.</span>ForWrite<span>)</span> <span>as</span> MultiViewBlockDefinition<span>;</span>
<span>/*Each MVBlockDefination has various internal ACAD Blocks,</span>
<span> * each such block holds view dependent entities </span>
<span> * If a internal ACAD Block has annotative behavior, </span>
<span> * same can be exposed to mvblocks. </span>
<span> </span>
<span> */</span>
Autodesk<span>.</span>AutoCAD<span>.</span>DatabaseServices<span>.</span>ObjectIdCollection BrefIds <span>=</span>
mbBdef<span>.</span>GetAllBlocksReferenced<span>(</span><span>)</span><span>;</span>
<span>/*Utility*/</span>
printHandlesToEditor<span>(</span>BrefIds<span>)</span><span>;</span>
<span>foreach</span><span>(</span>Autodesk<span>.</span>AutoCAD<span>.</span>DatabaseServices<span>.</span>ObjectId id <span>in</span> BrefIds<span>)</span>
<span>{</span>
BlockTableRecord btr <span>=</span> tr<span>.</span>GetObject<span>(</span>id<span>,</span> OpenMode<span>.</span>ForWrite<span>)</span> <span>as</span> BlockTableRecord<span>;</span>
btr<span>.</span>Annotative <span>=</span> AnnotativeStates<span>.</span>True<span>;</span>
<span>}</span>
BrefIds<span>.</span>Clear<span>(</span><span>)</span><span>;</span>
<span>bool</span> status <span>=</span> mvBref<span>.</span>UpdateAnnotative<span>(</span><span>)</span><span>;</span>
tr<span>.</span>Commit<span>(</span><span>)</span><span>;</span>
<span>}</span>
<span>}</span>
<span>catch</span> <span>(</span>System<span>.</span>Exception ex<span>)</span>
<span>{</span>
ed<span>.</span>WriteMessage<span>(</span>ex<span>.</span>ToString<span>(</span><span>)</span><span>)</span><span>;</span>
<span>}</span>
<span>}</span>
<span>/*Helper*/</span>
<span>private</span> <span>static</span> <span>void</span> printHandlesToEditor<span>(</span>Autodesk<span>.</span>AutoCAD<span>.</span>DatabaseServices<span>.</span>ObjectIdCollection ids<span>)</span>
<span>{</span>
Document doc <span>=</span> Application<span>.</span>DocumentManager<span>.</span>MdiActiveDocument<span>;</span>
Database db <span>=</span> doc<span>.</span>Database<span>;</span>
Editor ed <span>=</span> doc<span>.</span>Editor<span>;</span>
<span>foreach</span> <span>(</span>Autodesk<span>.</span>AutoCAD<span>.</span>DatabaseServices<span>.</span>ObjectId id <span>in</span> ids<span>)</span>
<span>{</span>
Handle handle <span>=</span> id<span>.</span>Handle<span>;</span>
ed<span>.</span>WriteMessage<span>(</span><span>"</span><span>n</span><span>"</span> <span>+</span> handle<span>.</span>Value<span>.</span>ToString<span>(</span><span>)</span><span>)</span><span>;</span>
<span>}</span>
<span>}</span>

Leave a Reply