BIGAL 发表于 2022-7-6 16:56:52

在发送到excel之前,只需将行数乘以所需数量即可
 
(rtos(距离
(rtos(*6.2(距离

gazzalp 发表于 2022-7-6 17:01:36

谢谢,但这对我没什么帮助。我对lisp完全陌生,从来没有看过它们是如何工作的,也没有尝试过编写哪怕是最简单的例程。我应该把它放在哪里?谢谢

Lee Mac 发表于 2022-7-6 17:06:00

类似这样:
 

(defun c:LST (/ name file ss ssi enl ln ar ci c2s)

;----------------------------
   
   (defun ln (l f) ;To record a LINE l in the file f
   (write-line
       (strcat "LINE,"
         (c2s (cdr (assoc 10 l)))
         (c2s (cdr (assoc 11 l)))
          (rtos (* 6.2
                (distance
                (cdr (assoc 10 l))
                (cdr (assoc 11 l))
                ) ;_end distance
             ) ;_end *
         ) ;_end rtos
       ) ;_end strcat
       f
   ) ;_end write-line
   ) ;_end defun
   
;----------------------------
   
   (defun ar (l f / c r u1 u2) ;Record an ARC
   (setq c   (cdr (assoc 10 l)) ;Center
         r   (cdr (assoc 40 l)) ;Radius
         u1 (cdr (assoc 50 l)) ;Start...
         u2 (cdr (assoc 51 l)) ;...and End angle
   ) ;_end setq
   (write-line
       (strcat "ARC,"
         (c2s (polar c u1 r))
         (c2s (polar c u2 r))
         (rtos (* r (abs (- u2 u1))))
         ","
         (c2s c)
         (rtos r)
       ) ;_end strcat
       f
   ) ;_end write-line
   ) ;_end defun
   
;-----------------------------
   
   (defun ci (l f / r) ;To record a CIRCLE
   (setq r (cdr (assoc 40 l))) ;Radius
   (write-line
       (strcat "CIRCLE,,,,,,,"
         (rtos (* 2 PI r))
         ","
         (c2s (cdr (assoc 10 l)))
         (rtos (cdr (assoc 40 l)))
       ) ;_end strcat
       f
   ) ;_end write-line
   ) ;_end defun
   
;----------------------------
   
   (defun c2s (x) ;Used to transform Coords in String
   (strcat (rtos (car x)) "," (rtos (cadr x)) "," (rtos (caddr x)) ",")
   ) ;_end defun

;----------------------------

   (setq name (getvar "dwgname"))
   (if    (= "." (substr name (- (strlen name) 3) 1))
   (setq name (substr name 1 (- (strlen name) 4)))
   ) ;_end if
   (setq file (open (getfiled "Output file..." name "CSV" 1) "w")
   ss   (ssget)
   ssi-1
   ) ;_end setq
   (write-line
   "Typ,Start X,Start Y,Start Z,End X,End Y,EndZ,Length,cen X,cen Y,cenZ,Radius"
   file
   ) ;_end write-line
   (if    ss
   (progn
       (repeat (sslength ss)
       (setq enl (entget (ssname ss (setq ssi (1+ ssi)))))
       (cond
         ((= "LINE" (cdr (assoc 0 enl))) (ln enl file))
         ((= "ARC" (cdr (assoc 0 enl))) (ar enl file))
         ((= "CIRCLE" (cdr (assoc 0 enl))) (ci enl file))
       ) ;_end cond
       ) ;_end repeat
   ) ;_end progn
   ) ;end IF SS
   (close file)
   (princ)
) ;_end defun

gazzalp 发表于 2022-7-6 17:08:17

非常感谢你的帮助李,我可以看到你会有点麻烦来帮助我,非常感谢。我尝试了上面的代码,但由于某种原因,它只做了与之前相同的事情,没有添加额外的单元格。知道为什么吗?无论如何,现在我们的公司已经发现我们可以做到这一点,我们想更进一步。如果你看到附件中的图片,我们最终想要做的是将三件事链接到excel电子表格。我们希望能够点击该行,并将其长度记录到excel中,但不仅如此,还要让它以某种方式意识到每一行都与一个气球和一个数字相关联。所以在excel电子表格中,我想看到:第100行-32.6m-4行,第101行-14.7m-4行,第102行-18.4m-5行。这可能吗?我无法将这3个项目设置为一个块(因为我们希望能够拉伸它等等),因此我不确定这是否太难(如果每次单击一行时我们不必输入数字,相反,代码会意识到它链接到了什么,这也会更容易)。任何帮助都将不胜感激。谢谢你堆

Lee Mac 发表于 2022-7-6 17:11:26

对不起,我没有把我之前的帖子说清楚——我只是偶然发现了最后一篇帖子,问如何将6.2因子结合起来,然后告诉你应该把它放在哪里。

gazzalp 发表于 2022-7-6 17:14:08

啊,我真的不认为我的人要尝试Lisp程序,现在我得到了这个错误:;错误:输入列表格式不正确
 
我想我无论如何都可以推迟这一部分,看看我要求的最后一件事能否完成,这将为我们节省更多的时间。有人知道怎么做吗?

Lee Mac 发表于 2022-7-6 17:18:39

输入中的列表格式不正确通常意味着只留下了右括号

gazzalp 发表于 2022-7-6 17:18:58

似乎仍然无法让它工作。。。不管怎样,我想我会等一下,直到我知道是否有办法将这三件事联系在一起(就像我之前的一篇帖子中那样)。有人知道怎么做吗?谢谢

Lee Mac 发表于 2022-7-6 17:21:57

我认为用户必须选择所有三个项目,而不仅仅是ACAD的行,才能识别如何处理它们。
 
使用ssget函数,一旦用户选择了项目,就可以很容易地处理数据,但我看不出ACAD如何识别哪一行属于哪一个圆圈和文本。。等等等等

gazzalp 发表于 2022-7-6 17:27:09

所以你不认为在autocad中有一种方法可以是块,而实际上不是块?我本以为我可以创建一个按钮,当被选中时,它会要求一行的开始,行的结束,气泡位置和气泡数。然后,一旦完成,它会识别出这三个东西是同时输入的,所以它们都是连接在一起的。因此,在某种程度上,它就像一个块,但显然我不能使它成为一个块,因为我需要能够延长/缩短线等。否则,如果情况变得更糟,我可能只会选择所有3个项目(线,气泡数,和气泡外的数字)。因此,如果代码可能类似于:“select first line”:(单击第一行)“enter number”(输入100)“enter bubble number”(输入4);“选择第二行”(单击第二行)“输入气泡号”(键入4),让代码意识到如果第一个数字是100,下一个数字将是101,然后是102等等,因此在第一行之后,我只需单击该行,然后键入气泡号。有人知道怎么做吗?
页: 1 [2]
查看完整版本: 自动距离