乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 19|回复: 19

[编程交流] 组合多行长度a

[复制链接]

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

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

使用道具 举报

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:37:45 | 显示全部楼层
我不知道这是否是允许在这个论坛,但我准备支付这也。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 06:42:28 | 显示全部楼层
没有必要为此付费,只是由于缺乏为您编写lisp的信息,没有人回复您的帖子。
回复

使用道具 举报

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:44:05 | 显示全部楼层
 
您好,塔瓦特先生,感谢您回复“埃本·巴拉德:)”
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 06:46:45 | 显示全部楼层
[报价名称=tarekt
m] “Ebn Al-Balad:)”
Waw公司
 
欢迎来到Cadtutor Tarek
 
我想最好上传一个显示lisp目标前后的示例图,我非常乐意编写
lisp(如果我能做到或可能的话)。
 
当做
回复

使用道具 举报

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:50:13 | 显示全部楼层
 
谢谢你对塔瓦的热烈欢迎
我附上一个描述性的图纸解释我需要什么,如果有任何疑问,请让我知道。
lisp_光盘。图纸
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 06:55:27 | 显示全部楼层
Tarek,在附图中有一个属性块,名为:MyAttributedBlock,您可以重命名它或重新创建自己的块,但不要忘记在例程中更改块名,我希望下面的lisp能够按要求工作。
 
注意:您附着的图形是由另一个Autocad Arch生成的。因此,由于DXF代码,我不确定lisp是否可以在其他Cad版本上工作。
 
  1. (defun c:Test  (/ BlkName *error* ad IsAttributed l ss s p w d str st g  ent)
  2. ;;;===---{ Author : Tharwat Al Shoufi }---===;;;
  3. ;;;===---{ Date   : 20. May. 2013     }---===;;;
  4. (defun *error* (x)
  5.    (if ad
  6.      (setvar 'attdia ad)
  7.    )
  8.    (if st
  9.      (entdel st)
  10.    )
  11.    (princ "\n*Cancel*")
  12. )
  13. (setq BlkName "MyAttributedBlock")    ; Name of the Attributed Block ;
  14. (setq ad (getvar 'attdia))
  15. (setvar 'attdia 0)
  16. (or Doc
  17.      (setq Doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  18. )
  19. (defun IsAttributed (Doc name / n)
  20.    (setq n 0)
  21.    (vlax-for o (vla-item (vla-get-blocks Doc) name)
  22.      (if (eq "AcDbAttributeDefinition" (vla-get-objectname o))
  23.        (setq n (1+ n))
  24.      )
  25.    )
  26.    n
  27. )
  28. (cond
  29.    ((eq 4
  30.         (logand
  31.           4
  32.           (cdr
  33.             (assoc 70 (entget (tblobjname "LAYER" (getvar 'clayer))))
  34.           )
  35.         )
  36.     )
  37.     (progn (alert "Current Layer is LOCKED !!") (exit))
  38.    )
  39.    ((not (tblsearch "BLOCK" BlkName))
  40.     (progn (alert (strcat "The Attributed Block name < "
  41.                           BlkNmae
  42.                           " > is not found in the drawing !!"
  43.                   )
  44.            )
  45.            (exit)
  46.     )
  47.    )
  48.    ((not (eq (IsAttributed Doc BlkName) 3))
  49.     (progn
  50.       (alert
  51.         (strcat
  52.           "The Block name <"
  53.           BlkName
  54.           " > is not Attributed or doesn't have three attributes !!"
  55.         )
  56.       )
  57.       (exit)
  58.     )
  59.    )
  60. )
  61. (if
  62.    (and
  63.      (progn (princ "\n Select lines to measure them :")
  64.             (setq l  0.
  65.                   ss (ssget '((0 . "LINE")))
  66.             )
  67.      )
  68.      (progn (princ "\n Pick one Text only :")
  69.             (setq s (ssget "_+.:S:E:L" '((0 . "*TEXT") (1 . "#*x*#"))))
  70.      )
  71.    )
  72.     (progn
  73.       ((lambda (j / sn e)
  74.          (while (setq sn (ssname ss (setq j (1+ j))))
  75.            (setq e (entget sn))
  76.            (setq
  77.              l (+ l (distance (cdr (assoc 10 e)) (cdr (assoc 11 e))))
  78.            )
  79.          )
  80.        )
  81.         -1
  82.       )
  83.       (setq p (vl-string-search
  84.                 "x"
  85.                 (setq str (cdr (assoc 1 (entget (ssname s 0)))))
  86.               )
  87.             w (substr str 1 p)
  88.             d (substr str (+ 2 p))
  89.       )
  90.       (command "_.-insert"
  91.                BlkName
  92.                "_none"
  93.                "\"
  94.                "1.0"
  95.                "0"
  96.                (strcat "Length :" (rtos l 2 0))
  97.                (strcat "Depth  :" d)
  98.                (strcat "Width  :" w)                 
  99.       )
  100.       (setq st (entlast))
  101.     )
  102. )
  103. (setvar 'attdia ad)
  104. (princ "\n Written by Tharwat Al Shoufi")
  105. (princ)
  106. )
  107. (vl-load-com)

测验图纸
回复

使用道具 举报

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:56:51 | 显示全部楼层
Tharwat先生,这太棒了!你的头脑很聪明!!!干得好,谢谢!
 
很高兴认识你,希望其他人也觉得这很有帮助。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 07:00:16 | 显示全部楼层
 
太好了,不客气,塔瑞克
 
谢谢你的赞美。
回复

使用道具 举报

2

主题

14

帖子

12

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:04:41 | 显示全部楼层
 
您好,
 
当我今天测试文件时,我注意到我完全忘记了圆弧,我应该能够添加直线和/或圆弧的长度,我可以通过更改此过滤器将圆弧添加到对象列表中
  1. ss (ssget '((0 . "LINE")))


  1. ss (ssget '((0 . "LINE,ARC")))

但这是最简单的部分,
我无法将弧长添加到总和中,如果我没有错的话,我认为这应该放在这里:
  1. (progn
  2.       ((lambda (j / sn e)
  3.          (while (setq sn (ssname ss (setq j (1+ j))))
  4.            (setq e (entget sn))
  5.            (setq
  6.              l (+ l (distance (cdr (assoc 10 e)) (cdr (assoc 11 e))))
  7.            )
  8.          )
  9.        )
  10.         -1
  11.       )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 18:49 , Processed in 0.507277 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表