【求助】entmake 怎么使用变量?
(entmake (list'(0 . "TEXT")
'(100 . "AcDbEntity")
(cons 8 (getvar "CLAYER"))
'(100 . "AcDbText")
'(10x y 0.0)
(cons 40 text_height)
(cons 1 name_out)
'(50 . 0.0)
'(41 . 1.0)
'(51 . 0.0)
(cons 7 (getvar "TEXTSTYLE"))
'(71 . 0)
'(72 . 0)
'(11 0.0 0.0 0.0)
'(210 0.0 0.0 1.0)
'(100 . "AcDbText")
'(73 . 0)
) ;list
) ;entmake
我想把里面的坐标 '(10x y 0.0)用变量来实现,可是程序都出错。。。
不能用变量吗?
原始程序是下面的,但command text输出来的字符串内容都变成了0,不知道为什么
监测变量,在command text前一句,所有变量值都正常,但经command text输出就变
成了0. 而且奇怪的是,偶尔输出又正常的。
不知道原因。
所以想用entmake来输出字符串。
以下是建筑中经常用到的门窗个数统计的源代码:
(defun c:smc(/ all_text_content all_text_height num_list
ss p n i ss_name ent_list ent_type ent_content
i print_list x_base y_base np1 x y x2 np2
name_out num_out text_name num_name tstyle)
(SETQ tstyle(getvar "TEXTSTYLE"))
(setvar "TEXTSTYLE" "HZTXT")
(setq all_text_content())
(setq all_text_height())
(setq num_list())
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(princ "\n 请选择门窗文字")
(setq ss(ssget))
(princ "\n 请选择门窗表打印位置")
(setq p(getpoint ))
;_______________________________________________________
(setq n(sslength ss))
(setq i 0)
(repeat n
(setq ss_name(ssname ss i))
(setq ent_list(entget ss_name))
(setq ent_type(cdr(assoc 0 ent_list)))
(if(= ent_type "TEXT")
(progn
(setq ent_content(cdr(assoc 1 ent_list)))
(setq text_height(cdr(assoc 40 ent_list)))
(setq all_text_content(append all_text_content (list ent_content)))
);end progn
);end if
(setq i(+ i 1))
);end repeat
;_______________________________________________________
(setq i 0)
(setq print_list(del-b all_text_content));清除重复图元,获得不同的图元名
(setq n(length print_list))
(repeat n
(setq name_out(nth i print_list));选出一个内容名用于比较
;###############################
(setq j 0)
(setq nn(length all_text_content))
(setq num 0)
(repeat nn
(setq all_name_out(nth j all_text_content))
(if(= name_out all_name_out)
(setq num(+ num 1))
);end if
(setq j(+ j 1))
);repeat
(setq num_list(append num_list (list num)))
;###############################
(setq i(+ i 1))
);end repeat
;___打字_____________________________________________
(setq text_space(+ text_height 200))
(setq n(length print_list))
(setq n_value(fix (/ 240 n)));选择其中的240种颜色
(setq i 0)
(setq x_base(car p))
(setq y_base(cadr p));获得打印基准点
(repeat n
(setq x x_base)
(setq y(- y_base (* text_space i)))
(setq np1(list x y 0))
(setq x2(+ x (* 8 text_height)))
(setq np2(list x2 y 0))
(setq name_out(nth i print_list))
(setq num_out(nth i num_list))
(command "text" np1 text_height 0 name_out "" "")
(setq text_name(entlast))
(setq i_abc(itoa (+ (* n_value i) 1)))
(COMMAND "CHPROP" text_name "" "C" i_abc "")
(command "text" np2 text_height 0 num_out "" "")
(setq num_name(entlast))
(COMMAND "CHPROP" num_name "" "C" i_abc "")
(setq i(+ i 1))
);end repeat
;_______________________________________________________
(setvar "TEXTSTYLE" tstyle)
);end defun
;****************清除重复图元名函数_start*****************************
(defun del-b (lst / lst_new lst_en)
(while lst
(setq lst_en (nth 0 lst)
lst_new (append lst_new (list lst_en))
lst (vl-remove lst_en lst));会移除与lst_en重复的元素
);end while
lst_new
);end defun
;**********************************************************************
你不是已經會用變量嗎,如(cons 40 text_height) 哈哦资料啊
页:
[1]