tazzzz 发表于 2022-7-5 20:29:58

预定尺寸DIMLINEAR

大家好,
我需要一个lisp帮助,它将在dwg上插入尺寸。根据一些标准:
-选择点A和B
-选择CG
-为特定长度创建尺寸标注(见附件)
-对齐cg上的尺寸字符串。
 
谢谢你的帮助
4点即时消息。pdf

Tharwat 发表于 2022-7-5 20:43:32

试试看,让我知道。
 

(defun c:Test (/ a b c d x 1p 2p 3p 4p bk)
;;        Tharwat 09.Dec.2014        ;;
(if
   (and
   (setq a (getpoint "\n Specify point A :"))
   (setq b (getpoint "\n Specify point B on the right side :" a))
   (if (and (> (car b) (car a))
            (equal (cadr a) (cadr b) 1e-4)
         )
       t
       (progn
         (alert "Point B must be on the right side of point A and on the same line ")
         nil
       )
   )
   (setq c (getpoint "\n Specify point CG below the mid-point of A and B :"))
   (setq d (distance a b))
   )
    (cond
      ((and (< (cadr c) (cadr a))
            (< (car c) (car b))
            (> (car c) (car a))
            (< 0
               (- (distance a (setq x (list (car c) (cadr a))))
                  (+ (* d 0.292) (/ (* d 0.208) 2.))
               )
            )
       )
       (setq 1p (polar x pi (+ (* d 0.292) (/ (* d 0.208) 2.)))
             2p (polar 1p 0. (* d 0.292))
             3p (polar x 0. (/ (* d 0.208) 2.))
             4p (polar 3p 0. (* d 0.292))
             bk (vlax-get (vla-get-activelayout
                            (vla-get-activedocument (vlax-get-acad-object))
                        )
                        'Block
                )
       )
       (mapcar
         '(lambda (q p)
            (vla-AddDimAligned
            bk
            (vlax-3D-point q)
            (vlax-3D-point p)
            (vlax-3D-point (polar q (* pi 0.5) (/ (* d 0.208) 2.)))
            )
          )
         (list a 1p 2p 3p 4p)
         (list 1p 2p 3p 4p b)
       )
       (vla-AddDimAligned
         bk
         (vlax-3D-point a)
         (vlax-3D-point b)
         (vlax-3D-point (polar a (* pi 0.5) (* d 0.208)))
       )
      )
      (t (princ "\n ** Invalid inputs !! **"))
    )
)
(princ)
)(vl-load-com)

tazzzz 发表于 2022-7-5 20:54:55

这真的很好。
如果不太麻烦,请将尺寸四舍五入到最近的英尺(例如:7’-5 15/16”到7’-0;7’-6”到8’-0”)。
 
非常感谢您的时间和出色的工作。

Tharwat 发表于 2022-7-5 20:58:06

 
非常欢迎你。很乐意帮忙
 
 
对不起,我是公制的,不知道如何处理英尺单位,所以也许其他人可以修改我的程序,以满足您在这方面的需要。
 
注意:最好在中发布图像。jpeg(在以后的文章中)和这种格式可以立即在线程中显示图像,并且不需要下载就可以看到图像。谢谢
 
祝你好运

tazzzz 发表于 2022-7-5 21:06:57

再次感谢你的Lisp程序
祝你有美好的一天。

hanhphuc 发表于 2022-7-5 21:13:06

 
我们所能做的就是将精度设置为零。
这是本机的,最小值为0

(defun c:dimft (/ *error* u ss)
(if (setq ss (ssget ":L" '((0 . "DIMENSION"))))
   (foreach obj (acet-ss-to-list ss)
   (mapcar ''((a b) (vlax-put(vlax-ename->vla-object obj) a b))
      '("UnitsFormat" "PrimaryUnitsPrecision") '(4 0)) ;_ end of mapcar
   )
   ) ;_ end of if
(princ)
) ;_ end of defun

tazzzz 发表于 2022-7-5 21:21:39

hanhphuc,
 
谢谢你的代码。
有没有办法只将代码应用于使用Tharwat的lisp计算的那些维度(并成为其中的一部分)?
再次感谢您抽出时间。

hanhphuc 发表于 2022-7-5 21:34:27

 
尝试

(defun c:Test (/ a b c d x 1p 2p 3p 4p bk m-ft)
;;        Tharwat 09.Dec.2014        ;;

(defun m-ft nil
(mapcar ''((a b) (vlax-put(vlax-ename->vla-object (entlast)) a b))
      '("UnitsFormat" "PrimaryUnitsPrecision") '(4 0)) ;_ end of mapcar
)
...
...
...
...
...
(mapcar
         '(lambda (q p)
            (vla-AddDimAligned
            bk
            (vlax-3D-point q)
            (vlax-3D-point p)
            (vlax-3D-point (polar q (* pi 0.5) (/ (* d 0.208) 2.)))
            )
   
(m-ft)
   
          )
         (list a 1p 2p 3p 4p)
         (list 1p 2p 3p 4p b)
       )

       (vla-AddDimAligned
         bk
         (vlax-3D-point a)
         (vlax-3D-point b)
         (vlax-3D-point (polar a (* pi 0.5) (* d 0.208)))
       )

(m-ft)

      )
      (t (princ "\n ** Invalid inputs !! **"))
    )
...
...

嗯,所有的功劳都归功于塔瓦
vlax get和vlax put
页: [1]
查看完整版本: 预定尺寸DIMLINEAR