Bentley二次开发教程04-创建几何元素-线

逐项介绍以下十几种元素的创建方法,本次先介绍线的创建方法
在这里插入图片描述

线

线元素(LineElement)

该创建方式为首先创建坐标,然后使用坐标创建几何直线,再使用几何直线创建直线元素

public static void CmdCreateLine(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    DPoint3d p1 = DPoint3d.Zero;//创建三维点
    DPoint3d p2 = new DPoint3d(10000, 0, 0);

    DSegment3d segment = new DSegment3d(p1, p2);//创建直线图元

    LineElement line = new LineElement(dgnModel, null, segment);//创建直线元素
    line.AddToModel();//将直线元素写入模型空间
}

在这里插入图片描述

点串元素(PointStringElement)

第一种创建点串的方法为首先创建一个用于存储点串坐标点的数组,然后使用这个数组创建点串元素

public static void CmdCreatePointString1(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    DPoint3d p1 = DPoint3d.Zero;//创建三维点
    DPoint3d p2 = new DPoint3d(10000, 10000, 0);
    DPoint3d p3 = new DPoint3d(20000, 0, 0);
    DPoint3d p4 = new DPoint3d(30000, -10000, 0);
    DPoint3d p5 = new DPoint3d(40000, 0, 0);

    DPoint3d[] pos = { p1, p2, p3, p4, p5 };//将三维点添加到三维点数组中

    PointStringElement pointString = new PointStringElement(dgnModel, null, pos, true);//创建点串
    pointString.AddToModel();//将点串元素写入模型空间
}
        }

在这里插入图片描述
第二种创建点串的方法为首先创建一个用于存储点串坐标点的数组,同时可以使用变换矩阵对点坐标位置进行修改,最后使用这个数组创建点串元素

public static void CmdCreatePointString2(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    DPoint3d p1 = DPoint3d.Zero;//创建三维点
    DPoint3d p2 = new DPoint3d(10000, 10000, 0);
    DPoint3d p3 = new DPoint3d(20000, 0, 0);
    DPoint3d p4 = new DPoint3d(30000, -10000, 0);
    DPoint3d p5 = new DPoint3d(40000, 0, 0);

    DPoint3d[] pos = { p1, p2, p3, p4, p5 };//将三维点添加到三维点数组中

    DMatrix3d m1 = DMatrix3d.Identity;//创建变换矩阵
    DMatrix3d m2 = DMatrix3d.Identity;
    DMatrix3d m3 = DMatrix3d.Identity;
    DMatrix3d m4 = DMatrix3d.Identity;
    DMatrix3d m5 = DMatrix3d.Identity;

    DMatrix3d[] ms = { m1, m2, m3, m4, m5 };//将变换矩阵添加到变换矩阵数组中

    PointStringElement pointString = new PointStringElement(dgnModel, null, pos, ms, true);//创建点串
    pointString.AddToModel();//将点串元素写入模型空间
}

线串元素(LineStringElement)

线串元素的创建方法为首先创建用于存储线串元素端点的坐标数组,然后使用这个数组创建线串元素。

public static void CmdCreateLineString(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    DPoint3d p1 = DPoint3d.Zero;//创建三维点
    DPoint3d p2 = new DPoint3d(10000, 10000, 0);
    DPoint3d p3 = new DPoint3d(20000, 0, 0);
    DPoint3d p4 = new DPoint3d(30000, -10000, 0);
    DPoint3d p5 = new DPoint3d(40000, 0, 0);

    DPoint3d[] pos = { p1, p2, p3, p4, p5 };//将三维点添加到三维点数组中

    LineStringElement lineString = new LineStringElement(dgnModel,null,pos);//创建线串元素
    lineString.AddToModel();//将线串元素写入模型空间
}

弧元素(ArcElement)

第一种弧元素的创建方式是首先使用定义的圆心,长轴与短轴矢量,构建出几何椭圆,然后利用定义的几何椭圆定义弧元素

public static void CmdCreateArc1(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    DPoint3d centerPo = DPoint3d.Zero;//创建圆心            
    DVector3d vector0 = new DVector3d(0, 20000, 0);//创建长轴矢量
    DVector3d vector90 = new DVector3d(-10000, 0, 0);//创建短轴矢量

    DEllipse3d ellipse = new DEllipse3d(centerPo, vector0, vector90);//创建几何椭圆

    ArcElement arc = new ArcElement(dgnModel, null, ellipse);//使用几何椭圆创建弧元素
    arc.AddToModel();//将弧元素写入模型空间
}

在这里插入图片描述
第二种弧元素的创建方式是使用定义圆心坐标,设定弧元素的主轴长,副轴长,旋转角,起始旋转角,扫掠角属性参数创建弧元素

public static void CmdCreateArc2(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    DPoint3d centerPo = DPoint3d.Zero;//创建圆心                    

    ArcElement arc = new ArcElement(dgnModel, null, DPoint3d.Zero, 50000, 50000, 0, Angle.PI.Radians / 2, Angle.PI.Radians / 2);//使用几何椭圆创建弧元素
    /*
     * 创建弧元素
     * dgnModel:创建弧元素所在模型空间
     * templateElement:元素模板
     * center:弧元素的圆心
     * axis1:主轴长
     * axis2:副轴长
     * rotation:圆弧旋转角
     * start:圆弧起始旋转角
     * sweep:圆弧扫掠角
     */
    arc.AddToModel();//将弧元素写入模型空间
}

第三种弧元素的创建方式是使用定义圆心坐标,设定弧元素的主轴长,副轴长,圆弧变换矩阵(圆弧旋转角),起始旋转角,扫掠角属性参数创建弧元素

public static void CmdCreateArc3(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    DPoint3d centerPo = DPoint3d.Zero;//创建圆心            
    DMatrix3d matrix = DMatrix3d.Identity;//创建变换矩阵

    ArcElement arc = new ArcElement(dgnModel, null, centerPo, 50000, 50000, DMatrix3d.Identity, Angle.PI.Radians / 3, Angle.PI.Radians);
    /*
     * 创建弧元素             
     * dgnModel:创建弧元素所在模型空间
     * templateElement:元素模板
     * center:弧元素的圆心
     * axis1:主轴长
     * axis2:副轴长
     * rotation:圆弧变换矩阵(圆弧旋转角)
     * start:圆弧起始旋转角
     * sweep:圆弧扫掠角
     */
    arc.AddToModel();//将弧元素写入模型空间
}

复杂形元素(ComplexStringElement)

复杂形元素是将构成元素添加到复杂形元素的子部件中,添加完成后生成。需要注意的是,复杂元素子部件构成的线形需要首尾相连,且存在顺序要求,即前者的末端连接后者的首端,否则可能出现生成复杂形元素不符合预期的情况

public static void CmdCreateComplexString(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间            

    #region Create line element
    DPoint3d p1 = DPoint3d.Zero;//创建三维点
    DPoint3d p2 = new DPoint3d(10000, 0, 0);

    DSegment3d segment = new DSegment3d(p1, p2);//创建直线图元

    LineElement line = new LineElement(dgnModel, null, segment);//创建直线元素
    #endregion

    #region Create arc element
    DPoint3d centerPo = DPoint3d.Zero;//创建圆心            
    DMatrix3d matrix = DMatrix3d.Identity;//创建变换矩阵

    ArcElement arc = new ArcElement(dgnModel, null, centerPo, 10000, 10000, DMatrix3d.Identity, 0, Angle.PI.Radians/2);//创建弧元素
    #endregion

    #region Create linestring element
    DPoint3d p3 = new DPoint3d(0,10000,0);//创建三维点
    DPoint3d p4 = new DPoint3d(-10000, 10000, 0);
    DPoint3d p5 = new DPoint3d(-10000, 20000, 0);
    DPoint3d p6 = new DPoint3d(20000, 20000, 0);

    DPoint3d[] pos = { p3, p4, p5, p6 };//将三维点添加到三维点数组中

    LineStringElement lineString = new LineStringElement(dgnModel, null, pos);//创建线串元素
    #endregion

    ComplexStringElement complexString = new ComplexStringElement(dgnModel, null);//创建复杂线元素
    complexString.AddComponentElement(line);//添加复杂线元素的子部件
    complexString.AddComponentElement(arc);
    complexString.AddComponentElement(lineString);
    complexString.AddComponentComplete();//添加子部件完成
    complexString.AddToModel();//将复杂线元素写入模型空间
}

在这里插入图片描述

曲线元素(CurveElement)

第一种曲线元素的创建方式需要首先构件用于控制曲线轨迹的坐标点集,需要注意的是,在定义曲线元素时,点集中的坐标点个数需要大于等于6,否则无法成功创建

public static void CmdCreateCurve1(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    DPoint3d[] pos = { DPoint3d.Zero,
                       new DPoint3d(10000, 0, 0),
                       new DPoint3d(10000, 10000, 0),
                       new DPoint3d(20000, 10000, 0),
                       new DPoint3d(20000, 0, 0),
                       new DPoint3d(30000, 0, 0)
                     };//创建曲线控制点坐标集

    CurveElement curve = new CurveElement(dgnModel, null, pos);//创建曲线元素 注意:三维点个数需大于等于6
    curve.AddToModel();//将曲线元素写入模型空间
}

在这里插入图片描述
第二种曲线元素的创建方式与上面的方法的区别在于需要首先构件用于控制曲线轨迹的坐标点列表,同时坐标点数量需要大于等于6

public static void CmdCreateCurve2(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    IList<DPoint3d> pos = new List<DPoint3d>
    {
        DPoint3d.Zero,
        new DPoint3d(10000, 0, 0),
        new DPoint3d(10000, 10000, 0),
        new DPoint3d(20000, 10000, 0),
        new DPoint3d(20000, 0, 0),
        new DPoint3d(30000, 0, 0)
    };//创建曲线控制点坐标列表

    CurveElement curve = new CurveElement(dgnModel, null, pos);//创建曲线元素 注意:三维点个数需大于等于6
    curve.AddToModel();//将曲线元素写入模型空间
}

B样条曲线元素(BSplineCurveElement)

第一种B样条曲线元素 的创建方式是通过设置B样条曲线的控制点及起止端方向向量及MSlnterpolationCurve属性后定义MSInterpolationCurve,然后通过MSInterpolationCurve创建B样条曲线元素

public static void CmdCreateBSplineCurve1(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    DPoint3d[] pts = { new DPoint3d(0, 0, 0), new DPoint3d(1000, 1000, 0), new DPoint3d(1000, -1000, 0), new DPoint3d(0, -1000, 0), new DPoint3d(0, 0, 0) };//创建B样条曲线的节点
    DVector3d[] tangents = { new DVector3d(0, 0), new DVector3d(0, 0) };//设置B样条曲线的起端点切线方向
    MSInterpolationCurve interpolationCurve = MSInterpolationCurve.CreateFromPointsAndEndTangents(pts, true, 0, tangents, true, false, false, false);
    /*
     *根据节点和起端点切线方向创建插值曲线             
     * points:插值点
     * removeDuplicatePoints:是否需要删除重复点
     * endTangents:端点切线方向向量
     * closedCurve:是否需要闭合曲线
     * colinearTangents:切线是否共线
     * chordLenTangents:是否仅相切弦
     * naturalTangents:是否为自然切线
     */

    BSplineCurveElement bsplineCurve = new BSplineCurveElement(dgnModel, null, interpolationCurve);//用插值曲线创建B样条曲线元素
    bsplineCurve.AddToModel();//将B样条曲线的实例写入模型
}

在这里插入图片描述
第二种B样条曲线元素的创建方式是通过定义B样条控制线上的点创建MSBsplineCurve,然后使用MSBsplineCurve创建B样条曲线元素。关于创建MSBsplineCurve的方式有很多种,具体你可以在帮助文档中查看其他不同的创建方法

public static void CmdCreateBSplineCurve2(string unparsed)
{
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前的模型空间

    DPoint3d p1 = DPoint3d.Zero;//创建B样条曲线控制线
    DPoint3d p2 = new DPoint3d(10000, 10000, 0);
    DPoint3d p3 = new DPoint3d(20000, 0, 0);
    DPoint3d p4 = new DPoint3d(30000, -10000, 0);
    DPoint3d p5 = new DPoint3d(40000, 0, 0);

    DPoint3d[] pos = { p1, p2, p3, p4, p5 };//将控制点添加到控制点数组中

    MSBsplineCurve bsplineCurve = MSBsplineCurve.CreateFromPoints(pos);//使用控制点数组创建B样条曲线

    BSplineCurveElement bsplineCurveElem = new BSplineCurveElement(dgnModel, null, bsplineCurve);//用B样条曲线创建B样条曲线元素
    bsplineCurveElem.AddToModel();//将B样条曲线的实例写入模型
}

在这里插入图片描述

  • 30
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值