How to add dimension entities to a block object using VBA?

<?xml encoding=”UTF-8″>By Daniel Du

Issue

The AddDimAligned method of Block object produces incorrect dimension objects. How can I add dimension entities to a Block object?

Solution

The AddDimAligned method as well as other AddDimxxx methods of adding dimension entities to a Block object results in dimension objects that are incorrect.

This is a known problem. Use the following workaround to add dimension entities to a block object:

  1. Create a Dimension entity in model space.
    2. Use the CopyObject method to copy the Dimension entity to a Block object.
    3. Delete the original Dimension entity from model space.

The following sample code creates a block “test”, adds a DimRotated entity to the block, and then inserts the block into model space.

<font face="新宋体"><font><span><font color="#0000ff">Sub</font></span></font></font><font><font face="新宋体"><font color="#000000"> f_SolAddDiminBlocks()<br>    </font><span><font color="#008000">'Workaround for Adding dimensions to block AutoCAD</font></span><br><span><font color="#0000ff">     Dim</font></span><font color="#000000"> po_rotDim </font><span><font color="#0000ff">As</font></span></font><font face="新宋体"><font color="#000000"> AcadDimAligned<br>     </font><span><font color="#0000ff">Dim</font></span><font color="#000000"> po_block </font><span><font color="#0000ff">As</font></span></font><font face="新宋体"><font color="#000000"> AcadBlock<br>     </font><span><font color="#0000ff">Dim</font></span><font color="#000000"> pd_ext1(0 </font><span><font color="#0000ff">To</font></span><font color="#000000"> 2) </font><span><font color="#0000ff">As</font></span><font color="#000000"> </font><span><font color="#0000ff">Double</font></span><br><span><font color="#0000ff">     Dim</font></span><font color="#000000"> pd_ext2(0 </font><span><font color="#0000ff">To</font></span><font color="#000000"> 2) </font><span><font color="#0000ff">As</font></span><font color="#000000"> </font><span><font color="#0000ff">Double</font></span><br><span><font color="#0000ff">     Dim</font></span><font color="#000000"> pd_lineLoc(0 </font><span><font color="#0000ff">To</font></span><font color="#000000"> 2) </font><span><font color="#0000ff">As</font></span><font color="#000000"> </font><span><font color="#0000ff">Double</font></span><br><span><font color="#0000ff">     Dim</font></span><font color="#000000"> po_array(0) </font><span><font color="#0000ff">As</font></span><font color="#000000"> </font><span><font color="#0000ff">Object</font></span><br></font><font face="新宋体"><font color="#000000"> <br>     pd_ext1(0) = 3 : pd_ext1(1) = 3 : pd_ext1(2) = 0<br>     pd_ext2(0) = 10 : pd_ext2(1) = 3 : pd_ext2(2) = 0<br>     pd_lineLoc(0) = 5 : pd_lineLoc(1) = 4 : pd_lineLoc(2) = 0<br>     </font><span><font color="#008000">'create dimeionsion object</font></span><br></font><font face="新宋体"><font color="#000000">     po_rotDim = ThisDrawing.ModelSpace.AddDimAligned(pd_ext1, pd_ext2,<br>     pd_lineLoc)<br> <br>     </font><span><font color="#008000">'create a new block by name test</font></span><br><font color="#000000">     po_block = ThisDrawing.Blocks.Add(pd_ext1, </font><span><font color="#a31515">"test"</font></span></font><font face="新宋体"><font color="#000000">)<br>     </font><span><font color="#008000">'insert a block reference</font></span><br><font color="#000000">     ThisDrawing.ModelSpace.InsertBlock(pd_ext1, </font><span><font color="#a31515">"test"</font></span></font><font face="新宋体"><font color="#000000">, 1, 1, 1, 0)<br>     </font><span><font color="#008000">'copy dimension object</font></span><br></font></font><font face="新宋体"><font><font color="#000000">     po_array(0) = po_rotDim<br>     ThisDrawing.CopyObjects(po_array, po_block)<br>     po_rotDim.Delete()<br>     </font><span><font color="#008000">'release the references</font></span><br><font color="#000000">     po_block = </font><span><font color="#0000ff">Nothing</font></span><br><font color="#000000">     po_rotDim = </font><span><font color="#0000ff">Nothing</font></span><br><span><font color="#0000ff">End</font></span><font color="#000000"> </font></font><span><font color="#0000ff">Sub</font></span></font>

Comments

One response to “How to add dimension entities to a block object using VBA?”

  1. It doesn’t works

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading