将现有Lisp修改为includ
大家好,修改现有Lisp以包括Z值?
我有一个现有的Lisp(通过Rocket软件)输出一个块
属性值和X、Y值。
我想修改它以添加Z值,并将输出文件格式从*更改为。cdf格式为*。CSV格式。
现有代码如下:
; Pilout - write the X and Y coordinates of all inserts of a block to a file.
; Copyright 1997 by Rocket software
; The other kind.
; Subroutine Frat - returns the value of the first filled attribute found,
; otherwise "".Takes one argument, the insertion ename.
(DEFUN FRAT (enam / str)
(while (and (null str)
(/= "SEQEND"
(cdr (assoc 0 (setq entt (entget (setq enam (entnext enam))))))))
(setq vall (cdr (assoc 1 entt)))
(while (= (substr vall 1 1) " ") (setq vall (substr vall 2)))
(if (/= vall "") (setq str vall)))
(if str str ""))
; Frat end.
(DEFUN C:PILOUT (/ num bl enampt entt ss filnam fn rad len so pa datstr)
(setvar "cmdecho" 0)
(setq num 0)
(setq bl (getstring "Block to use or <Return> to select: "))
(if (and (= bl "")
(setq enampt (entsel "Select a block: ")))
(progn
(setq entt (entget (car enampt)))
(setq bl (cdr (assoc 2 entt)))
(if bl (prompt bl))))
(if bl (setq ss (ssget "X" (list (cons 2 bl)))))
(if ss
(progn
(setq filnam (getfiled "Data File" "Piles.cdf" "" 1))
(if filnam (setq fn (open filnam "w")))
(setq rad (/ (getvar "viewsize") 25))
(setq len (strcat "/" (itoa (sslength ss))))
(while (setq so (ssname ss num))
(setq entt (entget so))
(setq num (1+ num))
(grtext -2 (strcat (itoa num) len))
(setq pa (cdr (assoc 10 entt)))
; Translate point data to current ucs.
(setq pa (trans pa 0 1))
(grdraw (polar pa (/ pi 4) rad)
(polar pa (* 1.25 pi) rad) 7)
(grdraw (polar pa (* pi 0.75) rad)
(polar pa (* pi 1.75) rad) 7)
(setq datstr (strcat (frat so) ","
(rtos (car pa) 2 6) ","
(rtos (cadr pa) 2 6)))
(write-line datstr fn))
(if fn (close fn)))
(if bl
(write-line "\nCan't find any such block. ")
(write-line "\nSome type of error...")))
(if ss (write-line (strcat "\nLines written to file: " (itoa num))))
(princ))
如果有任何帮助,我们将不胜感激! 我看到了X和Y坐标的来源:
(rtos(car pa)2.6“,”
(实时操作系统(cadr pa)2 6)))
我尝试添加:
(实时操作系统(caddr pa)2 6)))
由于函数caddr应该从存储的点变量“pa”中提取Z值,但是我什么也得不到。很确定我在前端遗漏了一些东西,比如pa设置为只存储X,Y值而不是Z值?
再次感谢您的帮助。
提前谢谢。 请阅读代码发布指南:http://www.cadtutor.net/forum/showthread.php?9184-代码发布指南
我已将您的请求转移到Autolisp论坛。 JQUAILE,
试着这样做:
(setq datstr (strcat (frat so) ","
(rtos (car pa) 2 6) ","
(rtos (cadrpa) 2 6) ","
(rtos (caddr pa) 2 6)
)
)
要更改为csv文件,请在此处修改:
(setq filnam (getfiled "Data File" "Piles.csv" "" 1))
我没有测试,所以试试看
ymg公司 ymg3,
非常感谢,它像一个魅力!
页:
[1]