(rtos(距离
(rtos(*6.2(距离 谢谢,但这对我没什么帮助。我对lisp完全陌生,从来没有看过它们是如何工作的,也没有尝试过编写哪怕是最简单的例程。我应该把它放在哪里?谢谢 类似这样:
(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
非常感谢你的帮助李,我可以看到你会有点麻烦来帮助我,非常感谢。我尝试了上面的代码,但由于某种原因,它只做了与之前相同的事情,没有添加额外的单元格。知道为什么吗?无论如何,现在我们的公司已经发现我们可以做到这一点,我们想更进一步。如果你看到附件中的图片,我们最终想要做的是将三件事链接到excel电子表格。我们希望能够点击该行,并将其长度记录到excel中,但不仅如此,还要让它以某种方式意识到每一行都与一个气球和一个数字相关联。所以在excel电子表格中,我想看到:第100行-32.6m-4行,第101行-14.7m-4行,第102行-18.4m-5行。这可能吗?我无法将这3个项目设置为一个块(因为我们希望能够拉伸它等等),因此我不确定这是否太难(如果每次单击一行时我们不必输入数字,相反,代码会意识到它链接到了什么,这也会更容易)。任何帮助都将不胜感激。谢谢你堆
对不起,我没有把我之前的帖子说清楚——我只是偶然发现了最后一篇帖子,问如何将6.2因子结合起来,然后告诉你应该把它放在哪里。 啊,我真的不认为我的人要尝试Lisp程序,现在我得到了这个错误:;错误:输入列表格式不正确
我想我无论如何都可以推迟这一部分,看看我要求的最后一件事能否完成,这将为我们节省更多的时间。有人知道怎么做吗? 输入中的列表格式不正确通常意味着只留下了右括号 似乎仍然无法让它工作。。。不管怎样,我想我会等一下,直到我知道是否有办法将这三件事联系在一起(就像我之前的一篇帖子中那样)。有人知道怎么做吗?谢谢 我认为用户必须选择所有三个项目,而不仅仅是ACAD的行,才能识别如何处理它们。
使用ssget函数,一旦用户选择了项目,就可以很容易地处理数据,但我看不出ACAD如何识别哪一行属于哪一个圆圈和文本。。等等等等 所以你不认为在autocad中有一种方法可以是块,而实际上不是块?我本以为我可以创建一个按钮,当被选中时,它会要求一行的开始,行的结束,气泡位置和气泡数。然后,一旦完成,它会识别出这三个东西是同时输入的,所以它们都是连接在一起的。因此,在某种程度上,它就像一个块,但显然我不能使它成为一个块,因为我需要能够延长/缩短线等。否则,如果情况变得更糟,我可能只会选择所有3个项目(线,气泡数,和气泡外的数字)。因此,如果代码可能类似于:“select first line”:(单击第一行)“enter number”(输入100)“enter bubble number”(输入4);“选择第二行”(单击第二行)“输入气泡号”(键入4),让代码意识到如果第一个数字是100,下一个数字将是101,然后是102等等,因此在第一行之后,我只需单击该行,然后键入气泡号。有人知道怎么做吗?
页:
1
[2]