但试一试:
(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
工作很好,李,谢谢,我本来以为这可以做到的,任何时候你偏移线,他们将圆角,直到你按下回车键(然后可以移动到一个新的部分)。但是如果这太难了,不要担心。谢谢你的帮助。我现在必须欠你两个案子。。。 这就是选择集的工作方式,很难判断哪些行需要用哪些行填充。 好的,为什么不试试Express工具中的“EXOFFSET”。
请参阅视频-尽管这些线必须是多段线才能使圆角工作。
exoffset演示。拉链 我们尽量不使用多段线。。。无论如何,这个程序做的仍然很好,谢谢你的帮助。
没问题,很乐意帮忙 李·麦克,
将原始线更改为pline,根据需要进行偏移,然后全部分解。 干杯,出租车,
当我有时间的时候,我会看看如何改变我的Lisp程序,谢谢你的提示! 好的,加扎尔普,
使用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
太棒了,李,做得很好。谢谢你和CAB
页:
1
[2]