欢迎来到我的博客
Civil 3D开发与应用,欢迎加入QQ群:484124761
AutoCAD开发,欢迎加入QQ群:193522571

Civil 3d设置横断面图样式

一位网友提出这样一个问题:

在使用SectionView.StyleName属性时,

会抛出异常:need to override property StyleName.

我测试的结果一样,

同时测试了StyleId

结果是类似的:need to override property StyleId().

于是我想通过COM方式来实现,

经过测试,

能够达到目的,

虽然绕了一些,

但总比不能实现要强一点点。

 

 

测试的代码如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[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("\n拾取横断面");
    peo.SetRejectMessage("\n选择横断面图");
    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文件中具有名称为“测试样式”的横断面图样式。

posted @   david96007  阅读(2125)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示