rvalusa22 发表于 2022-7-5 17:04:38

自动lisp例程对分

大家好,
 
我需要平分一条线,并绘制一条线垂直于中点和用户定义的长度使用自动LISP例程?非常感谢你的帮助。
 
谢谢
拉杰什

BKT 发表于 2022-7-5 17:14:55

Rajesh,看看这一页底部的第一条“相似的线索”。有一个Lisp程序的单词叫per。lsp效果很好。

Tharwat 发表于 2022-7-5 17:26:49


 

(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)
)

Lee Mac 发表于 2022-7-5 17:32:59

正如BKT所建议的,请参阅此线程中的响应。

qhabz 发表于 2022-7-5 17:40:25

请问这对多段线有用吗?我主要使用多段线。。。

BKT 发表于 2022-7-5 17:49:42

阅读李的帖子就在你的帖子上方,然后转到他指出的帖子并尝试他的第一个代码。我认为只要你的多段线只有两个顶点,它就会工作得很好。

BIGAL 发表于 2022-7-5 18:04:16

BKT有几种方法可以拾取pline的一部分,因此在这种情况下,这将给出2分之间的答案。李?

Lee Mac 发表于 2022-7-5 18:11:03

 
 
以下是与直线和二维多段线兼容的修改版本:
(定义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]
查看完整版本: 自动lisp例程对分