在这里,我修改了pdim。lsp为您提供。。。HTH,M.R。
- (defun c:pdim ( / ListClockwise-p ch plSet pLlst vLst oldOsn cAng cDis cPt )
- (defun ListClockwise-p ( lst / z vlst )
- (vl-catch-all-apply 'minusp
- (list
- (if
- (not
- (equal 0.0
- (setq z
- (apply '+
- (mapcar
- (function
- (lambda (u v)
- (- (* (car u) (cadr v)) (* (car v) (cadr u)))
- )
- )
- (setq vlst
- (mapcar
- (function
- (lambda (a b) (mapcar '- b a))
- )
- (mapcar (function (lambda (x) (car lst))) lst)
- (cdr (reverse (cons (car lst) (reverse lst))))
- )
- )
- (cdr (reverse (cons (car vlst) (reverse vlst))))
- )
- )
- ) 1e-6
- )
- )
- z
- (progn
- (prompt "\n\nChecked vectors are colinear - unable to determine clockwise-p of list")
- nil
- )
- )
- )
- )
- )
- (initget 1 "Outside Inside")
- (setq ch (getkword "\nChoose on which side to put dimensions [Outside/Inside] : "))
- (princ "\n<<< Select LwPolyline(s) for dimensioning >>> ")
- (if (setq plSet (ssget '((0 . "LWPOLYLINE"))))
- (progn
- (setq pLlst (vl-remove-if 'listp
- (mapcar 'cadr(ssnamex plSet)))
- oldOsn (getvar "OSMODE")
- ); end setq
- (setvar "OSMODE" 0) (setvar "CMDECHO" 0)
- (command "_.undo" "_be")
- (foreach pl pLlst
- (setq vLst (mapcar '(lambda( x ) (trans x 0 1))
- (mapcar 'cdr (vl-remove-if-not '(lambda( x ) (= 10 (car x)))
- (entget pl)
- )
- )
- )
- ); end setq
- (if (equal (logand (cdr (assoc 70 (entget pl))) 1) 1)
- (setq vLst (append vLst (list (car vLst))))
- ); end if
- (if (not (ListClockwise-p vLst)) (setq vLst (reverse vLst)))
- (while (< 1 (length vLst))
- (setq cAng (angle (car vLst) (cadr vLst))
- cDis (/ (distance (car vLst) (cadr vLst)) 2.0)
- )
- ; (if (>= (caar vLst) (caadr vLst))
- ; (setq cAng (- cAng pi))
- ; ); end if
- (if (eq ch "Inside")
- (setq cPt (polar (polar (car vLst) cAng cDis) (- cAng (* 0.5 pi)) (* 2.5 (getvar "DIMTXT")))); end setq
- (setq cPt (polar (polar (car vLst) cAng cDis) (+ cAng (* 0.5 pi)) (* 2.5 (getvar "DIMTXT")))); end setq
- ); end if
- (command "_.dimaligned" (car vLst) (cadr vLst) cPt)
- (setq vLst (cdr vLst))
- ); end while
- ); end foreach
- (command "_.undo" "_e")
- (setvar "OSMODE" oldOsn) (setvar "CMDECHO" 1)
- ); end progn
- ); end if
- (princ)
- ); end of c:pdim
|