明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1977|回复: 6

请问斑竹:已知一组点,如何将这组点用PLINE画成一条闭合的线?

[复制链接]
发表于 2003-11-23 12:39:00 | 显示全部楼层 |阅读模式
如:
P1 '(0,0,0)  P2 '(0,100,0)   P3 '(100,100,0)……Pn '(X,Y,Z)
点的个数是用户输入的值NUM决定的,点的值是在程序运行过程中获取的
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2003-11-23 13:55:00 | 显示全部楼层
因為你的程序獲取的點是一個點一個變量只好直接(command "pline" p1 p2 p3..... pn '(X Y Z) "c")來處理. 如何全部的點是個點表則可以用循環的方式, 如
(DEFUN C:TEST()
  (SETQ P1 '((0 0) (1 1) (2 1)(3 4)))
  (setq n 1)
  (command "pline" (nth 0 p1))
  (repeat (- (length p1) 1)
    (command (nth n p1))
    (setq n (1+ n)))
  (command "c"))
发表于 2003-11-23 16:14:00 | 显示全部楼层
编程过程中是循环的东西就应该循环使用变量,而不应该不断增加变量个数。
如果你的无法循环,那每次取得点是画直线就可以了
 楼主| 发表于 2003-11-23 19:14:00 | 显示全部楼层
原来还能这么用,太好了,谢谢二位斑竹!
在程序运行过程中我得到的就是一个点表
我还不会在循环过程中动态地设置变量呢
meflying斑竹怎么样像在VB中设置数组那样在LISP中设置一组变量?
发表于 2003-11-23 19:43:00 | 显示全部楼层
先纠正一下,在LISP中,点表是指(0 . "LINE")这样类型的表,你的意思应该是由点组成的列表吧。
如果你得到点表仅仅是为了画线,那就没有这个必要了,你如BDYCAD所说,

(command "_.pline")
...
(command "");如果想闭合就用(command "c")
中间的...就是你得到点并加入列表的那部分程序,其中将点加入列表那一步不要,改为
(command pt)
另,LISP中没有树组,只有列表。
如果还不明白,把你的程序贴一段上来,我给你改改
发表于 2003-11-24 12:11:00 | 显示全部楼层
BDYCAD发表于2003-11-23 13:55:00因為你的程序獲取的點是一個點一個變量只好直接(command "pline" p1 p2 p3..... pn '(X Y Z) "c")來處理. 如何全部的點是個點表則可以用循環的方式, 如
(DEFUN C:TE



我感觉这个办法不是很好,是不是忘记了用apply函数?

用apply的方法如下:
(defun c:test ( / plist)
  (setq plist '((0 0) (1 1) (2 1)(3 4)))
  (apply 'command (append '("pline") plist '("c")))
)


这样也许更清楚一点:
(command "_.pline")
(apply 'command plist)
(command "_close")
发表于 2003-11-24 12:27:00 | 显示全部楼层
謝謝指點
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-27 06:30 , Processed in 0.184117 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表