使用“对齐”继续标注
大家好,我需要LISP来使用对齐选项继续标注。在参考图像中,有2个选项A和B。我得到了具有连续维度的选项B,但我需要选项A。
好的
我面临同样的问题 这是你的问题,但我有其他lisp它的工作,只有在不同的角度折线。
它不适用于点对点。仅对于多段线,选择一次并一次创建所有尺寸。
(PDIM)
(定义c:pdim(/plSet pLlst vLst oldOsn cAng cDis cPt)
(原则“\n>>”)
(if(setq plSet(ssget’((0。“LWPOLYLINE”)))
(程序
(setq pLlst(vl remove if’listp
(mapcar’cadr(ssnamex plSet)))
(setvar“OSMODE”0)(setvar“CMDECHO”0)
(foreach pl pLlst
(setq vLst(mapcar’cdr
(如果没有,则删除vl
'(λ(x)(=10(车x))(entget pl)))
oldOsn(getvar“OSMODE”)
); 结束setq
(虽然(
(setq cAng(角度(car vLst)(cadr vLst))
cDis(/(距离(car vLst)(cadr vLst))2)
cPt(polar(polar(car vLst)cAng cDis)
(+苍(/pi 2))(*2(getvar“DIMTXT”))
); 结束setq
(命令“dimaligned”(car vLst)(cadr vLst)cPt)
(setq vLst(cdr vLst))
); 结束时
); 结束foreach
(setvar“OSMODE”oldOsn)(setvar“CMDECHO”1)
); 结束程序
); 如果结束
(普林斯)
); c结束:pdim 谢谢拉希德先生的建议。但我希望有一个更简单的方法。。我必须选择很多点,然后选择我想要的那一边
尺寸 这是我的PDIM版本。。。它适用于长波多段线,并可选择“内侧”-“外侧”。。。
(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
HTH,M.R。 hibba您好,
看看这是否适合你。
就像标准dimcontinue一样使用它:
;; DimAlignedContinue ;;
(defun c:DAC ( / *error* doc point1 point2 )
(defun *error* (msg)
(if (and msg
(not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
)
(princ (strcat "\nError: " msg))
)
(if doc
(vla-endundomark doc)
)
(princ)
) ;_ end of defun
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark doc)
(setq point1 (getpoint "\nSpecify first extension line origin:"))
(while
(setq point2 (getpoint "\nSpecify second extension line origin:"))
(command "_.dimaligned" point1 point2 pause)
(setq point1 point2)
) ;_ end of while
(vla-endundomark doc)
(princ)
) ;_ end of defun
(vl-load-com)
嗨,PDuMont,
在将变量point1赋给另一个值之前,无需将其设置为nil。 嗨,塔瓦,
是的,我不确定。。。
感谢您的澄清。
谢谢Marko先生这对我很有帮助。。。
非常感谢PDuMont先生,这正是我想要的。。。这对我来说很好
页:
[1]
2