Message 1 of 2
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
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
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
Solved! Go to Solution.