2017-03-01 16 views
1

ObjectARX_2017_Win_64でAutoCAD 2017 Professionalを使用しています。 &を照会しようとしていますが、COMインターオペラビリティを使用して動的ブロックの「ブロックプロパティテーブル」プロパティを変更すると、成功しません。テーブルには、名前付きの列とデータを含む複数の行が含まれます。データはString型とInteger型です。 "お手伝い"のセクションで何か歓迎します。AutoCadダイナミックブロック 'ブロックプロパティテーブル'へのC#Comの相互運用性へのアクセス

using Autodesk.AutoCAD.Interop; 
    using Autodesk.AutoCAD.Interop.Common; 
    using System.Runtime.InteropServices; 
    . 
    . 
    . 
    public void DrawLayout(boards board, FormAutocad frmAutoCad) 
    { 
     double[] insertpoint = new double[] { 0, IP_CONNECTOR_Y, 0 }; 
     if (AcadLinkStart(frmAutoCad)) 
     { 
      destdwg = acadApp.ActiveDocument; 
      // Get all the standard blocks from BLOCK_REF and place in destination drawing 
      CopyStandardBlocksToDrawing(); 
      AcadBlockReference o = destdwg.ModelSpace.InsertBlock(insertpoint, "041_CHASSIS", 1.0, 1.0, 1.0, 0.0); // Ensure blocks are loaded in CopyStandardBlocksToDrawing 

      Object[] attribs = o.GetAttributes() as object[]; 
      Object[] props = o.GetDynamicBlockProperties() as object[]; 
      foreach (var prop in props.OfType<AcadDynamicBlockReferenceProperty>()) 
      { 
      if (prop.PropertyName == "My_Table") 
      { 
       // Do Stuff 
      } 
     } 
    } 

答えて

0

私の知る限り、テーブルの行インデックスに対応するプロパティValueを取得または設定できます。

Object[] props = o.GetDynamicBlockProperties(); 
    foreach (var prop in props.OfType<AcadDynamicBlockReferenceProperty>()) 
    { 
     if (prop.PropertyName == "My_Table") 
     { 
      if (prop.Value != 0) 
       prop.Value = (short)0; // <- reset to the first row 
     } 
    } 
+0

ありがとうgileCAD。残念です。ブロックプロパティテーブルは、ブロックのカスタム表データを格納するのに最適な場所のようでした。 500以上のパラメータの代わりに、複数行の属性を解析する必要があるように見えます。誰かがウサギを帽子から引き抜くことができるように、このスレッドを開いたままにしておきます。 – Mark