制限事項と Interop の使用

.NET API は、AutoCAD Civil 3D のすべての機能性を開示していない上に、COM API よりも開示している部分が小さいです。.NET: で現在まだ開示されていない領域は次の通りです:

さらに、機能が実装されているものの、まだ完成していない領域がいくつか存在します。

.NET プロジェクトでこの機能が必要な場合は、該当する COM オブジェクトを使用できます。

AutoCAD Civil 3D COM API を .NET から使用するには

  1. .NET ソリューションおよびプロジェクトを作成します。
  2. [プロジェクト]メニューまたはソリューション エクスプローラから[参照を追加]を選択します。
  3. [参照]タブで、Civil 3D のインストール フォルダを参照し、次の COM 相互運用 DLL を選択します。ここで <domain> は、使用する Civil ドメイン(Land、Roadway、Pipe、Survey)です。
    • Autodesk.AEC.Interop.Base
    • Autodesk.AEC.Interop.UiBase
    • Autodesk.AutoCAD.Interop
    • Autodesk.AutoCAD.Interop.Common
    • Autodesk.AECC.Interop.<domain>
    • Autodesk.AECC.Interop.Ui<domain>
  4. 上の参照を選択し、[ローカル コピー]プロパティを True に設定します。これにより、参照されているすべての型がターゲット アセンブリに埋め込まれ、その結果、参照されている相互運用 DLL は実行時に不要になります。
  5. Autodesk.AutoCAD.Interop およびAutodesk.AECC.Interop.Ui<ドメイン> ネームスペースを using 文または Imports 文に追加します。
注:

複数の Autodesk.AutoCAD.Interop ネームスペースでタイプが見つからないという警告(警告タイプ 1684)が表示される場合があります。この警告を無効にするには、プロジェクトのプロパティにある[作成]タブの[警告を抑止する]に 1684 と入力します。

ここに、COM 干渉を使用するドキュメントからポイント グループおよびサーフェスの数を取得する C# の例を挙げます。

string m_sAcadProdID = "AutoCAD.Application";
string m_sAeccAppProgId = "AeccXUiLand.AeccApplication.10.3";
...
private void useCom()
{
    //Construct AeccApplication object, Document and Database objects
    m_oAcadApp = (IAcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject(m_sAcadProdID);     
    if (m_oAcadApp != null)
    {
        m_oAeccApp = (IAeccApplication)m_oAcadApp.GetInterfaceObject(m_sAeccAppProgId);
        m_oAeccDoc = (IAeccDocument)m_oAeccApp.ActiveDocument;
        
        
        // get the Database object via a late bind
        m_oAeccDb = (Autodesk.AECC.Interop.Land.IAeccDatabase)m_oAeccDoc.GetType().GetProperty("Database").GetValue(m_oAeccDoc, null);
        long lCount = m_oAeccDb.PointGroups.Count;
        m_sMessage += "Number of PointGroups = " + lCount.ToString() + "\n";
        lCount = m_oAeccDb.Surfaces.Count;
        m_sMessage += "Number of Surfaces = " + lCount.ToString() + "\n\n";
        MessageBox.Show(m_sMessage);
        m_sMessage = "";
        
    }
}

解釈可能性に関するより詳しい例については、<インストール フォルダ>¥Sample¥AutoCAD Civil 3D¥COM¥ にある CSharpClient および VbDotNetClient サンプル プロジェクトを参照してください。.