autolisp调用break函数出问题?
autolisp吧
全部回复
仅看楼主
level 1
创后年1Q 楼主
(defun C:gp(/)
(setq cm (getvar "cmdecho"))
(setq os (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setq ss(ssget))
(setq n 0)
(setq r(getreal"输入半径<0.75>:"))
(if(= r nil)(setq r 0.75))
(setq len(sslength ss))
(
while (<= n (- len 1))
(setq ent(ssname ss n))
(setq ent_data(entget ent))
(setq p1(cdr (assoc 10 ent_data)))
(setq p2(cdr (assoc 11 ent_data)))
(setq x1 (nth 1 (assoc 10 ent_data)))
(setq y1 (nth 2 (assoc 10 ent_data)))
(setq x2 (nth 1 (assoc 11 ent_data)))
(setq y2 (nth 2 (assoc 11 ent_data)))
(setq x0(/ (+ x1 x2) 2))
(setq y0(/ (+ y1 y2) 2))
;;(setq INT (list x0 y0))
(setq INT(osnap p1 "mid"))
(command "circle" INT r "")
(setq yp(entlast))
(setq an1(angle INT P1))
(setq an2(angle INT P2))
(setq cos1(+ (* r (cos an1)) x0))
(setq sin1(+ (* r (sin an1)) y0))
(setq cos2(+ (* r (cos an2)) x0))
(setq sin2(+ (* r (sin an2)) y0))
(setq inter1 (list cos1 sin1))
(setq inter2 (list cos2 sin2))
(setq inter11(osnap inter1 "INT"))
(setq inter22(osnap inter2 "INT"))
(command "break" ent "f" inter11 inter22 "")
(command "_insert" "溢流口" INT "" "" "")
(command "erase" yp "")
(setq n(+ 1 n))
)
(prin1)
(setvar "cmdecho" cm)
(setvar "osmode" os)
)
(command "break" ent "f" inter11 inter22 "") 这行代码执行错误,总是提示inter11点有问题,我用!inter11发现没有问题,但是在执行过程中就是通不过。
2017年07月04日 03点07分 1
level 13
你可以试一下用修剪
2017年07月05日 01点07分 3
用过了,还是说点不对,我怀疑是点精度不够,但是不知道怎么调精度。
2017年07月05日 07点07分
回复 cj1432836 :修剪用圆心就好,或者把直线复制一下,然后对两条直线的端点进行处理
2017年07月05日 07点07分
@Faith__凨 {直线复制一下,然后对两条直线的端点进行处理}什么意思?
2017年07月05日 07点07分
回复 cj1432836 :字面意思,就是在原地复制粘贴一条新的直线出来
2017年07月05日 07点07分
level 1
用法问题。
break命令如果手动选择线时,是同时选择了第一个点,所以指定第一个点,需要输入f。
而用lisp给出对象时,第二个参数ent并不包括第一个点,所以并不需要再输入f。
所以正确用法是:(command "break" ent inter11 inter22)
最后一个“”也不需要。
2017年08月16日 16点08分 4
原来是这样,十分感谢。。。。
2017年09月07日 02点09分
1