zoukankan      html  css  js  c++  java
  • 使用规则重定义使civil 3d标签与视图平行

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

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

    以便于查看,

    如下图:

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

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

    如果熟悉的话,

    问题就相当简单。

    直接修改样例代码,

    几行代码就搞定了。

        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);
            }
        }
    

    这里需要注意的是,

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

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

    如何调用上面的代码,

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

  • 相关阅读:
    汇编10:CALL和RET指令
    汇编09:转移指令的原理
    汇编08:数据处理的两个基本问题
    汇编07:定位内存地址的方法
    汇编06:包含多个段的程序
    汇编05:[BX]和loop指令
    汇编04:第一个汇编程序
    汇编03:寄存器
    C#版的mongodb最新的官方驱动2.4.0版本
    如何教你看懂复杂的正则表达式
  • 原文地址:https://www.cnblogs.com/myzw/p/13369887.html
Copyright © 2011-2022 走看看