在等待妻子完成T台项目的时候,我决定玩一玩。我将材质提示嵌入到选择中(还提供了在任何时间点更改材质的选项)。
该功能应该非常接近地镜像Offset命令。
- (defun c:OffM (/ *error* _layer _sel cmd ent pnt eLast entity)
- ;; Alan J. Thompson, 10.14.10
- (defun *error* (msg)
- (redraw)
- (and cmd (setvar 'cmdecho cmd))
- (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
- (princ (strcat "\nError: " msg))
- )
- )
- (defun _layer (name color)
- (or (tblsearch "LAYER" name)
- (entmake (list '(0 . "LAYER")
- '(100 . "AcDbSymbolTableRecord")
- '(100 . "AcDbLayerTableRecord")
- (cons 2 name)
- '(70 . 0)
- (cons 62 color)
- )
- )
- )
- )
- (defun _sel (/ e g)
- (setvar 'errno 0)
- (while (and (not g) (/= 52 (getvar 'errno)))
- (initget 0 "Brick Gypsum Stud stUcco")
- (setq e (entsel (strcat "\nSelect object to offset as material [brick/Gypsum/Stud/stUcco] <"
- (cond (*OffM:Mat*)
- ((setq *OffM:Mat* "Brick"))
- )
- ">: "
- )
- )
- )
- (cond ((and (listp e) (eq (type (car e)) 'ENAME))
- (setq g
- (cond
- ((eq
- 4
- (logand
- 4
- (cdr (assoc 70 (entget (tblobjname "LAYER" (cdr (assoc 8 (entget (car e))))))))
- )
- )
- (prompt "\nThe object is on a locked layer.")
- )
- ((not (member (cdr (assoc 0 (entget (car e))))
- '("ARC" "CIRCLE" "ELLIPSE" "LINE" "LWPOLYLINE" "SPLINE" "XLINE")
- )
- )
- (prompt "\nCannot offset that object.")
- )
- ((car e))
- )
- )
- )
- ((eq (type e) 'STR) (setq *OffM:Mat* e))
- ((setq g (eq 52 (getvar 'errno))) nil)
- ((eq 7 (getvar 'errno)) (setq g (prompt "\nMissed, try again.")))
- )
- )
- )
- (setq cmd (getvar 'cmdecho))
- (setvar 'cmdecho 0)
- (while (and (setq ent (_sel))
- (not (redraw ent 3))
- (setq pnt (getpoint "\nSpecify point on side to offset: "))
- )
- (redraw)
- (setq eLast (entlast))
- (command "_.offset"
- (cond ((eq *OffM:Mat* "Brick") (_layer (strcase *OffM:Mat*) 1) 2.5)
- ((eq *OffM:Mat* "Gypsum") (_layer (strcase *OffM:Mat*) 4) 0.625)
- ((eq *OffM:Mat* "Stud") (_layer (strcase *OffM:Mat*) 2) 3.5)
- ((eq *OffM:Mat* "stUcco") (_layer (strcase *OffM:Mat*) 3) 1.)
- )
- ent
- "_non"
- pnt
- ""
- )
- (or
- (equal eLast (cdr (assoc -1 (setq entity (entget (entlast))))))
- (entmod (subst (cons 8 *OffM:Mat*) (assoc 8 entity) entity))
- )
- )
- (*error* nil)
- (princ)
- )
|