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

使用规则重定义使civil 3d标签与视图平行

昨天同事提出了这样一个需求,

要让曲面的点位高程标签与屏幕平行,

以便于查看,

如下图:

其实这个实现起来很简单:

不知道大家对这个教程是否熟悉,

如果熟悉的话,

问题就相当简单。

直接修改样例代码,

几行代码就搞定了。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class LabelOverrule : DrawableOverrule
{
    public override bool WorldDraw(Autodesk.AutoCAD.GraphicsInterface.Drawable drawable, Autodesk.AutoCAD.GraphicsInterface.WorldDraw wd)
    {
        return false;
    }
 
    public override void ViewportDraw(Autodesk.AutoCAD.GraphicsInterface.Drawable drawable, Autodesk.AutoCAD.GraphicsInterface.ViewportDraw vd)
    {
        SurfaceElevationLabel label = (SurfaceElevationLabel)drawable;
        Point3d org = label.LabelLocation;
        Matrix3d m = Matrix3d.PlaneToWorld(new Plane(org, vd.Viewport.ViewDirection)) *
            Matrix3d.WorldToPlane(new Plane(org, label.GetPlane().Normal)) * Matrix3d.Rotation(-label.RotationAngle, label.GetPlane().Normal, org);
 
        vd.Geometry.PushModelTransform(m);
        base.ViewportDraw(drawable, vd);
        vd.Geometry.PopModelTransform();
    }
 
    public override int SetAttributes(Autodesk.AutoCAD.GraphicsInterface.Drawable drawable, Autodesk.AutoCAD.GraphicsInterface.DrawableTraits traits)
    {
        return (base.SetAttributes(drawable, traits)|2048);
    }
}

 

这里需要注意的是,

标签样式中“方向引用”需要设置为“世界坐标系”,

否则标签有些时候显示会不符合需求。

 

如何调用上面的代码,

还可以参照这个链接中文章。

 

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