调整断点
我有一个lisp来插入块,90%都很好,插入的块大小相同,其中一些块会打断插入的线太多,下面的第一个插入很好,第二个在块的边缘(一个圆)和管道(acad中只有一条规则线)之间留有间隙,我连接了块,我知道这与第1和第2部分有关,但我不知道如何将它们改变到正确的点。(defun c:gv (/ *error* scl dis ov vl
lne pnt ang pt1 pt2)
;; Always localise your variables!
(or (not (zerop (setq scl (getvar "DIMSCALE"))))
(setq scl 1.))
;; Dimscale may be zero - need to check for this
(setq dis (* scl 0.0703))
;; Use an Error Handler as we are tampering with Sys Vars
(defun *error* (msg)
(if ov (mapcar 'setvar vl ov)) ; Reset Sys Vars
(if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
(princ (strcat "\n<< Error: " msg " >>")))
(princ))
(setq vl '("CMDECHO" "OSMODE" "CLAYER") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old Sys Var Values
(if (or (tblsearch "BLOCK" "gv") ; Check for Block in Dwg...
(findfile "gv.dwg")) ;... And in Search path
(progn
(while ; While the following returns T
(progn ; Wrap the following expressions
(setq lne (entsel "\nSelect a Line: ")) ; Select a Line
(cond ((null lne) t) ; Stay in Loop
((eq "LINE"
(cdr (assoc 0 (setq elst (entget (car lne)))))) nil) ; Exit Loop
(t (princ "\n** Incorrect Selection **"))))) ; Stay in Loop
(if (setq pt (getpoint "\nPick Insertion Point: ")) ; Prompt for Point
(progn
(setq ang (angle (cdr (assoc 10 elst)) (cdr (assoc 11 elst)))) ; Get Line Angle
(mapcar 'setvar vl (list 0 0 (cdr (assoc 8 (entget (car lne))))))
; Set Sys Vars to how we want them - CMDECHO=0, OSMODE=0, CLAYER= <line layer>
(command "-insert" "gv" pt scl scl (* 180. (/ ang pi))) ; insert Block
;; Prefix commands with "_." to make them language compatible
(setq pt1 (polar pt ang dis)
pt2 (polar pt (- ang pi) dis))
(command "_.break" lne "_F" pt1 pt2))))
(princ "\n<< Block Not Found >>")) ; Else the Block was not found
(mapcar 'setvar vl ov) ; Reset Sys Vars
(princ)) ; Exit Cleanly
(defun c:priser (/ *error* scl dis ov vl
lne pnt ang pt1 pt2)
;; Always localise your variables!
(or (not (zerop (setq scl (getvar "DIMSCALE"))))
(setq scl 1.))
;; Dimscale may be zero - need to check for this
(setq dis (* scl 0.0703))
;; Use an Error Handler as we are tampering with Sys Vars
(defun *error* (msg)
(if ov (mapcar 'setvar vl ov)) ; Reset Sys Vars
(if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
(princ (strcat "\n<< Error: " msg " >>")))
(princ))
(setq vl '("CMDECHO" "OSMODE" "CLAYER") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old Sys Var Values
(if (or (tblsearch "BLOCK" "priser") ; Check for Block in Dwg...
(findfile "priser.dwg")) ;... And in Search path
(progn
(while ; While the following returns T
(progn ; Wrap the following expressions
(setq lne (entsel "\nSelect a Line: ")) ; Select a Line
(cond ((null lne) t) ; Stay in Loop
((eq "LINE"
(cdr (assoc 0 (setq elst (entget (car lne)))))) nil) ; Exit Loop
(t (princ "\n** Incorrect Selection **"))))) ; Stay in Loop
(if (setq pt (getpoint "\nPick Insertion Point: ")) ; Prompt for Point
(progn
(setq ang (angle (cdr (assoc 10 elst)) (cdr (assoc 11 elst)))) ; Get Line Angle
(mapcar 'setvar vl (list 0 0 (cdr (assoc 8 (entget (car lne))))))
; Set Sys Vars to how we want them - CMDECHO=0, OSMODE=0, CLAYER= <line layer>
(command "-insert" "priser" pt scl scl (* 180. (/ ang pi))) ; insert Block
;; Prefix commands with "_." to make them language compatible
(setq pt1 (polar pt ang dis)
pt2 (polar pt (- ang pi) dis))
(command "_.break" lne "_F" pt1 pt2))))
(princ "\n<< Block Not Found >>")) ; Else the Block was not found
(mapcar 'setvar vl ov) ; Reset Sys Vars
(princ)) ; Exit Cleanly
GV。图纸
普里泽。图纸 下图显示了GV(线上的第一个块),线在GV的边缘线处断开,然后显示圆棱镜和不与圆边缘相交的线。我希望他们能像对待GV一样面对边缘
“priser”块小于GV。
在以下行中:
(setq dis(*scl 0.0703)
将其更改为:
(setq dis(*scl 0.0469)
因为这是棱镜半径的值 很抱歉,很长一个周末没有回复。这很好用。。。谢谢
页:
[1]