我有一个Lisp程序的地方,你画一个矩形,这是一个RevCloud。。。
唯一的问题是,当矩形穿过一条线时,弧会表现得很疯狂。。。
有人能告诉我为什么和/或如何修复吗?
Lisp也包括在这里
- (prompt "Loading CLOUD1....")
- ;
- (defun C:Cloud1 (/ ds plw pt1 pt2 p1 p2 xdist ydist spcsx spcsy ent1 ent2
- nxt info bulge data)
- (setq #exlyr (getvar "clayer"))
- (if (null (tblsearch "layer" "RevCloud"))
- (command "-layer" "m" "RevCloud" "c" "1" "" ""))
- (command "-layer" "s" "RevCloud" "")
- (setq oldplinewid (getvar"plinewid")) ;get old Plinewidth
- setting
- (setq OldPlineType (getvar "Plinetype")) ;get old
- Plinetype setting
- (setvar "Plinetype" 0) ;set Plinetype
- to R13 setting
- (setvar "cmdecho" 0)
- (setq ds (getvar "LTSCALE")
- plw (* 0.00 ds)
- oer *error*
- bm (getvar "blipmode"))
- (defun *error* (s) ;start error routine
- (setvar "blipmode" bm) ;reset blipmode
- (princ (strcat "\Exit..." s)) ;type error message
- (if oer (setq *error* oer))
- (princ))
- (SETQ PT1 (GETPOINT "Pick lower left corner of window: ")) (terpri)
- (setq pt2 (getcorner pt1 "Pick upper right corner of window: "))
- (setvar "blipmode" 0)
- (setq p1 (car pt1) p2 (car pt2) ;find x distances
- xdist (- p2 p1))
- (setq p1 (cadr pt1) p2 (cadr pt2) ;find y distances
- ydist (- p2 p1))
- ;******TO ADJUST SPACING OF ARCS CHANGE THE NUMBER 2 IN THE NEXT TWO
- LINES*****
- (setq spcsx (/ (abs xdist) (/ ds 4)) ;X spacing
- spcsy (/ (abs ydist) (/ ds 4))) ;Y spacing
- (if (= spcsx (fix spcsx)) (setq spcsx (fix spcsx)) (setq spcsx (+ 1 (fix
- spcsx))))
- (if (= spcsx 1) (setq spcsx 2)) ;min of 2 spaces
- (if (= spcsy (fix spcsy)) (setq spcsy (fix spcsy)) (setq spcsy (+ 1 (fix
- spcsy))))
- (if (= spcsy 1) (setq spcsy 2)) ;min of 2 spaces
- (setq xdist (/ xdist spcsx) ydist (/ ydist spcsy)) ;set distances
- (setq p1 pt1) ;set polyline start point
- (command "PLINE" p1 "W" plw "") ;start polyline command
- (repeat spcsx ;draw bottom line segments
- (setq p1 (polar p1 0.0 (abs xdist)))
- (command p1))
- (repeat spcsy ;draw right line segments
- (setq p1 (polar p1 (/ pi 2) (abs ydist)))
- (command p1))
- (repeat spcsx ;draw top line segments
- (setq p1 (polar p1 pi (abs xdist)))
- (command p1))
- (repeat (- spcsy 1) ;draw left line segments
- (setq p1 (polar p1 (* pi 1.5) (abs ydist)))
- (command p1))
- (command "C") ;Close polyline
- (setq ent1 (entlast) ;get entity
- ent2 (entget ent1) ;get entity info
- ;******TO ADJUST THE ARC SIZE ADJUST THE 0.7 BELOW*******
- bulge (list (cons 42 0.5)) ;build cloud arcs
- nxt (cdr (assoc -1 ent2)) ;set for lookup
- nxt (entnext nxt) ;get next one
- plw (list (cons 41 plw))) ;build cloud width
- (while nxt ;start loop
- (setq info (entget nxt) ;get exist. info
- info (append info bulge) ;set bulge
- info (append info plw) ;set width
- ) ;end of setq
- (entmod info) ;modify entity
- (setq nxt (entnext nxt)) ;get next segment
- ) ;end of while
- (entupd ent1) ;update entity
- (setvar "blipmode" bm) ;reset blipmode
- (setvar "cmdecho" 1) ;turn command echo on
- (gc) (princ) ;print blank line
- (setvar "Plinetype" OldPlineType) ;set Plinetype
- setting back
- (setvar "Plinewid" OldPlinewid)
- (setvar "clayer" #exlyr)
- ) ;End program
errorlinecloud1。lsp |