hibba 发表于 2022-7-5 18:16:00

使用“对齐”继续标注

大家好,
 
我需要LISP来使用对齐选项继续标注。在参考图像中,有2个选项A和B。我得到了具有连续维度的选项B,但我需要选项A。
 

rashidsohail13 发表于 2022-7-5 18:26:39

好的
我面临同样的问题

rashidsohail13 发表于 2022-7-5 18:32:15

这是你的问题,但我有其他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

hibba 发表于 2022-7-5 18:37:16

谢谢拉希德先生的建议。但我希望有一个更简单的方法。。我必须选择很多点,然后选择我想要的那一边
尺寸

marko_ribar 发表于 2022-7-5 18:41:27

这是我的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。

PDuMont 发表于 2022-7-5 18:48:43

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)

Tharwat 发表于 2022-7-5 18:50:49

 
嗨,PDuMont,
 
在将变量point1赋给另一个值之前,无需将其设置为nil。

PDuMont 发表于 2022-7-5 18:58:03

嗨,塔瓦,
 
是的,我不确定。。。
感谢您的澄清。

hibba 发表于 2022-7-5 19:04:12

 
谢谢Marko先生这对我很有帮助。。。

hibba 发表于 2022-7-5 19:06:31

 
非常感谢PDuMont先生,这正是我想要的。。。这对我来说很好
页: [1] 2
查看完整版本: 使用“对齐”继续标注