JQUAILE 发表于 2022-7-5 23:20:23

将现有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))

如果有任何帮助,我们将不胜感激!

JQUAILE 发表于 2022-7-5 23:37:23

我看到了X和Y坐标的来源:
(rtos(car pa)2.6“,”
(实时操作系统(cadr pa)2 6)))
 
我尝试添加:
(实时操作系统(caddr pa)2 6)))
由于函数caddr应该从存储的点变量“pa”中提取Z值,但是我什么也得不到。很确定我在前端遗漏了一些东西,比如pa设置为只存储X,Y值而不是Z值?
 
再次感谢您的帮助。
提前谢谢。

Cad64 发表于 2022-7-5 23:56:13

请阅读代码发布指南:http://www.cadtutor.net/forum/showthread.php?9184-代码发布指南
 
我已将您的请求转移到Autolisp论坛。

ymg3 发表于 2022-7-6 00:16:51

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公司

JQUAILE 发表于 2022-7-6 00:21:18

ymg3,
非常感谢,它像一个魅力!
页: [1]
查看完整版本: 将现有Lisp修改为includ