bagulhodoido 发表于 2022-7-6 08:17:48

尺寸值自动求和

大家好!
 
我到处都搜索到了一个lisp,它可以对所有选定的维度值求和。
 
我已经得到了对所有直线和/或多段线求和的lisp,但这次它不起作用。
 
有人知道Lisp程序能做到这一点吗?对所选维度实体值求和?
 
提前谢谢。

Lee Mac 发表于 2022-7-6 08:23:44

作为对我编写的旧区域lisp的快速修改,仅使用维度的测量属性:
 

(defun c:Dims2Field ( / *error* spc doc pt uFlag ss ids )
(vl-load-com)
;; © Lee Mac 2010

(defun *error* ( msg )
   (and uFlag (vla-EndUndomark doc))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ)
)

(setq spc
   (if
   (or
       (eq AcModelSpace
         (vla-get-ActiveSpace
         (setq doc
             (vla-get-ActiveDocument
               (vlax-get-acad-object)
             )
         )
         )
       )
       (eq :vlax-true (vla-get-MSpace doc))
   )
   (vla-get-ModelSpace doc)
   (vla-get-PaperSpace doc)
   )
)

(if (and (ssget '((0 . "*DIMENSION")))
          (setq pt (getpoint "\nPick Point for Field: ")))
   (progn
   (setq uFlag (not (vla-StartUndoMark doc)))
   
   (vlax-for obj (setq ss (vla-get-ActiveSelectionSet doc))
       (setq Ids
         (cons (GetObjectID obj doc) Ids)
       )
   )
   (vla-delete ss)

   (vla-AddMText spc (vlax-3D-point pt) 0.

       (if (= 1 (length Ids))
         (strcat "%<\\AcObjProp Object(%<\\_ObjId " (car Ids) ">%).Measurement \\f \"%lu6\">%")
         (strcat "%<\\AcExpr"
         (lst->str Ids " %<\\AcObjProp Object(%<\\_ObjId " ">%).Measurement >% +")
         ">%).Measurement >% \\f \"%lu6\">%"
         )
       )
   )
   
   (setq uFlag (vla-EndUndomark doc))
   )
)
(princ)
)

(defun lst->str ( lst d1 d2 )
;; © Lee Mac 2010
(if (cdr lst)
   (strcat d1 (car lst) d2 (lst->str (cdr lst) d1 d2))
   (strcat d1 (car lst))
)
)

(defun GetObjectID ( obj doc )
;; © Lee Mac 2010
(if
   (eq "X64"
   (strcase
       (getenv "PROCESSOR_ARCHITECTURE")
   )
   )
   (vlax-invoke-method
   (vla-get-Utility doc) 'GetObjectIdString obj :vlax-false
   )
   (itoa (vla-get-Objectid obj))
)
)

alanjt 发表于 2022-7-6 08:28:28

这是我不久前写的。。。
 
(defun c:DimSum (/ ss)
;; Alan J. Thompson
(if (setq ss (ssget '((0 . "DIMENSION"))))
   ((lambda (v)
      (vlax-for x (setq ss (vla-get-activeselectionset
                           (cond (*AcadDoc*)
                                 ((setq *AcadDoc* (vla-get-activedocument
                                                      (vlax-get-acad-object)
                                                    )
                                    )
                                 )
                           )
                           )
                  )
      (or (wcmatch (vla-get-objectname x) "*Angular*") (setq v (+ v (vla-get-measurement x))))
      )
      (vla-delete ss)
      (or (zerop v) (alert (strcat "Total: " (rtos v))))
    )
   0.
   )
)
(princ)
)
李,知道角度尺寸也有测量性质。我的原稿要简单得多,直到我好奇如果我选择了一个,它是否会崩溃。

Lee Mac 发表于 2022-7-6 08:32:00

是的,角度的缺点是场以Rads显示。。。

alanjt 发表于 2022-7-6 08:40:29

对,但如果要计算维度的总和,角度维度不是我们想要的长度值。我的观点是它应该被过滤掉。

Lee Mac 发表于 2022-7-6 08:41:28

 
好的,我把这个留给OP

alanjt 发表于 2022-7-6 08:49:11

没有关系。我只是想让你知道。

Lee Mac 发表于 2022-7-6 08:52:57

 
谢谢

bagulhodoido 发表于 2022-7-6 08:58:50

谢谢你们!完全符合需要!

manori 发表于 2022-7-6 09:03:22

这节省了我的时间。。。。
非常感谢。。。。。。
页: [1] 2
查看完整版本: 尺寸值自动求和