<?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 回复： Create Assembly with SubAssembly in C# in Civil 3D Customization Forum</title>
    <link>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12334379#M2842</link>
    <description>&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="465340553_0-1698367968101.png" style="width: 600px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1284527iFF364EB0BB4B0445/image-size/medium?v=v2&amp;amp;px=400" role="button" title="465340553_0-1698367968101.png" alt="465340553_0-1698367968101.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;I'm also creating assembly with code for the first time.&lt;/P&gt;
&lt;P&gt;Civil 3d 2018&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;public void C_AssTest()
{

    Document doc = Application.DocumentManager.MdiActiveDocument;

    var assId = CivilApplication.ActiveDocument.AssemblyCollection.Add("Test", AssemblyType.UndividedCrownedRoad, Point3d.Origin);
    var subAssId1 = CivilApplication.ActiveDocument.SubassemblyCollection.ImportStockSubassembly("BaseLane", "Subassembly.BasicLane", Point3d.Origin);
    var subAssId2 = CivilApplication.ActiveDocument.SubassemblyCollection.ImportStockSubassembly("ShapeTrapezoidal", "Subassembly.ShapeTrapezoidal", Point3d.Origin);

    using (Transaction tr = doc.TransactionManager.StartTransaction())
    {
        var ass = assId.GetObject(OpenMode.ForWrite) as Assembly;
        var assGroup1 = ass.AddSubassembly(subAssId1);
        assGroup1.Name = "Right";

        var assgroup2 = ass.MirrorSubassembly(subAssId1);
        assgroup2.Name = "Left";

        var subAss1 = subAssId1.GetObject(OpenMode.ForRead) as Subassembly;
        var subAss2 = assgroup2.GetSubassemblyIds()[0].GetObject(OpenMode.ForRead) as Subassembly;

        // Find Right Top Point
        var pt1 = (from x in subAss1.Points
                   orderby x.Offset descending, x.Elevation descending
                   select x).First();
        // add Second Subassembly to Right Group
        if (pt1 != null)
        {
            ass.AddSubassembly(subAssId2, pt1);
        }
        var pt2 = (from x in subAss2.Points
                   orderby x.Offset descending, x.Elevation descending
                   select x).First();
        if (pt2 != null)
        {
            ass.MirrorSubassembly(subAssId2, pt2);
        }
        tr.Commit();
    }
}

&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="465340553_1-1698368191920.png" style="width: 600px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1284528i4DF47168E15D071B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="465340553_1-1698368191920.png" alt="465340553_1-1698368191920.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 27 Oct 2023 00:57:57 GMT</pubDate>
    <dc:creator>465340553</dc:creator>
    <dc:date>2023-10-27T00:57:57Z</dc:date>
    <item>
      <title>Create Assembly with SubAssembly in C#</title>
      <link>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12328992#M2839</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm trying to create Civil3d assembly with connected subassembly. I'm trying to access the Assembly group but no avail. Im using 2023 version of Civil3d.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please check the below code that I created:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="general"&gt;void _CreateAssembly_1()
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            var db = doc.Database;
            var ed = doc.Editor;
            CivilDocument civilDoc = CivilDocument.GetCivilDocument(doc.Database);
            Point3d pntLoc = cSelection.Select_Point3d("Select Target Location");
 
            if (pntLoc == new Point3d(0, 0, 0)) return;
            using (doc.LockDocument())
            {
                using (Transaction tr = doc.TransactionManager.StartTransaction())
                {
                    BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
                    BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                    //acc3db.Assembly oAsm = new acc3db.Assembly();
 
                    ObjectId AssemblyId = civilDoc.AssemblyCollection.Add("test2", acc3db.AssemblyType.Other, pntLoc);
 
                    acc3db.Subassembly asm = AssemblyId.GetObject(OpenMode.ForWrite) as acc3db.Subassembly;
 
                    //civilDoc.SubassemblyCollection.Add("GEC_Carriageway_5layer",)
 
                    listBox1.Items.Clear();
                    // List Sub Assembly
                    foreach (var o in civilDoc.SubassemblyCollection)
                    {
                        acc3db.Subassembly subasm = o.GetObject(OpenMode.ForRead) as acc3db.Subassembly;
                        listBox1.Items.Add("  " + subasm.Name + " - " + subasm.Name);
                    }
                     
                    // Create the CW subassembly                    
                    ObjectId subAsmId_R = civilDoc.SubassemblyCollection.ImportSubassembly("GEC_Carriageway_5layer_R_2", @"C:\ProgramData\Autodesk\C3D 2023\enu\Imported Tools\GEC_Carriageway_5_layer\af8a6c22d9e746f895aad89dcfcc3f42.atc", "43365f65-e04b-4df4-98ba-c308d3e806b4", pntLoc.Add(new Vector3d(0, 0, 0)));
                    ObjectId subAsmId_L = civilDoc.SubassemblyCollection.ImportSubassembly("GEC_Carriageway_5layer_L_2", @"C:\ProgramData\Autodesk\C3D 2023\enu\Imported Tools\GEC_Carriageway_5_layer\af8a6c22d9e746f895aad89dcfcc3f42.atc", "43365f65-e04b-4df4-98ba-c308d3e806b4", pntLoc.Add(new Vector3d(0, 0, 0)));
 
                    acc3db.Subassembly sub = (acc3db.Subassembly)subAsmId_R.GetObject(OpenMode.ForWrite);
                    acc3db.Subassembly sub_L = (acc3db.Subassembly)subAsmId_L.GetObject(OpenMode.ForWrite);
 
                    foreach (var o in sub_L.ParamsLong)
                    {
                        if (o.DisplayName.ToUpper() == "SIDE") o.Value = 1;
                    }
                    tr.Commit();
                }
            }
        }&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 25 Oct 2023 05:45:23 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12328992#M2839</guid>
      <dc:creator>alexis.nunez98YHM</dc:creator>
      <dc:date>2023-10-25T05:45:23Z</dc:date>
    </item>
    <item>
      <title>回复： Create Assembly with SubAssembly in C#</title>
      <link>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12331421#M2840</link>
      <description>&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="465340553_0-1698279221640.png" style="width: 600px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1283911i046C54E7DBE06AEB/image-size/medium?v=v2&amp;amp;px=400" role="button" title="465340553_0-1698279221640.png" alt="465340553_0-1698279221640.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 26 Oct 2023 00:19:25 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12331421#M2840</guid>
      <dc:creator>465340553</dc:creator>
      <dc:date>2023-10-26T00:19:25Z</dc:date>
    </item>
    <item>
      <title>回复： Create Assembly with SubAssembly in C#</title>
      <link>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12332720#M2841</link>
      <description>&lt;P&gt;Thank I was able to correct the code. Now my problem is to add another subassembly which is connected to subassembly.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="general"&gt;                    BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
                    BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                    //acc3db.Assembly oAsm = new acc3db.Assembly();

                    ObjectId AssemblyId = civilDoc.AssemblyCollection.Add("test2", acc3db.AssemblyType.Other, pntLoc);

                    acc3db.Assembly asm = AssemblyId.GetObject(OpenMode.ForWrite) as acc3db.Assembly;

                    

                    //civilDoc.SubassemblyCollection.Add("GEC_Carriageway_5layer",)

                    listBox1.Items.Clear();
                    // List Sub Assembly
                    listBox1.Items.Add("------------ SubAssembly Collection START - " + civilDoc.SubassemblyCollection.Count);
                    foreach (var o in civilDoc.SubassemblyCollection)
                    {
                        acc3db.Subassembly subasm = o.GetObject(OpenMode.ForRead) as acc3db.Subassembly;
                        listBox1.Items.Add("  " + subasm.Name + " - " + subasm.Name);
                    }
                    listBox1.Items.Add("------------ END - " + civilDoc.SubassemblyCollection.Count);

                    // Create the CW subassembly
                    //ObjectId subAsmId = civilDoc.SubassemblyCollection.ImportSubassembly("GEC_Carriageway_5layer", @"C:\ProgramData\Autodesk\C3D 2023\enu\Imported Tools\GEC_Carriageway_5_layer\af8a6c22d9e746f895aad89dcfcc3f42.atc", "{2fb63dad-6d59-4bed-9de7-d90f091e4a29}", pntLoc.Add(new Vector3d(0,2,0)));
                    ObjectId subAsmId_R = civilDoc.SubassemblyCollection.ImportSubassembly("GEC_Carriageway_5layer_R_2", @"C:\ProgramData\Autodesk\C3D 2023\enu\Imported Tools\GEC_Carriageway_5_layer\af8a6c22d9e746f895aad89dcfcc3f42.atc", "43365f65-e04b-4df4-98ba-c308d3e806b4", pntLoc.Add(new Vector3d(0, 0, 0)));
                    ObjectId subAsmId_L = civilDoc.SubassemblyCollection.ImportSubassembly("GEC_Carriageway_5layer_L_2", @"C:\ProgramData\Autodesk\C3D 2023\enu\Imported Tools\GEC_Carriageway_5_layer\af8a6c22d9e746f895aad89dcfcc3f42.atc", "43365f65-e04b-4df4-98ba-c308d3e806b4", pntLoc.Add(new Vector3d(0, 0, 0)));

                    acc3db.Subassembly sub = (acc3db.Subassembly)subAsmId_R.GetObject(OpenMode.ForWrite);
                    acc3db.Subassembly sub_L = (acc3db.Subassembly)subAsmId_L.GetObject(OpenMode.ForWrite);


                     
                    acc3db.AssemblyGroup AsmGrp_R = asm.AddSubassembly(subAsmId_R);
                    AsmGrp_R.Name = "Right";
                    acc3db.AssemblyGroup AsmGrp_L = asm.AddSubassembly(subAsmId_L);
                    AsmGrp_L.Name = "Left";

                    UpdateSubAssemblyParameters(sub_L, "Side", "1");&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The output of the above code is this:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="alexisnunez98YHM_0-1698324958210.png" style="width: 600px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1284202i273BAB0F97AB26D4/image-size/medium?v=v2&amp;amp;px=400" role="button" title="alexisnunez98YHM_0-1698324958210.png" alt="alexisnunez98YHM_0-1698324958210.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to add another subassembly like the one below:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="alexisnunez98YHM_1-1698325046462.png" style="width: 600px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1284203iFA9BE3B23414CD4E/image-size/medium?v=v2&amp;amp;px=400" role="button" title="alexisnunez98YHM_1-1698325046462.png" alt="alexisnunez98YHM_1-1698325046462.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can you provide a sample pls.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 26 Oct 2023 12:57:46 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12332720#M2841</guid>
      <dc:creator>alexis.nunez98YHM</dc:creator>
      <dc:date>2023-10-26T12:57:46Z</dc:date>
    </item>
    <item>
      <title>回复： Create Assembly with SubAssembly in C#</title>
      <link>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12334379#M2842</link>
      <description>&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="465340553_0-1698367968101.png" style="width: 600px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1284527iFF364EB0BB4B0445/image-size/medium?v=v2&amp;amp;px=400" role="button" title="465340553_0-1698367968101.png" alt="465340553_0-1698367968101.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;I'm also creating assembly with code for the first time.&lt;/P&gt;
&lt;P&gt;Civil 3d 2018&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;public void C_AssTest()
{

    Document doc = Application.DocumentManager.MdiActiveDocument;

    var assId = CivilApplication.ActiveDocument.AssemblyCollection.Add("Test", AssemblyType.UndividedCrownedRoad, Point3d.Origin);
    var subAssId1 = CivilApplication.ActiveDocument.SubassemblyCollection.ImportStockSubassembly("BaseLane", "Subassembly.BasicLane", Point3d.Origin);
    var subAssId2 = CivilApplication.ActiveDocument.SubassemblyCollection.ImportStockSubassembly("ShapeTrapezoidal", "Subassembly.ShapeTrapezoidal", Point3d.Origin);

    using (Transaction tr = doc.TransactionManager.StartTransaction())
    {
        var ass = assId.GetObject(OpenMode.ForWrite) as Assembly;
        var assGroup1 = ass.AddSubassembly(subAssId1);
        assGroup1.Name = "Right";

        var assgroup2 = ass.MirrorSubassembly(subAssId1);
        assgroup2.Name = "Left";

        var subAss1 = subAssId1.GetObject(OpenMode.ForRead) as Subassembly;
        var subAss2 = assgroup2.GetSubassemblyIds()[0].GetObject(OpenMode.ForRead) as Subassembly;

        // Find Right Top Point
        var pt1 = (from x in subAss1.Points
                   orderby x.Offset descending, x.Elevation descending
                   select x).First();
        // add Second Subassembly to Right Group
        if (pt1 != null)
        {
            ass.AddSubassembly(subAssId2, pt1);
        }
        var pt2 = (from x in subAss2.Points
                   orderby x.Offset descending, x.Elevation descending
                   select x).First();
        if (pt2 != null)
        {
            ass.MirrorSubassembly(subAssId2, pt2);
        }
        tr.Commit();
    }
}

&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="465340553_1-1698368191920.png" style="width: 600px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/1284528i4DF47168E15D071B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="465340553_1-1698368191920.png" alt="465340553_1-1698368191920.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 27 Oct 2023 00:57:57 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12334379#M2842</guid>
      <dc:creator>465340553</dc:creator>
      <dc:date>2023-10-27T00:57:57Z</dc:date>
    </item>
    <item>
      <title>回复： Create Assembly with SubAssembly in C#</title>
      <link>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12338321#M2843</link>
      <description>&lt;P&gt;I managed to find a solution but your sample here is better. I think I will use this kind of approach.&lt;BR /&gt;Thank you very much!&lt;/P&gt;</description>
      <pubDate>Sun, 29 Oct 2023 05:26:41 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/civil-3d-customization-forum/create-assembly-with-subassembly-in-c/m-p/12338321#M2843</guid>
      <dc:creator>alexis.nunez98YHM</dc:creator>
      <dc:date>2023-10-29T05:26:41Z</dc:date>
    </item>
  </channel>
</rss>

