civil 3d偏移路线加宽过渡段平滑
我在autodesk论坛中的发的相关帖子:
how to add smooth AlignmentTransition
把相关的代码发到此处:
使用方法AddWidening时不会读取命令设置里的值,
需要使用方法AddAutoWidenings才行。
[CommandMethod("TestOffsetAlign")] public void offalign() { var doc = Application.DocumentManager.MdiActiveDocument; var ed = doc.Editor; var db = doc.Database; var civDoc = CivilApplication.ActiveDocument; var entOpts = new PromptEntityOptions("\nSelect an alignment to offset:"); entOpts.SetRejectMessage("...not an alignment, try again!"); entOpts.AddAllowedClass(typeof(Alignment), true); var entSel = ed.GetEntity(entOpts); if (entSel.Status != PromptStatus.OK) return; using (Transaction tr = db.TransactionManager.StartTransaction()) { var align1 = (Alignment)tr.GetObject(entSel.ObjectId, OpenMode.ForRead); var align2id = Alignment.CreateOffsetAlignment("OffsetAlignment", align1.ObjectId, 10.0, align1.StyleId); var align2 = (Alignment)tr.GetObject(align2id, OpenMode.ForWrite); var oInfo = align2.OffsetAlignmentInfo; oInfo.AddWidening(150, 250, 20); var r2 = oInfo.Regions[1]; r2.EntryTransition.TransitionType = Autodesk.Civil.TransitionType.CurveLineCurve; CurveLineCurveTransitionDescription entrydesc = (CurveLineCurveTransitionDescription)r2.EntryTransition.TransitionDescription; entrydesc.StartStation = 100; entrydesc.Length = 50; entrydesc.EntryCurveRadius = 15; entrydesc.ExitCurveRadius = 15; r2.ExitTransition.TransitionType = Autodesk.Civil.TransitionType.Linear; LinearTransitionDescription exitdesc = (LinearTransitionDescription)r2.ExitTransition.TransitionDescription; exitdesc.StartStation = 250; exitdesc.Length = 250; tr.Commit(); } }
[CommandMethod("TestOffsetAlign2")] public void C_TestOffsetAlign2() { var doc = Application.DocumentManager.MdiActiveDocument; var ed = doc.Editor; var db = doc.Database; var civDoc = CivilApplication.ActiveDocument; var entOpts = new PromptEntityOptions("\nSelect an alignment to offset:"); entOpts.SetRejectMessage("...not an alignment, try again!"); entOpts.AddAllowedClass(typeof(Alignment), true); var entSel = ed.GetEntity(entOpts); if (entSel.Status != PromptStatus.OK) return; List<AlignmentSubEntityArc> alignmentSubEntityArcList = new List<AlignmentSubEntityArc>(); using (Transaction tr = db.TransactionManager.StartTransaction()) { //Open Main Alignment for Read Alignment align = tr.GetObject(entSel.ObjectId, OpenMode.ForRead) as Alignment; //Build List of Alignment Arcs foreach (AlignmentEntity alignEnt in align.Entities) { int subEntCount = System.Convert.ToInt32(alignEnt.SubEntityCount); for (int i = 0; i <= subEntCount - 1; i++) { AlignmentSubEntity alignSubEnt = alignEnt[i]; if (alignSubEnt.SubEntityType == AlignmentSubEntityType.Arc) { alignmentSubEntityArcList.Add(alignSubEnt as AlignmentSubEntityArc); } } } //Convert List of Arcs to Array AlignmentSubEntityArc[] arcs = alignmentSubEntityArcList.ToArray(); //Create Left and Right Offset Alignments ObjectId offsetAlignRightId = Alignment.CreateOffsetAlignment(db, "MyOffsetAlignmentRight", align.Name, 30, "Standard"); ObjectId offsetAlignLeftId = Alignment.CreateOffsetAlignment(db, "MyOffsetAlignmentLeft", align.Name, -30, "Standard"); //Get Left and Right Offset Alignments Alignment offsetAlignRight = offsetAlignRightId.GetObject(OpenMode.ForWrite) as Alignment; Alignment offsetAlignLeft = offsetAlignLeftId.GetObject(OpenMode.ForWrite) as Alignment; //Get Left andd Right Offset Info OffsetAlignmentInfo offsetInfoRight = offsetAlignRight.OffsetAlignmentInfo; OffsetAlignmentInfo offsetInfoLeft = offsetAlignLeft.OffsetAlignmentInfo; //Create AutoWidening Info AutoWideningInfo widenInfo = new AutoWideningInfo() { IncreasedWidth = 50, Side = Autodesk.Civil.WideningSide.Both, TransitionLength = 100 }; //Add the Left and Right AutoWidening Info offsetInfoRight.AddAutoWidenings(widenInfo, arcs); offsetInfoLeft.AddAutoWidenings(widenInfo, arcs); //Commit Transaction tr.Commit(); } }
注意:
AlignmentSubEntityArc是父路线的,不是偏移路线的!!!!!!!
标签:
Civil3d
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2017-05-18 学习 Civil 3D二次开发从哪儿开始?