自动标注多段线-mo
我需要帮助,我有这个lisp“PDIM”,但所有尺寸都必须在轮廓内,而不是像图1那样,可以这样做吗?谢谢大家的回复。。。
lisp PDIM:http://www.sendspace.com/file/3txh6a
图1:http://www.sendspace.com/file/p3upgc
想象一下它应该是什么样子:http://www.sendspace.com/file/y9q7ra 建议您只需上传带有两张图片的lisp文件,因为大多数用户不喜欢从未知网站下载可能存在任何威胁的文件。 thx我很难把图片和LSP。。。。 我明白了,也许是因为你还没有达到十个帖子,至少能够附上任何文件。 是的,这是个问题。。。 我刚刚下载了这些文件,并将其发布给有兴趣提供帮助的用户。
图片-1
图片-2
非常感谢你的帮助 在这里,我修改了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)
(- (* (caru) (cadrv)) (* (carv) (cadru)))
)
)
(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 : "))
(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
Marko,Veeeeeliko hvala na lispu!:-) Nema na cemu drugar,hvala i tebi na lepim zeljama。。。
页:
[1]