Civil 3d 由道路创建要素线


集合嵌套的层级比较多,

不熟悉API的话很难找到创建要素线的方法,
测试代码贴到这里,

方便有需要写类似代码的配有借鉴。

如何创建无场地内的要素线需要进一步研究。

除了创建要素线外,

还可以创建路线、纵断面,

有兴趣的朋友们可以自己研究一下。

以下代码在civil 3d 2022下测试。

public void C_cflTest()
{
    Document acDoc = Application.DocumentManager.MdiActiveDocument;
    Database acCurDb = acDoc.Database;
    Editor ed = acDoc.Editor;
    PromptEntityResult per = ed.GetEntity("\n拾取道路");
    if (per.Status != PromptStatus.OK) return;
    using (Transaction tr = acDoc.TransactionManager.StartTransaction())
    {
        var cor = per.ObjectId.GetObject(OpenMode.ForRead) as Corridor;
        foreach (Baseline bl in cor.Baselines)
        {
            var flcms = bl.MainBaselineFeatureLines.FeatureLineCollectionMap;

            foreach (FeatureLineCollection fls in flcms)
            {
                foreach (CorridorFeatureLine cfl in fls)
                {
                    // 由特定代码的要素线创建“自动道路要素线”
                    if (cfl.CodeName.Contains("Ditch_Bottom"))
                    {
                        try
                        {
                            // 要提前创建一个场地,不然这里会出错,
                            // 怎么输入“无”场地尚未找到解决方法
                            cfl.ExportAsGradingFeatureLine(civilDoc.GetSiteIds()[0], true);
                        }
                        catch (System.Exception ex)
                        {
                            ed.WriteMessage(ex.Message);
                        }

                    }
                }
            }
        }
        tr.Commit();
    }
}

相关