Lee Mac 发表于 2022-7-6 15:48:45

好的,我有一个LISP,它会自动为你偏移所有的线,但我无法解决如何圆角所有的偏移线-如何告诉ACAD哪些线是用哪个线圆角的,以及如何存储所有新创建的线。
 
但试一试:
 

(defun c:membrane (/ *error* varLst oldVars ss ssl index lins pt ent1 ent l1 l2)

;   --- Error Trap ---

   (defun *error* (msg)
   (mapcar 'setvar varLst oldVars)
   (if (= msg "")
       (princ "\nFunction Complete.")
       (princ "\nError or Esc pressed... ")
   ) ;_end if
   (princ)
   ) ; end of *error*

   (setq varLst(list "CMDECHO" "CLAYER" "FILLETRAD")
   oldVars (mapcar 'getvar varLst)
   ) ; end setq

;    --- Error Trap ---

   (setvar "cmdecho" 0)
   (makelay "Membrane")
   (setq ss    (ssget)
   ssl    (sslength ss)
   index    0
   lins    0
   ) ;_end setq
   (if
   (setq pt (getpoint "\nSelect Point on Side of Lines to Offset: "))
      (progn
          (repeat ssl
          (setq ent (ssname ss index))
          (setq ent1 (entget ent))
          (if (= "LINE" (cdr (assoc 0 ent1)))
            (progn
            (command "_offset" "5.0" ent pt "")
            (setq l1 (entlast))
            (command "_chprop" l1 "" "la" "Membrane" "c" "cyan" "lt" "awthidden2" "")
            (command "_offset" "5.0" l1 pt "")
            (setq l2 (entlast))
            (command "_chprop" l2 "" "la" "Membrane" "c" "red" "lt" "continuous" "")
            (setq lins (1+ lins))
            ) ;_end progn
          ) ;_end if
          (setq index (1+ index))
          ) ;_end repeat
      ) ;_end progn
      (alert "Please Select a Point.")
   ) ;_end if
   (if    (= 1 lins)
   (princ (strcat "\n" (itoa lins) " Line Offset."))
   (princ (strcat "\n" (itoa lins) " Lines Offset."))
   ) ;_end if
   (*error* "")
   (princ)
) ;_end defun

;;; I gave up at this point...

;;;      (setvar "filletrad" 0)
;;;      (setq ang1 (angget l1))
;;;      (setq ang2 (angget l2))
;;;      (setq mid1 (polar (cdr (assoc 10 l1)) ang1 (/ (len l1) 2)))
;;;      (setq mid2 (polar (cdr (assoc 10 l2)) ang2 (/ (len l2) 2)))
;;;      (command "_fillet"


(defun makelay (lay)
   (if    (not (tblsearch "Layer" lay))
   (command "-layer" "m" lay "")
   ) ;_end if
) ;_end defun
(defun angget (lin)
   (angle (cdr (assoc 10 lin)) (cdr (assoc 11 lin)))
) ;_end defun
(defun len (a)
   (distance (cdr (assoc 10 a)) (cdr (assoc 11 a)))
) ;_end defun

gazzalp 发表于 2022-7-6 15:53:18

工作很好,李,谢谢,我本来以为这可以做到的,任何时候你偏移线,他们将圆角,直到你按下回车键(然后可以移动到一个新的部分)。但是如果这太难了,不要担心。谢谢你的帮助。我现在必须欠你两个案子。。。

Lee Mac 发表于 2022-7-6 15:54:23

这就是选择集的工作方式,很难判断哪些行需要用哪些行填充。

Lee Mac 发表于 2022-7-6 15:58:37

好的,为什么不试试Express工具中的“EXOFFSET”。
 
请参阅视频-尽管这些线必须是多段线才能使圆角工作。
exoffset演示。拉链

gazzalp 发表于 2022-7-6 16:02:53

我们尽量不使用多段线。。。无论如何,这个程序做的仍然很好,谢谢你的帮助。

Lee Mac 发表于 2022-7-6 16:04:35

 
没问题,很乐意帮忙

CAB 发表于 2022-7-6 16:09:29

李·麦克,
将原始线更改为pline,根据需要进行偏移,然后全部分解。

Lee Mac 发表于 2022-7-6 16:10:04

干杯,出租车,
当我有时间的时候,我会看看如何改变我的Lisp程序,谢谢你的提示!

Lee Mac 发表于 2022-7-6 16:15:02

好的,加扎尔普,
 
使用CAB善意推荐的提示,我得出了以下结论:
 

(defun c:membrane (/ *error* varLst oldVars ss ssl l1 pt l2 l3)

;   --- Error Trap ---

   (defun *error* (msg)
   (mapcar 'setvar varLst oldVars)
   (command "_explode" l1)
   (if (= msg "")
       (princ "\nFunction Complete.")
       (princ "\nError or Esc pressed... ")
   ) ;_end if
   (princ)
   ) ; end of *error*

   (setq varLst(list "CMDECHO" "CLAYER")
   oldVars (mapcar 'getvar varLst)
   ) ; end setq

;    --- Error Trap ---

   (setvar "cmdecho" 0)
   (makelay "Membrane")
   (setq ss(ssget)
   ssl (sslength ss)
   ) ;_end setq
   (if    (= ssl 1)
   (command "_pedit" ss "Y" "")
   (command "_pedit" "M" ss "" "Y" "J" "" "")
   ) ;_end if
   (setq l1 (entlast))
   (if
   (setq pt (getpoint "\nSelect Point on Side of Lines to Offset: "))
      (progn
          (command "_offset" "5.0" l1 pt "")
          (setq l2 (entlast))
          (command "_chprop" l2 "" "la" "Membrane" "c" "cyan" "lt" "awthidden2" "")
          (command "_offset" "5.0" l2 pt "")
          (setq l3 (entlast))
          (command "_chprop" l3 "" "la" "Membrane" "c" "red" "lt" "continuous" "")
      ) ;_end progn
      (alert "Please Select a Point.")
   ) ;_end if
   (command "_explode" l1)
   (command "_explode" l2)
   (command "_explode" l3)
   (princ)
) ;_end defun

(defun makelay (lay)
   (if    (not (tblsearch "Layer" lay))
   (command "-layer" "m" lay "")
   ) ;_end if
) ;_end defun

gazzalp 发表于 2022-7-6 16:16:10

太棒了,李,做得很好。谢谢你和CAB
页: 1 [2]
查看完整版本: 偏移线X 2和更改铺层