当前位置:知识库 / C#开发 / 详情
如何打断曲线?
如何打断曲线?
C#开发|黄洪辉|2018-06-14 11:02
回答:

主要用到函数说明:


IMxDrawCurve::SplitCurves


打断曲线,详细说明如下:


参数说明

[in] IMxDrawResbuf* aryParam

打断位置参数数组,或打断的点数组,是个MxDrawResbuf对象

[out] IMxDrawResbuf** aryNewId

返回打断后生成的新曲线id,是个MxDrawResbuf对象


c#代码实现如下:


    private void DoSplitCurves()
    {
        MxDrawUtility mxUtility = new MxDrawUtility();
        object getPt;
        MxDrawEntity ent = mxUtility.GetEntity(out getPt, "选择打断的曲线:");        
        if (ent == null)            
        return;

        MxDrawCurve curve;        
        if (ent is MxDrawCurve)
        {
            curve = (MxDrawCurve)ent;
        }        
        else
        {
            MessageBox.Show("实体类型不对");            
            return;
        }

        MxDrawPoint getPt1 = (MxDrawPoint)(mxUtility.GetPoint(null, "点取打断位置:"));        
        if (getPt1 == null)
        {
            MessageBox.Show("用户取消..");            
            return;
        }
        MxDrawResbuf param = new MxDrawResbuf();
        param.AddPoint(getPt1, -10);

        object objId;        
        if (curve.SplitCurves(param,out objId))
        {
            MxDrawResbuf rbId = (MxDrawResbuf)objId;
            MessageBox.Show("打断成功,生成的曲线个数:" + rbId.Count);            
            // 把以前的删除掉。
            ent.Erase();
        }        
        else
        {
            MessageBox.Show("打断失败");
        }
    }


选择曲线,把曲线从中间1/4 到 3/ 4处断开:


           MxDrawUtility mxUtility = new MxDrawUtility();
         object getPt;
         MxDrawEntity ent = mxUtility.GetEntity(out getPt, "选择打断的曲线:");         
         if (ent == null)             
             return;

         MxDrawCurve curve;         
         if (ent is MxDrawCurve)
         {
             curve = (MxDrawCurve)ent;
         }         
         else
         {
             MessageBox.Show("实体类型不对");             
             return;
         }         
         double dLen = 0.0;
         curve.GetDistAtParam(curve.GetEndParam(),out dLen);

         object pt1;         
         if (!curve.GetPointAtDist(dLen / 4.0, out pt1))             
         return;


         object pt2;         
         if (!curve.GetPointAtDist(dLen * 3.0 / 4.0, out pt2))             
         return;

         MxDrawPoint breakPt1 = (MxDrawPoint)pt1;
         MxDrawPoint breakPt2 = (MxDrawPoint)pt2;         
         if (breakPt1 == null || breakPt2 == null)             
         return;

         MxDrawResbuf param = new MxDrawResbuf();
         param.AddPoint(breakPt1, -10);
         param.AddPoint(breakPt2, -10);

         object objIds;         
         if (curve.SplitCurves(param, out objIds))
         {
             MxDrawResbuf rbId = (MxDrawResbuf)objIds;             
             if(rbId.Count == 3)
             {
                 axMxDrawX1.Erase(rbId.AtLong(1));
             }             
             // 把以前的删除掉。
             ent.Erase();
         }
相关问题
如何从线型文件加载线型记录?
当前选择实体发生变化调用事件。
如何绘制一个图象标记对象?
如何绘制一个对齐标注?
如何从二制流数据中加载图形?
如何保存DWG文件,可以设置保存的文件版本号和
如何向控件注册一个命令?
如何绘一个文字自动剧中的标注 ?
在c#中如何创建组?
如何绘制多行文字?
梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
联系我们
TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
VIP服务购买
销售TEL:156-8136-8971
销售QQ:710714273
用户交流
控件QQ交流群1:73281982
控件QQ交流群2:112199959
MxCAD软件群 1:515771658
技术I:QQ
827867134
客服I:QQ
3570505660
销售QQ
710714273
联系电话400-888-5703