明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2165|回复: 11

请问用鼠标点击一条直线如何以鼠标点击坐标将这条线断成2条直线

  [复制链接]
发表于 2011-4-20 19:34:29 | 显示全部楼层 |阅读模式
请问用鼠标点击一条直线如何以鼠标点击坐标将这条线断成2条直线。其中一条线的起始坐标为原来直线的起始坐标,结束坐标为鼠标点击坐标,另一条线的起始坐标为鼠标点击坐标结束坐标为原来直线的结束坐标。
 楼主| 发表于 2011-4-21 08:07:05 | 显示全部楼层
第一次搞AutoCAD二次开发,哪为高手教下小弟啊
发表于 2011-4-21 11:56:42 | 显示全部楼层
    [CommandMethod("t1")]
        public void test1()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            PromptEntityOptions selectPrompt = new PromptEntityOptions("");            
            PromptEntityResult selectResult = ed.GetEntity(selectPrompt);
            if (selectResult.Status != PromptStatus.OK)
                return;
            Transaction tr=HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction();
            Line lineObject = tr.GetObject(selectResult.ObjectId, OpenMode.ForWrite) as Line;
            Point3d pt = selectResult.PickedPoint;
            pt = lineObject.GetClosestPointTo(pt, false);
            Point3dCollection breakPoints=new Point3dCollection();
            breakPoints.Add(pt);
            DBObjectCollection resultObjects=lineObject.GetSplitCurves(breakPoints);
            BlockTableRecord btr = tr.GetObject(HostApplicationServices.WorkingDatabase.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
            foreach (DBObject obj in resultObjects)
            {
                btr.AppendEntity((Entity)obj);
                tr.AddNewlyCreatedDBObject(obj, true);
            }
            lineObject.Erase();
            tr.Commit();
            tr.Dispose();
        }

        [CommandMethod("t2")]
        public void test2()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            PromptPointOptions pointPrompt = new PromptPointOptions("");            
            PromptPointResult pointResult = ed.GetPoint(pointPrompt);
            if (pointResult.Status != PromptStatus.OK)
                return;
            Point3d pt = pointResult.Value;
            PromptSelectionResult lineResult= ed.SelectCrossingWindow(pt, pt);
            if (lineResult.Status != PromptStatus.OK)
                return;
            ObjectId lineId = lineResult.Value.GetObjectIds()[0];
            Transaction tr = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction();
            Line lineObject = tr.GetObject(lineId, OpenMode.ForWrite) as Line;
            Point3dCollection breakPoints = new Point3dCollection();
            breakPoints.Add(pt);
            DBObjectCollection resultObjects = lineObject.GetSplitCurves(breakPoints);
            BlockTableRecord btr = tr.GetObject(HostApplicationServices.WorkingDatabase.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
            foreach (DBObject obj in resultObjects)
            {
                btr.AppendEntity((Entity)obj);
                tr.AddNewlyCreatedDBObject(obj, true);
            }
            lineObject.Erase();
            tr.Commit();
            tr.Dispose();
        }
 楼主| 发表于 2011-4-22 14:41:21 | 显示全部楼层
回复 sailorcwx 的帖子

大哥,你给我的代码怎么用啊,怎么我调试到
Line lineObject = tr.GetObject(selectResult.ObjectId, OpenMode.ForWrite) as Line;
就报错弹出了啊
发表于 2011-4-22 16:19:25 | 显示全部楼层
仅支持直线,其余线及优化处理你自己来做。在autocad2011+vs2010上测试通过
 楼主| 发表于 2011-4-22 16:59:36 | 显示全部楼层
回复 sailorcwx 的帖子

程序中是用Polyline画的线,也是一样用么
 楼主| 发表于 2011-4-22 17:13:17 | 显示全部楼层
回复 sailorcwx 的帖子

Polyline lineObject = tr.GetObject(selectResult.ObjectId, OpenMode.ForWrite) as Polyline;
还是直接退出了,请问是怎么回事
发表于 2011-4-22 22:56:37 | 显示全部楼层
本帖最后由 chmenf087 于 2011-4-22 23:12 编辑

算了吧,这个用lisp比.net简单好多哦
(defun c:spL (/ e entt pt1 pnt vent closePnt)
  (vl-load-com)
  (setq omd (getvar "osmode") entt (entsel "\nPlease pick:"))
  (setq e (car entt) vent (vlax-ename->vla-object e) pt1 (cadr entt) closePnt (vlax-curve-getclosestpointto vent pt1))
  (vl-cmdf "Break" entt "F" closepnt closepnt)
  (setvar "osmode" omd)
)
发表于 2011-4-22 23:02:02 | 显示全部楼层
回复 sclkkk 的帖子

不过不支持圆和椭圆
 楼主| 发表于 2011-4-25 07:58:00 | 显示全部楼层
回复 chmenf087 的帖子

没办法啊,老板就要用.NET
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 22:34 , Processed in 0.156404 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表