<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Modify all dynamic blocks in a DWG file with C# in .NET Forum</title>
    <link>https://forums.autodesk.com/t5/net-forum/modify-all-dynamic-blocks-in-a-dwg-file-with-c/m-p/10936944#M13710</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;The BlockTable does not contain BlockReferences, it contains BlockTableRecords (i.e. model space, paper spaces, and block definitions).&lt;/P&gt;
&lt;P&gt;You can get the BlockReferences referencing the block definitions with the &lt;A href="https://help.autodesk.com/view/OARX/2022/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_DatabaseServices_BlockTableRecord_GetBlockReferenceIds__MarshalAsUnmanagedType_U1__bool__MarshalAsUnmanagedType_U1__bool" target="_blank" rel="noopener"&gt;BlockTableRecord.GetBlockReferenceIds&lt;/A&gt; method.&lt;/P&gt;
&lt;P&gt;Another way would be iterating through model and paer spaces to get the inserted block references as the Editor.SelectAll does.&lt;/P&gt;</description>
    <pubDate>Tue, 08 Feb 2022 17:21:17 GMT</pubDate>
    <dc:creator>_gile</dc:creator>
    <dc:date>2022-02-08T17:21:17Z</dc:date>
    <item>
      <title>Modify all dynamic blocks in a DWG file with C#</title>
      <link>https://forums.autodesk.com/t5/net-forum/modify-all-dynamic-blocks-in-a-dwg-file-with-c/m-p/10936534#M13709</link>
      <description>&lt;P&gt;Hello!&lt;/P&gt;&lt;P&gt;I am new to the AutoCAD API. I hope you can help me.&lt;/P&gt;&lt;P&gt;My goal is to modify the distance of all the dynamic blocks of an AutoCAD plan.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;On a first try&lt;/STRONG&gt;, I am modifying all the dynamic blocks using the following code. This approach works fine and I can see how the dynamic blocks change in AutoCAD.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[CommandMethod("test1")]&lt;/P&gt;&lt;P&gt;static public void Test1()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;var dimensions = new Dictionary&amp;lt;string, double&amp;gt; { { "LMB", 750 }, { "H", 400 }, { "S", 44 }, { "Z", 6 }, { "X", 30 }, { "Y", 120 } };&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;Document doc = Application.DocumentManager.MdiActiveDocument;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;Database db = doc.Database;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;Transaction tr = db.TransactionManager.StartTransaction();&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;Editor editor = doc.Editor;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;using (tr)&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;var result = editor.SelectAll();&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;SelectionSet ss = result.Value;&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;ObjectId[] ids = ss.GetObjectIds();&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;var blockReferenceList = new List();&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;foreach (var id in ids)&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-90px"&gt;var br = tr.GetObject(id, OpenMode.ForRead) as BlockReference;&lt;/P&gt;&lt;P class="lia-indent-padding-left-90px"&gt;if (br != null &amp;amp;&amp;amp; br.IsDynamicBlock)&lt;/P&gt;&lt;P class="lia-indent-padding-left-90px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;blockReferenceList.Add(br);&lt;/P&gt;&lt;P class="lia-indent-padding-left-90px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;foreach (var br in blockReferenceList)&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-90px"&gt;DynamicBlockReferencePropertyCollection pc = br.DynamicBlockReferencePropertyCollection;&lt;/P&gt;&lt;P class="lia-indent-padding-left-90px"&gt;foreach (DynamicBlockReferenceProperty prop in pc)&lt;/P&gt;&lt;P class="lia-indent-padding-left-90px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;if (prop.UnitsType == DynamicBlockReferencePropertyUnitsType.Distance)&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;var dimension = dimensions.SingleOrDefault(x =&amp;gt; x.Key == prop.PropertyName);&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;if (dimension.Key != null)&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-180px"&gt;prop.Value = dimension.Value;&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-90px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;tr.Commit();&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;}&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;In a second attempt,&lt;/STRONG&gt; what I need is to modify all the dynamic blocks by loading a DWG file into memory, modifying it and then saving the changes to disk. I am using the following code but it is not working. Can you help me with this, please?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[CommandMethod("test2")]&lt;/P&gt;&lt;P&gt;static public void Test2()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;var dimensions = new Dictionary&amp;lt;string, double&amp;gt; { { "LMB", 750 }, { "H", 400 }, { "S", 44 }, { "Z", 6 }, { "X", 30 }, { "Y", 120 } };&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;const string file = @"C:\CAD\temp.dwg";&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;using (var db = new Database(false, true))&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;db.ReadDwgFile(file, FileShare.Read, false, "");&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;db.CloseInput(true);&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;using (var tr = db.TransactionManager.StartTransaction())&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;var wdb = HostApplicationServices.WorkingDatabase;&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;HostApplicationServices.WorkingDatabase = db;&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;///&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;var blockReferenceList = new List();&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;foreach (var id in bt)&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;&lt;FONT color="#FF0000"&gt;BlockReference br = tr.GetObject(id, OpenMode.ForRead) as BlockReference; &lt;/FONT&gt;&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;if (br != null &amp;amp;&amp;amp; br.IsDynamicBlock)&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-180px"&gt;blockReferenceList.Add(br);&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;foreach (var br in blockReferenceList)&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;DynamicBlockReferencePropertyCollection pc = br.DynamicBlockReferencePropertyCollection;&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;foreach (DynamicBlockReferenceProperty prop in pc)&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-180px"&gt;if (prop.UnitsType == DynamicBlockReferencePropertyUnitsType.Distance)&lt;/P&gt;&lt;P class="lia-indent-padding-left-180px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-210px"&gt;var dimension = dimensions.SingleOrDefault(x =&amp;gt; x.Key == prop.PropertyName);&lt;/P&gt;&lt;P class="lia-indent-padding-left-210px"&gt;if (dimension.Key != null)&lt;/P&gt;&lt;P class="lia-indent-padding-left-210px"&gt;{&lt;/P&gt;&lt;P class="lia-indent-padding-left-240px"&gt;prop.Value = dimension.Value;&lt;/P&gt;&lt;P class="lia-indent-padding-left-210px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-180px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-150px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;///&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;tr.Commit();&lt;/P&gt;&lt;P class="lia-indent-padding-left-120px"&gt;HostApplicationServices.WorkingDatabase = wdb;&lt;/P&gt;&lt;P class="lia-indent-padding-left-90px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-90px"&gt;db.SaveAs(file, DwgVersion.Current);&lt;/P&gt;&lt;P class="lia-indent-padding-left-60px"&gt;}&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;}&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; Something to note is that the line highlighted in red always returns null.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Tue, 08 Feb 2022 14:48:31 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/modify-all-dynamic-blocks-in-a-dwg-file-with-c/m-p/10936534#M13709</guid>
      <dc:creator>javierTZL36</dc:creator>
      <dc:date>2022-02-08T14:48:31Z</dc:date>
    </item>
    <item>
      <title>Re: Modify all dynamic blocks in a DWG file with C#</title>
      <link>https://forums.autodesk.com/t5/net-forum/modify-all-dynamic-blocks-in-a-dwg-file-with-c/m-p/10936944#M13710</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;The BlockTable does not contain BlockReferences, it contains BlockTableRecords (i.e. model space, paper spaces, and block definitions).&lt;/P&gt;
&lt;P&gt;You can get the BlockReferences referencing the block definitions with the &lt;A href="https://help.autodesk.com/view/OARX/2022/ENU/?guid=OARX-ManagedRefGuide-Autodesk_AutoCAD_DatabaseServices_BlockTableRecord_GetBlockReferenceIds__MarshalAsUnmanagedType_U1__bool__MarshalAsUnmanagedType_U1__bool" target="_blank" rel="noopener"&gt;BlockTableRecord.GetBlockReferenceIds&lt;/A&gt; method.&lt;/P&gt;
&lt;P&gt;Another way would be iterating through model and paer spaces to get the inserted block references as the Editor.SelectAll does.&lt;/P&gt;</description>
      <pubDate>Tue, 08 Feb 2022 17:21:17 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/modify-all-dynamic-blocks-in-a-dwg-file-with-c/m-p/10936944#M13710</guid>
      <dc:creator>_gile</dc:creator>
      <dc:date>2022-02-08T17:21:17Z</dc:date>
    </item>
  </channel>
</rss>

