Mirrored SubAssembly disappear when calling an unrelated code

Mirrored SubAssembly disappear when calling an unrelated code

soonhui
Advisor Advisor
265 Views
1 Reply
Message 1 of 2

Mirrored SubAssembly disappear when calling an unrelated code

soonhui
Advisor
Advisor

Here's my code

 

        [CommandMethod(nameof(SubAssemblyCreationTest))]
        public void SubAssemblyCreationTest()
        {

            var doc = Application.DocumentManager.MdiActiveDocument;

            using Transaction tr = doc.TransactionManager.StartTransaction();

            var assId = CivilApplication.ActiveDocument.AssemblyCollection.Add("Test", AssemblyType.UndividedCrownedRoad, Point3d.Origin);
            var baseLaneTemplateId = CivilApplication.ActiveDocument.SubassemblyCollection.ImportStockSubassembly("BaseLane", "Subassembly.BasicLane", Point3d.Origin);
            var shapeTrapezoidTemplateId = CivilApplication.ActiveDocument.SubassemblyCollection.ImportStockSubassembly("ShapeTrapezoidal", "Subassembly.ShapeTrapezoidal", Point3d.Origin);
           // var trapezoidTemplate = tr.GetObject(shapeTrapezoidTemplateId, OpenMode.ForWrite);  // uncomment this code will make the left half mirror assembly disappear
          

            var ass = assId.GetObject(OpenMode.ForWrite) as Assembly;
            var assemblyGroupRight = ass.AddSubassembly(baseLaneTemplateId);
            assemblyGroupRight.Name = "Right";

            var assemblyGroupLeft = ass.MirrorSubassembly(baseLaneTemplateId);
            assemblyGroupLeft.Name = "Left";

            var baseLaneTemplate = baseLaneTemplateId.GetObject(OpenMode.ForRead) as Subassembly;
            var baseLaneLeft = assemblyGroupLeft.GetSubassemblyIds()[0].GetObject(OpenMode.ForRead) as Subassembly;

            // Find Right Top Point
            var pt1 = (from x in baseLaneTemplate.Points
                orderby x.Offset descending, x.Elevation descending
                select x).First();
            // add Second Subassembly to Right Group
            if (pt1 != null)
            {
                ass.AddSubassembly(shapeTrapezoidTemplateId, pt1);
            }
            var pt2 = (from x in baseLaneLeft.Points
                orderby x.Offset descending, x.Elevation descending
                select x).First();
            if (pt2 != null)
            {
                ass.MirrorSubassembly(shapeTrapezoidTemplateId, pt2);
            }
            tr.Commit();
        }

 

When you run this, you will find that an assembly with a BasicLane and Trapezoid subassembly created symmetrically on the left and right side.

 

But if you uncomment the line 

  var trapezoidTemplate = tr.GetObject(shapeTrapezoidTemplateId, OpenMode.ForWrite);

 

Then the left subassembly group disappears! But that line is an orphan line because we are not using it anywhere else.

 

That seems to me like a bug?

##########

Ngu Soon Hui

##########

I'm the Benevolent Dictator for Life for MiTS Software. Read more here


I also setup Civil WHIZ in order to share what I learnt about Civil 3D
0 Likes
Accepted solutions (1)
266 Views
1 Reply
  • Road
Reply (1)
Message 2 of 2

sreeparna_mandal
Autodesk
Autodesk
Accepted solution

Civil 3D engineering team has confirmed that code fix for this issue will be available from C3D 2026.1 release.