我是一只一条曲线,然后自己做一条直线求交点,在程序中 (setq sel_dd (entsel "\n 选择对象:")) 就是选择 ...
(defun c:cs (/ OBJ1 OBJ2 PT1 PT6)
(setq obj1 (vlax-ename->vla-object (car (entsel "\n 选择对象:"))))
(setq pt1 (getpoint "\n 请选择一个点:"))
(setq pt6 (getpoint "\n 请选择一个点:"))
(command "line" pt6 pt1 "")
(setq obj2 (vlax-ename->vla-object (entlast)))
(vlax-safearray->list
(vlax-variant-value
(vla-IntersectWith obj1 obj2 acExtendNoNe)
)
)
) 自贡黄明儒 发表于 2013-10-11 16:02 static/image/common/back.gif
(defun c:cs (/ OBJ1 OBJ2 PT1 PT6)
(setq obj1 (vlax-ename->vla-object (car (entsel "\n 选择对象: ...
运行的结果:
命令: test
选择实体:para=1000.0,dist=1000.000000,pa=(26753.46,18658.66),pb=(45232.23,32576
.32)
dist1=0.00,dist2=23133.66,startparam=0.00,endparam=23133.66
输入点:p1=(43309.84,20504.20),dist1=14335.27,param1=14335.27
p2=(38204.23,27283.04),dist2=14335.27,param2=14335.27
p3=(38204.23,27283.04),dist3=14335.27,param3=14335.27
输入点:*取消*
不知道为啥,希望您继续指点 自贡黄明儒 发表于 2013-10-11 16:02 static/image/common/back.gif
(defun c:cs (/ OBJ1 OBJ2 PT1 PT6)
(setq obj1 (vlax-ename->vla-object (car (entsel "\n 选择对象: ...
今天经过测试,是能用的,谢谢大师指点,万分感谢 本帖最后由 llsheng_73 于 2013-10-18 17:52 编辑
dcg553496180 发表于 2013-10-11 15:25 static/image/common/back.gif
(defun c:cs ()
(setq sel_dd (entsel "\n 选择对象:"))
(setq pt1 (getpoint "\n 请选择一个点 ...
(defun c:cs ()
(setq sel_dd (entsel "\n 选择对象:")) ;;;通过ENTSEL得到的sel_dd它是一个表图元名和坐标组成的表,要先通过(CAR sel_dd)得到图元名
(setq pt1 (getpoint "\n 请选择一个点:"))
(setq pt6 (getpoint "\n 请选择一个点:"))
(command "line" pt6 pt1 "")
(setq sel_l (entlast));;;通过ENTlast得到的sel_l它不是前边SEL_DD那样的表,直接就是图元名
(setq pt_int (jd sel_dd sel_l))
! pt_int
)
你的两个参数是完全不一样的,但你在过程中都进行了(CAR....)处理,导致第二个参数行不通,解决办法是过程中不作(CAR ...)处理,在主程序中把它们按需要处理好 (setq pt_int (jd sel_dd sel_l))可以改为 (setq pt_int (jd (car sel_dd) sel_l))
把过JD里边的 (setq a (car se_1))(setq b (car se_2))两句去掉,这样就OK了
(defun jd (se_1 se_2)
(vl-load-com)
(setq a (car se_1))
(setq b (car se_2));;;把参数定义为图元名后,这两句不要
(setq pts (vla-IntersectWith (vlax-ename->vla-object a) (vlax-ename->vla-object b) 3))
)
另外,类似于 (vl-load-com)等不宜在过程中出现,你可以在主程序中一开始就写上它,至于所有别的过程中就都不要它了,以免没必要的重复运行
建议尽量不要用COMMAND去画东西,尽量用ENTMAKE去画,用ENTMOD去改,这样有助于对CAD图元数据结构加深理解,当然最后也可以用VLA去做,不过我个人认为那比理解图元数据更头痛,但掌握好了的话好处很明显的。至少写程序的过程会快很多,以上仅仅是我的个人意见
自贡黄明儒 发表于 2013-10-11 16:02 static/image/common/back.gif
(defun c:cs (/ OBJ1 OBJ2 PT1 PT6)
(setq obj1 (vlax-ename->vla-object (car (entsel "\n 选择对象: ...
这个好!赞一个!!! llsheng_73 发表于 2013-10-18 17:35 static/image/common/back.gif
(defun c:cs ()
(setq sel_dd (entsel "\n 选择对象:")) ;;;通过ENTSEL得到的sel_dd它是一个表图元 ...
之前问题解决掉以后今天才看见这个回复,十分感谢您的解答,在此感谢 错误: ActiveX 服务器返回错误: 无效索引。
cs我试了不行,为什么? mark一下 回头慢慢研究 自贡黄明儒 发表于 2013-10-11 16:02
(defun c:cs (/ OBJ1 OBJ2 PT1 PT6)
(setq obj1 (vlax-ename->vla-object (car (entsel "\n 选择对象: ...
这个确实不错,但是如果有两个交点的话他返回的是一个表,不知道能不能让他返回成一个点表
页:
1
[2]