CADapult 发表于 2022-7-5 20:30:05

区块计数-需要意见

不久前,我创建了一个lisp例程,用于将管件块插入到图形中。块的命名代码仅表示连接类型、尺寸和配件类型(弯头、三通、异径管等)。现在,我需要设置lisp,以便能够在插入块时将材料、涂层和管道明细表信息添加到块中,以便我们可以提取BOM表。目前,每个块用于每种可能的材料、管道计划等。配件可能会出现。为每个所需的变化生成一个单独的块将使系统中存储的块的数量至少乘以10倍。
所以,我需要一些意见;我是在插入块时通过填充属性向其添加额外数据,还是在插入块时动态重命名块?我有几个lisp例程可以提取块数量,但是基于属性文本提取块数量会更容易吗?
 
警告:我充其量只是一个Lisp程序的黑客,所以我可能会在这方面寻求帮助。

Smirnoff 发表于 2022-7-5 20:40:34

可以使用扩展数据将数据存储在块或实体内。以下是一些功能:
 
(defun Add_XData(
             Ent        ; - Entity Ename
             App        ; - Application name
             dList        ; - XData list (list(cons group data)...)
             )
(regapp App)
(entmod(append(entget Ent)(list(list -3(append(list App)dList)))))
); end of Add_XData


; --------------------------------------------------------------------------------------------------------------------------


(defun Delete_XData(
                  Ent        ; - Entity Ename
                  apLst        ; - List of Applications
                  / xEnt)

(setq xEnt(entget Ent apLst)
xEnt(vl-remove(assoc -3 xEnt)xEnt)
); end setq
(entmod xEnt)
); end of Delete_XData


; --------------------------------------------------------------------------------------------------------------------------


(defun Read_XData(
                  Ent                ; - Entity Ename
                  apName        ; - Application name
                  / xEnt)

(setq xEnt(entget Ent(list apName))
xEnt(vl-remove apName(cadar
                      (vl-remove-if
                        (function
                          (lambda(a)(/= -3(car a))))xEnt)))
); end setq
); end of Read_XData

; --------------------------------------------------------------------------------------------------------------------------
 
Visual LISP控制台示例:
 
; get some entity on screen
_$ (setq ent(car(entsel)))
<Entity name: 7ef02390>

; add XData for application 'My Magic App' to entity
_$ (Add_XData ent "My Magic App" (list(cons 1000 "Magic Data 1")(cons 1000 "Magic Data 2")))
((-1 . <Entity name: 7ef02390>) (0 . "LINE") (330 . <Entity name: 7ef01cf8>) (5 . "1B2") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (370 . 70) (100 . "AcDbLine") (10 2183.93 319.511 0.0) (11 2637.11 1054.87 0.0) (210 0.0 0.0 1.0) (-3 ("My Magic App" (1000 . "Magic Data 1") (1000 . "Magic Data 2"))))

; read XData foe the same application
_$ (Read_XData ent "My Magic App")
((1000 . "Magic Data 1") (1000 . "Magic Data 2"))

; delete XData for the same application
_$ (Delete_XData ent (list "My Magic App"))
((-1 . <Entity name: 7ef02390>) (0 . "LINE") (330 . <Entity name: 7ef01cf8>) (5 . "1B2") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (370 . 70) (100 . "AcDbLine") (10 2183.93 319.511 0.0) (11 2637.11 1054.87 0.0) (210 0.0 0.0 1.0))
_$

Vineet Babbar 发表于 2022-7-5 20:45:24

嗨Cadapult,
 
如果你能提供给我的话,我需要你提供的这个Block counting lisp。实际上,我从事灌溉项目,需要为项目中使用的所有PVC配件编制工程量清单。
基本上,我们项目中的所有管道都在不同的层上,正如已经告诉你的那样,我们需要取下配件。如果您的lisp在这种情况下有效,请将其发送到我的电子邮件地址:vineetbabbar@gmail.com
 
谢谢和问候,
Vineet Babbar。

ReMark 发表于 2022-7-5 20:56:37

葡萄园:
 
查看CADTutor论坛成员李·麦克的区块计数器程序。
 
http://lee-mac.com/blockcounter.html

anupmadhu 发表于 2022-7-5 21:02:27

 
先生
请你把代码贴出来。

BIGAL 发表于 2022-7-5 21:08:02

也许看不见的属性,这样你可以有很多数据,但视觉上只能看到少数。
 
由于您已经有了一个lisp,可能更容易添加到您的lisp中,可能是一个更通用的版本,可以处理各种数量的属性,因此只使用一个例程,而不是每个块类型使用一个例程。

CADapult 发表于 2022-7-5 21:12:44

抱歉,此回复花费了一些时间。直到今天我才回到主题上来。
 
 
我不采取任何附加的例行程序,这是我在这个网站上发现了很长一段时间。这有点超过了我的编程能力。我希望我能记得作者是谁,这样他们就可以为此获得荣誉,因为这本书很滑。
 
 
在图形中运行例程,它会在与图形相同的文件夹中创建Excel电子表格。
 
 
我从未为即时块重命名找到解决方案。随着我们在不久的将来转向发明者,这并不重要,但我本想解决这个问题。
BC。lsp

Tharwat 发表于 2022-7-5 21:22:44

 
不用担心,现在大约三年了

stevesfr 发表于 2022-7-5 21:28:56

 
本BC。如果有人可以在电子表格开头的某个地方添加图形名称,并将其添加到保存Excel精细名称中,则lsp可能更有价值。在处理多张图纸集的计划时,确实可以防止混淆。
感谢可能的补充
史蒂夫

CADapult 发表于 2022-7-5 21:32:35

 
嘿,最近一次请求使用block counting LISP是在几天前。
 
 
从现在起,我会尽量在6个月内回复。承诺:^)
页: [1]
查看完整版本: 区块计数-需要意见