zjullf 发表于 2010-12-6 15:36:16

【求助】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)用变量来实现,可是程序都出错。。。
不能用变量吗?

zjullf 发表于 2010-12-6 15:40:48

原始程序是下面的,但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
;**********************************************************************

lsjj 发表于 2010-12-7 10:28:19

你不是已經會用變量嗎,如(cons 40 text_height)

su37 发表于 2011-2-1 15:16:23

哈哦资料啊
页: [1]
查看完整版本: 【求助】entmake 怎么使用变量?