cad二次开发相关?
ag-
ag- Lv.2
2007年12月17日 17:52:26
来自于行业脉动
只看楼主

那位高手能给我讲讲怎么样才能在cad里用编程的方法查询到一共有多少个同样形状的图形,并且显示出来属性?是不是不是块了就不能查询到?我是刚开始学二次开发,先谢谢大家!

那位高手能给我讲讲怎么样才能在cad里用编程的方法查询到一共有多少个同样形状的图形,并且显示出来属性?是不是不是块了就不能查询到?我是刚开始学二次开发,先谢谢大家!
免费打赏
eobser
2007年12月17日 18:52:22
2楼
如果不是块的话估计不好搞,cad里面对象就按直线、多段线、文字、图块和各种符号表来的,
譬如外形看来是矩形的,有可能是四段直线也可能是一条多段线或其他,这在程序里面不好处理。
回复
ag-
2007年12月17日 22:46:23
3楼
感谢回复。能不能给讲讲要是块了怎么搞?给指条明路?现在还要上班时间不多,自己看书太难了请给我说说从那方面着手好一点。非常感谢~!
回复
eobser
2007年12月18日 09:43:51
4楼
选择对象: ((-1 . <图元名: 7eb23200>) (0 . "INSERT") (330 . <图元名: 7eb20cf8>)
(5 . "2B8") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbBlockReference") (66 . 1) (2 . "gcbzblock") (10 1259.18 700.735 0.0) (41 .
4.0) (42 . 4.0) (43 . 4.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0)
(210 0.0 0.0 1.0))
如上为某插入图元的组码列表,
1、(0 . "INSERT") 表对象为插入图元;
2、(2 . "gcbzblock") 表图块名称gcbzblock;
3、(41 . 4.0) (42 . 4.0) (43 . 4.0) 为插入图元各向缩放比例。
简单的用ssget函数用1、.2进行过滤选择,sslength进行统计就行了。
详见函数参考。
回复
bt
2007年12月18日 09:52:12
5楼
bcount图块统计,et已经有该程序
回复
eobser
2007年12月18日 11:59:22
6楼
;et里面的源码
(defun c:bcount ( / ss flt a n lst)
(acet-error-init
(list nil T)
);acet-error-init

;build a filter of valid block names
(setq lst (acet-table-name-list (list "block" 1 4 16))) ;exclude anonymous and xref blocks
(setq n 0)
(repeat (length lst)
(setq a (nth n lst)
a (cons 2 a)
flt (cons a flt)
);setq
(setq n (+ n 1));setq
);repeat

(setq flt (append ’((0 . "INSERT")
(-4 . "<OR")
)
flt
’((-4 . "OR>"))
);append
);setq
(acet-ss-clear-prev)
(princ "\n按回车键全部选择或...")

(if (setq ss (ssget))
(setq ss (ssget "_p" flt))
(setq ss (ssget "_x" flt))
);if
(if ss
(bns_count ss)
(princ "\n未选中有效的对象。")
);if

(acet-error-restore)
);defun c:count

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun bns_count ( ss / bna lst na e1 n a mx )


;get a list of all unique block names
(setq mx 1)
(setq n 0)
(repeat (sslength ss)
(setq na (ssname ss n)
e1 (entget na)
bna (cdr (assoc 2 e1))
mx (max mx (strlen bna))
);setq
(if (not (assoc bna lst))
(setq lst (cons (cons bna 1) lst))
(setq a (cdr (assoc bna lst))
a (+ a 1)
lst (subst (cons bna a) (assoc bna lst) lst)
);setq
);if
(setq n (+ n 1));setq
);repeat

(if lst
(progn
(setq mx (+ mx 5));setq
(princ (bns_count_format "块" "计算" mx))
(setq a "\n")
(while (< (strlen a) (+ mx 7))
;; (setq a (strcat a "-"))
(setq a (acet-str-format "%1-" a))
);while
(princ a)
);progn then print header
);if
(setq n 0)
(repeat (length lst)
(setq a (nth n lst));setq
(princ (bns_count_format (car a) (itoa (cdr a)) mx))
(setq n (+ n 1));setq
);repeat
);defun bns_count

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun bns_count_format ( a b mx / )

(while (<= (strlen a) mx)
;; (setq a (strcat a "."))
(setq a (acet-str-format "%1." a))
);while
;; (setq a (strcat "\n" a b))
(setq a (acet-str-format "\n%1%2" a b))
);defun bns_count_format


(princ)
回复
ag-
2007年12月18日 17:40:01
7楼
谢谢两位,对我的帮助很大呀
回复
ag-
2007年12月20日 22:40:50
8楼
5楼说是et里有,我怎么找不到?谁能告诉我?
回复
eobser
2007年12月23日 11:03:24
9楼
autocad安装目录下Express文件夹里面的lsp文件。
回复

相关推荐

APP内打开