yugarden 发表于 2011-1-26 15:57:14

参考人家的代码,小修改,请教大家怎么达到自己想的效果

代码如下(声明:本代码为转贴别人成果,仅本人作小小小部分修改):
(defun c:dxs ( / ss filter mspace n e str asclst strs add pt txt txth)
(setq k_lay (tblsearch "layer" "设计参数"))
(if (null k_lay)
    (command "-layer" "n" "设计参数" "c" "3" "设计参数" "")
)
(command "-layer" "s" "设计参数" "")
(defun *error* (msg) (if ss (x_draw ss 4)) (setq *error* oerr))
(princ "\n选择要计算的文本(支持*TEXT选择集):")
(setq oerr *error*
ss (ssget '((0 . "*TEXT")))
filter "0123456789.-+"
mspace (vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object)))
str nil strs nil)
(if ss
    (repeat (setq n (sslength ss))
      (x_draw ss 3)
      (setq n (1- n)
   e (ssname ss n)
   str (vla-get-textstring(vlax-ename->vla-object e))
   asclst (mapcar '(lambda (x) (if (vl-string-search(chr x) filter) x 32)) (vl-string->list str))
   strs (strcat (if strs strs " ") (apply 'strcat (mapcar 'chr asclst)) " "))
      )
    )
(if (and ss (/= "" strs))
    (progn
      (setq add (eval (read (strcat "(+ " strs ")"))))
      (princ "\n文本数字和为: ")(princ add)
      (if (setq pt (getpoint "\n标注位置<重新计算>:"))
   (progn
            (setq prec 0
    txt (rtos add 2 prec)
    txth 350)
   (vla-addtext mspace txt (vlax-3D-point pt) txth)
   (x_draw ss 4)
   (princ) add)
   (progn (if ss (x_draw ss 4))(dxs))
      )
    )
    (progn (princ "\n!空选集或文本中无有效数字!\n") nil)
)
)
;;配套程序(x_draw ss key)
(defun x_draw (ss key / n e)
(if (= 'PICKSET (type ss))
    (repeat (setq n (sslength ss))
      (setq n (1- n)
   e (ssname ss n))
      (redraw e key)
    )
)
)

说明:程序原作用是统计所选文字中所有数字的总和,我小小小修改部分是:想在运行程序前、后的时候不改变原当前图层的条件下,把计算结果生成的文字改到“设计参数”的图层上去。
这个代码是我这个新手自己改的,虽然也能实现把结果文字改到“设计参数”图层上,但是就是必须把“设计参数”图层先当前化,然后运行完程序后还是这个“设计参数”图层,好像有点傻!
我尝试过改中间的代码,但是还是失败了。。。。。。

Gu_xl 发表于 2011-1-26 16:18:45


(defun c:dxs ( / ss filter mspace n e str asclst strs add pt txt txth oldlay)
(setq oldlay (getvar "clayer"))
(command "_layer" "m" "设计参数" "c" "3" "" "")
(defun *error* (msg) (if ss (x_draw ss 4)) (setq *error* oerr))
(princ "\n选择要计算的文本(支持*TEXT选择集):")
...
(setvar "clayer" oldlay)
)


yugarden 发表于 2011-1-26 16:46:54

回复 Gu_xl 的帖子

这样的做法就是开始获取原图层,保存,然后最后改回去是吗?

生长文字的时候lisp是不是没办法直接指定它生成在哪个图层?

Gu_xl 发表于 2011-1-26 19:02:57

回复 yugarden 的帖子

(setq obj (vla-addtext mspace txt (vlax-3D-point pt) txth))
(vla-put-layey obj"设计参数" )
使用vla-put-layey 函数前必须确保图里已创建"设计参数" 图层

yugarden 发表于 2011-1-27 17:22:23

样板文件已经有那个图层

guankuiwu 发表于 2012-5-4 11:11:16

本帖最后由 guankuiwu 于 2012-5-4 11:25 编辑

这个在文体中有汉字时会出错哦,多行文本宽度比例不是1的时候计算会出错!
页: [1]
查看完整版本: 参考人家的代码,小修改,请教大家怎么达到自己想的效果