清风明月名字 发表于 2013-12-2 09:51:45

求一个利用TXT的多参数批量画图元的LSP代码

求一个利用TXT的多参数批量画图元的LSP代码参数的性质如下:

孔号镡孔性镡X坐标镡Y坐标镡Z坐标镡字高

文本文件中的参数具体内容如下:
ZK1镡一般孔镡1镡11镡1.3镡2.5
ZK2镡一般孔镡2镡12镡2.3镡2.5
ZK3镡一般孔镡3镡13镡3.3镡2.5
ZK4镡一般孔镡4镡14镡4.3镡2.5
ZK5镡一般孔镡5镡15镡5.3镡2.5
ZK6镡一般孔镡6镡16镡6.3镡2.5
ZK7镡一般孔镡7镡17镡7.3镡2.5
ZK8镡一般孔镡8镡18镡8.3镡2.5
ZK9镡一般孔镡9镡19镡9.3镡2.5
ZK10镡一般孔镡10镡20镡10.3镡2.5

我需要将每行参数分解,利用分解出来的X Y Z画一个圆,圆的直径为字高。再用 (X+字高/2) YZ用这三个坐标写一个单行文字,内容为孔号(即每行的第一个参数)
可利用晓东的LSP函数或学院派的函数

wwwbxd 发表于 2013-12-2 09:51:46

本帖最后由 wwwbxd 于 2013-12-21 10:16 编辑

看看这段代码吧写了半个小时啊

(defun C:mjb (/ fath a name is x y z d p1 p2 r)
(setvar "osmode" 0)
(vl-load-com)
(setq path (getfiled "选择数据文件" "c:/" "TXT" 4))
(setq ff (open path "r"))
(setq a (read-line ff))
(while a
    (setq a (read-line ff))
    (setq name (substr a 1 (vl-string-position (ascii "镡") a)))
    (setq a (substr a (+ 3 (strlen name))))
    (setq ls (substr a 1 (vl-string-position (ascii "镡") a)))
    (setq a (substr a (+ 3 (strlen ls))))
    (setq ls (substr a 1 (vl-string-position (ascii "镡") a)))
    (setq x (substr a 1 (vl-string-position (ascii "镡") a)))
    (setq a (substr a (+ 3 (strlen x))))
    (setq Y (substr a 1 (vl-string-position (ascii "镡") a)))
    (setq a (substr a (+ 3 (strlen Y))))
    (setq z (substr a 1 (vl-string-position (ascii "镡") a)))
    (setq a (substr a (+ 3 (strlen Z))))
    (setq d (substr a 1 (vl-string-position (ascii "镡") a)))
    (setq x (atof x))
    (setq y (atof y))
    (setq z (atof z))
    (setq d (atof d))
    (setq p1 (list x y z))
    (setq r (/ d 2))
    (setq p2 (list (+ x r) y z))
    (command "_circle" p1 r)
    (command "_.text" "j" "ml" p2 d "0" name "" "")
)
(close ff)
(setvar "osmode" 15359)
)

xyp1964 发表于 2013-12-19 22:48:38

先贴个示意图

清风明月名字 发表于 2013-12-20 08:30:28

本帖最后由 清风明月名字 于 2013-12-20 08:32 编辑

上面就是数据,孔号镡孔性镡X坐标镡Y坐标镡Z坐标镡字高,即以X Y Z坐标画一个单行文本图元“孔号”

清风明月名字 发表于 2013-12-20 08:33:04

xyp1964 发表于 2013-12-19 22:48 static/image/common/back.gif
先贴个示意图

上面就是数据,孔号镡孔性镡X坐标镡Y坐标镡Z坐标镡字高,即以X Y Z坐标画一个单行文本图元“孔号”

xyp1964 发表于 2013-12-20 09:10:39

本帖最后由 xyp1964 于 2013-12-20 09:13 编辑


;; 需要e派工具箱(XCAD)的支持:http://yunpan.cn/QXQKsW9gAPmpF


(defun c:tt ()
(xyp-CMDLAsc0)
(setq        lst (xyp-txt2list "一条记录多个参数用镡分隔连接.txt")
        lst (cdr lst)
        lst (mapcar '(lambda (x) (xyp-Get-HzEngNum x 3)) lst)
)
(foreach a lst
    (setq pt (list (cadr a) (caddr a) (cadddr a))
          pt (mapcar 'distof pt)
          rr (* (distof (last a)) 0.25)
          bh (strcat "ZK" (car a))
          p1 (xyp-Pt2X pt rr)
          s1 (xyp-circle pt rr)
          s2 (xyp-Text 4 p1 bh)
    )
    (xyp-SubUpd s2 40 rr)
)
(xyp-CMDLA1)
)

清风明月名字 发表于 2013-12-20 14:52:44

我试了,是可以画图,但跑题了。因为ZK1也可以是ZK1A1 ZK1B1,这们种种,你的代码就会出错。等于说,必须是以“镡”来分割得到的列表,这一步是不能变通的。

xyp1964 发表于 2013-12-20 19:10:16

清风明月名字 发表于 2013-12-20 14:52 static/image/common/back.gif
我试了,是可以画图,但跑题了。因为ZK1也可以是ZK1A1 ZK1B1,这们种种,你的代码就会出错。等于说,必须是以 ...

只对"样品"负责!
页: [1]
查看完整版本: 求一个利用TXT的多参数批量画图元的LSP代码