アセンブリを読み込む

CivilDocument.AssemblyCollection オブジェクトには ImportAssembly() メソッドがあり、Autodesk ツール カタログ(.atc)ファイルまたは他の図面データベースからアセンブリを読み込むことができます。

ツール カタログには、アセンブリおよびサブアセンブリを編成および共有するメカニズムが用意されています。ATC ファイルから読み込むには、ImportAssembly() メソッドに、新しく読み込む Assembly の名前、.atc ファイルの絶対パス(ファイル名を含む)、ATC ファイル内のツールの itemId、および Assembly を挿入する図面内の位置を Point3d として指定します。

<ExternalDrawing> 要素を見て、ツールの正しい ItemID を決定することができます。これは、アセンブリの名前を示します。図のようなインペリアル アセンブリ ATC ファイルの BasicAssembly XML があります(明瞭にするため、いくつかの要素が除去されています):

<Tool Revision="20.0.0" option="0">
	<ItemID idValue="{CD468306-4A39-4AF9-B723-0C82A9644B97}"/>	
[elements removed]		
	<Data>
		<AeccDbAssembly>
			<ExternalDrawing>%AECCCONTENT_DIR%\Assemblies\Imperial\Basic Assembly.dwg</ExternalDrawing>
		</AeccDbAssembly>
		<Units>foot</Units>
	</Data>
</Tool>

次の例では、図形の位置を選択するようユーザにプロンプトが表示され、Civil 3D に同梱されているストック インペリアル アセンブリ ATC ファイルから BasicAssembly アセンブリが挿入されます。

try
{
    // import an assembly from an ATC file                     
    string assemblyName = _editor.GetString("Enter assembly name.").StringResult;
    string atcFilePath = @"C:\Users\Admininistrator\AppData\Roaming\Autodesk\C3D 2014\enu\Support\ToolPalette\Palettes\Assemblies - Imperial.atc"; 
    string itemId = "CD468306-4A39-4AF9-B723-0C82A9644B97";
    Point3d location = _editor.GetPoint("Select import assembly location").Value;

    ObjectId assemblyId3 = _civilDoc.AssemblyCollection.ImportAssembly(assemblyName, atcFilePath, itemId, location);

    ts.Commit();
}
catch (System.Exception e) { _editor.WriteMessage(e.Message); }

他の図面のデータベースからアセンブリを読み込むには、ImportAssembly() メソッドに、新しく読み込む Assembly の名前、ソース図面データベース、ソース データベース内の Assembly の名前、および読み込まれたアセンブリの Point3d 形式の位置を指定します。次の例では、新しいアセンブリの名前と位置を指定するようプロンプトが表示され、Civil 3D チュートリアル図面の1 つからアセンブリが読み込まれます。

using (Transaction ts = _currentDb.TransactionManager.StartTransaction())
{
    try
    {
        // get the currently opened drawing:
        CivilDocument currentCivilDoc = _civildoc;

        string assemblyName = _editor.GetString("Enter new assembly name.").StringResult;
        Point3d location = _editor.GetPoint("Select import assembly location").Value;

        // open a drawing from the civil tutorials folder         
        string drawingName=@"C:\Program Files\Autodesk\AutoCAD Civil 3D 2014\Help\Civil Tutorials\Drawings\Corridor-5b.dwg";
        Document drawingDoc = Application.DocumentManager.Open(drawingName, true);
        Database sourceDatabase = drawingDoc.Database;
        string sourceAssemblyName = "Assembly - (1)"; // Divided highway with no superelevation                    

        ObjectId assemblyId3 = _civildoc.AssemblyCollection.ImportAssembly(assemblyName, sourceDatabase, sourceAssemblyName, location);

        ts.Commit();
    }
    catch (System.Exception e) { _editor.WriteMessage(e.Message); }
}