明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2488|回复: 12

请明经CAD高手帮忙!!!

  [复制链接]
发表于 2005-3-26 09:04:00 | 显示全部楼层 |阅读模式
点P1,P2是直线AB上的两点,怎么样通过程序将AP1,P2B段删除,而只留下P1,P2段


(注:直线AB原来是整体,CAD 中通过BREAK命令只能将P1,P2段删除,我现在恰好相反,请帮忙!!!)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2005-3-26 09:22:00 | 显示全部楼层
本帖最后由 作者 于 2005-3-26 12:31:08 编辑

试试这个,(说明一点,当p2点在界外,也同样有效) (defun c:tl ()
(setq os (getvar "osmode"))
(setvar "cmdecho" 0)
(if (= (setq ort (getvar "ORTHOMODE")) 0)
(setvar "ORTHOMODE" 1)
)
(setq a (entsel "\n 请选择要保留对象:"))
(if (/= a nil)
(progn
(setq t1 (car a))
(setq ent (entget t1))
(setq ls (cdr (assoc 10 ent)))
(setq le (cdr (assoc 11 ent)))
(setq ang (angle ls le))
(redraw t1 3)
(setq obj (vlax-ename->vla-object t1))
(setq lay (vla-get-layer obj))
(setq p3 (cadr a))
(setq p3 (osnap p3 "nea"))
(setvar "snapang" ang)
;;因为p3点不一定在直线上,所以加"nea"之后才会取到真正的p3点;
(initget "f F")
(setq p4 (getpoint p3 "\n请指定保留部份的第二点或 [第一点(F)]:"))
(if (or (= p4 "f")(= p4 "F"))
(progn
(setq p3 (getpoint "\n重新选择保留部份的起点:"))
(setq p4 (getpoint p3 "\n请选择要保留部份的终点:"))
)
)
(setq p5 p4
d1 (distance ls p4)
d2 (distance le p4)
d3 (distance ls le)
)
(if (equal (+ d1 d2) d3 0.0001)
(setq p4 (osnap p4 "nea"))
(setq p4 p5)
)
(setvar "osmode" 0)
(command "undo" "g")
(command "erase" t1 "")
(command "line" p3 p4 "")
(setq obj1 (vlax-ename->vla-object (entlast)))
(vla-put-layer obj1 lay)
(command "undo" "e")
(setvar "osmode" os)
(setvar "snapang" 0)
(setvar "cmdecho" 1) )
(prompt "\n没有选到直线,请重新选择.......")
)
(princ)
)
 楼主| 发表于 2005-3-26 10:49:00 | 显示全部楼层
P1,P2点要是可以采用捕捉的方式就好了
发表于 2005-3-26 11:00:00 | 显示全部楼层
(defun c:test( / pt1 pt2 ent)
(setq pt1 (getpoint "选择P1:"))
(setq pt2 (getpoint "选择P2:"))
(setq ent (ssname (ssget pt1) 0))
(command "_.line" pt1 pt2 "")
(command "_.matchprop" ent (entlast) "")
(entdel ent)
(princ)
)
发表于 2005-3-26 12:16:00 | 显示全部楼层
本帖最后由 作者 于 2005-3-26 12:37:28 编辑

飞哥的程序有bug,当直线AB是竖直时,就会出错,我想问题出在这句上:



(setq ent (ssname (ssget pt1) 0))


回3楼的问题,2楼的程序已更新,可以实现指定点保留,用法同break的“F”功能,程序写得太罗嗦,可以再简短些。
发表于 2005-3-26 12:43:00 | 显示全部楼层
没有问题啊,只要开通捕捉(也是楼主要求的),选择的点在直线上,不会出现问题。。。
发表于 2005-3-26 13:15:00 | 显示全部楼层
meflying发表于2005-3-26 12:43:00没有问题啊,只要开通捕捉(也是楼主要求的),选择的点在直线上,不会出现问题。。。

看看这个,如果还是测试没问题,可能是我的电脑有问题了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2005-3-26 13:53:00 | 显示全部楼层
估计楼主不是这种情况,否则,无论怎样,通过第一点选择对象时选择的就不是自己需要的对象,这样的情况下,根本无法判断楼主需要选择哪条直线,只有另外增加一条选择对象的代码,我只是觉得怎样增加了操作,不需要,所以直接选择了,按楼上的图,完全可以使用TRIM来解决。。。


测试了你的程序,结果一样,而且点没有捕捉功能。。。





好不好用,需要怎么操作过程,还是让楼主来说吧。。
发表于 2005-3-26 14:29:00 | 显示全部楼层
meflying发表于2005-3-26 13:53:00估计楼主不是这种情况,否则,无论怎样,通过第一点选择对象时选择的就不是自己需要的对象,这样的情况下,根本无法判断楼主需要选择哪条直线,只有另外增加一条...

说得有道理,我认为如果指定捕捉P1和P2点,那肯定这两点是交点之类,必有两条边界线,这样还真不如直接用trim命令来得方便,何必多些一举呢!如果说程序要有真正意义,就该是随意点取两点,而不是捕捉已知两点。 另外说明一点,飞哥说测试我的程序,结果一样,不知道结果是怎么样子,问题出在哪儿。提到“点没有捕捉功能。。。”,我也加了,点选第一点之后,再按“F”,进入重新选取第一点,思路与“Break”一样。只是我觉得这个“F”是多此一举,我还是着重这个程序的随意性操作。
发表于 2005-3-26 19:10:00 | 显示全部楼层
直接修改AB的两个端点为P1P2不就行了,搞那么复杂为什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 06:27 , Processed in 0.207352 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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