好的,我有一个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
|