Civil 3d设置横断面图样式
Posted myzw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Civil 3d设置横断面图样式相关的知识,希望对你有一定的参考价值。
一位网友剔除这样是个问题:
在使用SectionView.StyleName属性时,
会抛出异常:need to override property StyleName.
我测试的结果一样,
同时测试了StyleId
结果是类似的:need to override property StyleId().
于是我想通过COM方式来实现,
经过测试,
能够达到目的,
虽然绕了了一些,
但总比不能实现要强一点点。
测试的代码如下:
[CommandMethod("MyGroup", "Tt101", CommandFlags.Modal)] public void TestCommand1() // This method can have any name { Document doc = Application.DocumentManager.CurrentDocument; Editor ed = doc.Editor; CivilDocument cDoc = CivilApplication.ActiveDocument; PromptEntityOptions peo = new PromptEntityOptions(" 拾取横断面"); peo.SetRejectMessage(" 选择横断面图"); peo.AddAllowedClass(typeof(SectionView),true); PromptEntityResult per = ed.GetEntity(peo); if (per.Status==PromptStatus.OK) { try { //////using (Transaction tr = doc.TransactionManager.StartTransaction()) //////{ ////// SectionView sv = per.ObjectId.GetObject(OpenMode.ForWrite) as SectionView; ////// //sv.StyleName = "测试样式"; //need to override property StyleName. ////// //var id = cDoc.Styles.SectionViewStyles["测试样式"]; ////// //sv.StyleId = id; //need to override property StyleId(). ////// tr.Commit(); //////} ////////////////////////////////////////////////////////////////////////// IntPtr comIdPtr = per.ObjectId.OldIdPtr; long comId = comIdPtr.ToInt64(); AeccSectionView asv = ComCivilDoc.ObjectIdToObject(comId); var id = cDoc.Styles.SectionViewStyles["测试样式"]; AeccSectionViewStyle asvs= ComCivilDoc.ObjectIdToObject(id.OldId);//偷懒,试一下过时的方法还行不? asv.set_Style(asvs); } catch (System.Exception ex) { ed.WriteMessage(ex.Message); } } }
代码中的ComCivilDoc详见《AutoCAD Civil 3D .NET二次开发》第226页,
转换方法在第232页。
测试以上代码需要测试的dwg文件中具有名称为“测试样式”的横断面图样式。
以上是关于Civil 3d设置横断面图样式的主要内容,如果未能解决你的问题,请参考以下文章