自动lisp例程对分
大家好,我需要平分一条线,并绘制一条线垂直于中点和用户定义的长度使用自动LISP例程?非常感谢你的帮助。
谢谢
拉杰什 Rajesh,看看这一页底部的第一条“相似的线索”。有一个Lisp程序的单词叫per。lsp效果很好。 这
(defun c:Test (/ l s e 1p 2p 3p ang c g)
;; Tharwat 23.Dec.2015 ;;
(if (and (setq l (getdist "\nSpecify length of line :"))
(setq s (car (entsel "\nSelect Line :")))
(eq (cdr (assoc 0 (setq e (entget s)))) "LINE")
(setq 1p(cdr (assoc 10 e))
2p(cdr (assoc 11 e))
ang (angle 1p 2p)
c (mapcar '(lambda (q p) (/ (+ q p) 2.)) 1p 2p)
)
(princ "\nSpecify distination :")
)
(progn
(while (eq 5 (car (setq g (grread t 13 0))))
(redraw)
(grdraw c
(setq 3p
(polar c
(apply (if (> 0 (sin (- ang (angle 1p (cadr g)))))
'+
'-
)
(list ang (* pi 0.5))
)
l
)
)
-1
0
)
)
(if (member (car g) '(2 3 25))
(entmake
(list '(0 . "LINE") (cons 10 c) (cons 11 3p))
)
)
)
)
(redraw)
(princ)
)
正如BKT所建议的,请参阅此线程中的响应。 请问这对多段线有用吗?我主要使用多段线。。。 阅读李的帖子就在你的帖子上方,然后转到他指出的帖子并尝试他的第一个代码。我认为只要你的多段线只有两个顶点,它就会工作得很好。 BKT有几种方法可以拾取pline的一部分,因此在这种情况下,这将给出2分之间的答案。李?
以下是与直线和二维多段线兼容的修改版本:
(定义c:per(/ent enx par pt1 pt2 sel)(while(progn(setvar’errno)(setq sel(entsel“\n选择直线或多段线段:”))(cond((=7(getvar’errno))(princ“\n已丢失,请重试。”)((null sel)nil)((progn(setq ent(car sel)enx(entget ent))(not(wcmatch(cdr(assoc 0 enx))“LINE,LWPOLYLINE”))(princ“\n所选对象不是直线或多段线。”)((if(=“LINE”(cdr(assoc 0 enx)))(setq pt1(trans(cdr(assoc 10 enx))0 1)pt2(trans(cdr(assoc 11 enx))0 1))(setq par(fix(+1e-8(vlax curve getparamatpoint ent(vlax curve getclosestpoint to ent(trans(cadr sel)1 0 905;)Ή)pt1(vlax curve getpointatparam ent par)pt2(vlax curve getpointatparam ent(1+par))(vl cmdf“.line”“\u non”(mapcar)(lambda(a b)(/(+a b)2.0))pt1 pt2)(strcat“
页:
[1]