JoeyG_77 发表于 2022-7-5 16:01:10

在att中获得块计数


 
我很难找到一个选项来获得一个字段来显示一个特定块的计数。我需要这些信息,这样我就可以把它放到数据提取中。任何帮助都将不胜感激。
 
谢谢
乔伊·G

Tharwat 发表于 2022-7-5 16:15:34

你好
不可能将一个字段引用到包含的许多对象和块。

JoeyG_77 发表于 2022-7-5 16:21:45

我见过有人编写lisp,然后使用自定义字段应用lisp中的信息,但我无法找出2之间的联系。
 
https://forums.autodesk.com/t5/autocad-for-mac-forum/linking-a-field-to-a-block-count/td-p/6409772

Tharwat 发表于 2022-7-5 16:32:28

 
这是Diesel表达式的变通方法,它不是直接字段对象。

JoeyG_77 发表于 2022-7-5 16:36:08

塔尔瓦特。。。无论如何,是否需要修改此代码以查看嵌套块以同时提取计数。
 
(defun c:recount (/ block_list cnt env_name)
(setq block_list
(list
(cons '2 "Shelf_Pin")
)
)
(foreach i block_list
(if
(setq ss (ssget "X" (list '(0 . "INSERT") i)))

(progn
(setq
cnt (itoa (sslength ss))
env_name (strcat "" (cdr i))
)
(setenv env_name cnt)
(princ (strcat "\nSet " env_name " to " cnt))
)

(progn
(setq
cnt "0"
env_name (strcat "" (cdr i))
)
(setenv env_name cnt)
(princ (strcat "\nSet " env_name " to " cnt))
)

)
)
(command "_REGEN") ;_refreshes field values
(princ)
)

BIGAL 发表于 2022-7-5 16:49:09

我从lee mac的代码开始,这不是完美的,但在测试同一块的5次。如果您有多个名称块,那么复杂性级别要高得多。是的,它需要一些错误捕捉,但需要一个开始。
 

;get entities code by lee-mac
(defun GetBlockEntities(Blk / tStr)
(if (tblsearch "BLOCK" Blk)
(GetObj (tblobjname "BLOCK" Blk))))

(defun GetObj(bObj)
(if (setq bObj (entnext bObj))
(cons bObj (GetObj bObj))))


; Then pick a block to get block name
(setq obj (vlax-ename->vla-object (car (entsel "\nPick block object"))))
(setq bname (vla-get-name obj))

(setq blks (GetBlockEntities bname))
(setq tot 0)
(repeat (setq x (length blks))
(setq bobj (vlax-ename->vla-object(nth (setq x (- x 1)) blks)))
(if (= (vla-get-objectname bobj)"AcDbBlockReference")
(progn
(vla-get-effectivename bobj)
(setq tot (+ tot 1))
)
)
)
(alert (strcat "Blocks found " (rtos tot 2 0) "\nCalled " (vla-get-effectivename bobj)))

JoeyG_77 发表于 2022-7-5 16:54:19

我在上面发布的代码与Diesel表达式链接,以更新一个字段,该字段反过来会更新数据提取表。唯一的一点是,它没有为我需要计算的特定块查找嵌套块。我发现LeeMac的代码很好用,但我不知道如何将信息输出到字段中,并让它像以前一样更新数据提取。。但这是代码。我只是在寻找一个特定的块,并让它自动更新字段,就像以前一样。谢谢你的帮助
 
(defun c:nest (/ str lst tdef)
(while
(progn
(setq str (getstring t "\nSpecify Block Name <All> :"))
(cond ((eq "" str)
(while (setq tdef (tblnext "BLOCK" (null tdef)))
(setq lst (cons (cdr (assoc 2 tdef)) lst))) nil)
((and (snvalid str)
(tblsearch "block" str))
(setq lst (list str)) nil)
(t (princ "\n** Block not Found **")))))

(setq mstr (+ 5 (apply 'max (mapcar 'strlen lst))))
(princ (strcat (Pad "\n Block" 32 mstr) "| Count"))
(princ (strcat (Pad "\n " 45 mstr) (Pad "|" 45 10)))

(foreach x lst
(setq i (Blkcount x))
(princ
(strcat
(Pad (strcat "\n " x) 46 mstr)
(Pad "|" 46 (- 10 (strlen (itoa i)))) (itoa i))))

(princ))

(defun Pad (Str Chc Len)
(while (< (strlen Str) Len)
(setq Str (strcat Str (chr Chc))))
Str)

JoeyG_77 发表于 2022-7-5 17:06:13

有人有什么意见吗。。。任何帮助都将不胜感激
页: [1]
查看完整版本: 在att中获得块计数