tarektm 发表于 2022-7-6 06:33:36

组合多行长度a

你好
 
我有一个例子,我应该在一个属性块中组合多行长度和现有文本,
 
这里有一个例子。
 
我有两行,其中一行只有文本,因此如果我选择这三个元素(两行和文本),lisp必须创建一个属性块,如行下方所示
 
___300x200____-----------
 
宽度:300
深度:200
长度:(Line1长度+Line2长度)
 
这个属性块应该保存在一个新层中,比如我将其命名为M-Duct-Calc
 
该lisp的目的是测量管道长度,以创建数量估算。
 
我们非常感谢您的帮助或指导。

tarektm 发表于 2022-7-6 06:37:45

我不知道这是否是允许在这个论坛,但我准备支付这也。

Tharwat 发表于 2022-7-6 06:42:28

没有必要为此付费,只是由于缺乏为您编写lisp的信息,没有人回复您的帖子。

tarektm 发表于 2022-7-6 06:44:05

 
您好,塔瓦特先生,感谢您回复“埃本·巴拉德:)”

Tharwat 发表于 2022-7-6 06:46:45

[报价名称=tarekt
m] “Ebn Al-Balad:)”
Waw公司
 
欢迎来到Cadtutor Tarek
 
我想最好上传一个显示lisp目标前后的示例图,我非常乐意编写
lisp(如果我能做到或可能的话)。
 
当做

tarektm 发表于 2022-7-6 06:50:13

 
谢谢你对塔瓦的热烈欢迎
我附上一个描述性的图纸解释我需要什么,如果有任何疑问,请让我知道。
lisp_光盘。图纸

Tharwat 发表于 2022-7-6 06:55:27

Tarek,在附图中有一个属性块,名为:MyAttributedBlock,您可以重命名它或重新创建自己的块,但不要忘记在例程中更改块名,我希望下面的lisp能够按要求工作。
 
注意:您附着的图形是由另一个Autocad Arch生成的。因此,由于DXF代码,我不确定lisp是否可以在其他Cad版本上工作。
 

(defun c:Test(/ BlkName *error* ad IsAttributed l ss s p w d str st gent)
;;;===---{ Author : Tharwat Al Shoufi }---===;;;
;;;===---{ Date   : 20. May. 2013   }---===;;;
(defun *error* (x)
   (if ad
   (setvar 'attdia ad)
   )
   (if st
   (entdel st)
   )
   (princ "\n*Cancel*")
)
(setq BlkName "MyAttributedBlock")    ; Name of the Attributed Block ;

(setq ad (getvar 'attdia))
(setvar 'attdia 0)
(or Doc
   (setq Doc (vla-get-ActiveDocument (vlax-get-acad-object)))
)
(defun IsAttributed (Doc name / n)
   (setq n 0)
   (vlax-for o (vla-item (vla-get-blocks Doc) name)
   (if (eq "AcDbAttributeDefinition" (vla-get-objectname o))
       (setq n (1+ n))
   )
   )
   n
)
(cond
   ((eq 4
      (logand
          4
          (cdr
            (assoc 70 (entget (tblobjname "LAYER" (getvar 'clayer))))
          )
      )
    )
    (progn (alert "Current Layer is LOCKED !!") (exit))
   )
   ((not (tblsearch "BLOCK" BlkName))
    (progn (alert (strcat "The Attributed Block name < "
                        BlkNmae
                        " > is not found in the drawing !!"
                  )
         )
         (exit)
    )
   )
   ((not (eq (IsAttributed Doc BlkName) 3))
    (progn
      (alert
      (strcat
          "The Block name <"
          BlkName
          " > is not Attributed or doesn't have three attributes !!"
      )
      )
      (exit)
    )
   )
)
(if
   (and
   (progn (princ "\n Select lines to measure them :")
            (setq l0.
                  ss (ssget '((0 . "LINE")))
            )
   )
   (progn (princ "\n Pick one Text only :")
            (setq s (ssget "_+.:S:E:L" '((0 . "*TEXT") (1 . "#*x*#"))))
   )
   )
    (progn
      ((lambda (j / sn e)
         (while (setq sn (ssname ss (setq j (1+ j))))
         (setq e (entget sn))
         (setq
             l (+ l (distance (cdr (assoc 10 e)) (cdr (assoc 11 e))))
         )
         )
       )
      -1
      )
      (setq p (vl-string-search
                "x"
                (setq str (cdr (assoc 1 (entget (ssname s 0)))))
            )
            w (substr str 1 p)
            d (substr str (+ 2 p))
      )
      (command "_.-insert"
               BlkName
               "_none"
               "\\"
               "1.0"
               "0"
               (strcat "Length :" (rtos l 2 0))
               (strcat "Depth:" d)
               (strcat "Width:" w)               
      )
      (setq st (entlast))
    )
)
(setvar 'attdia ad)
(princ "\n Written by Tharwat Al Shoufi")
(princ)
)
(vl-load-com)


测验图纸

tarektm 发表于 2022-7-6 06:56:51

Tharwat先生,这太棒了!你的头脑很聪明!!!干得好,谢谢!
 
很高兴认识你,希望其他人也觉得这很有帮助。

Tharwat 发表于 2022-7-6 07:00:16

 
太好了,不客气,塔瑞克
 
谢谢你的赞美。

tarektm 发表于 2022-7-6 07:04:41

 
您好,
 
当我今天测试文件时,我注意到我完全忘记了圆弧,我应该能够添加直线和/或圆弧的长度,我可以通过更改此过滤器将圆弧添加到对象列表中
ss (ssget '((0 . "LINE")))

ss (ssget '((0 . "LINE,ARC")))
但这是最简单的部分,
我无法将弧长添加到总和中,如果我没有错的话,我认为这应该放在这里:
(progn
      ((lambda (j / sn e)
         (while (setq sn (ssname ss (setq j (1+ j))))
         (setq e (entget sn))
         (setq
             l (+ l (distance (cdr (assoc 10 e)) (cdr (assoc 11 e))))
         )
         )
       )
      -1
      )
页: [1] 2
查看完整版本: 组合多行长度a