找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1804|回复: 4

[求助] [求助]:lisp中如何从文件中调出数据点作图

[复制链接]
发表于 2002-6-14 11:42:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一个数据文件存放点的编号和坐标值,另一个文件存放线两端点的编号,如何用lisp语言把这两个文件中的数据调出,然后画出想要的图?我知道有read-char和read-line命令,但是它们只能读取字符串,帮不上忙。还有,lisp中没有数组,我该用什么数据结构来保存这些读取出来的数据呢?请指点迷津,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6530个

财富等级: 富甲天下

发表于 2002-6-14 12:05:54 | 显示全部楼层
就是用read-line函数,读出的字符串需要转换一下,可以用
(read (strcat "(" 字符串 ")"))转化为表。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-6-14 12:24:57 | 显示全部楼层
供参考(你没有提供那2份文件???)
(defun C:PT (/ FPT FPT1)
(if (findfile "PT.TXT")
(setq FPT (open (findfile "PT.TXT") "r"))
)
(command "_.PLINE")
(while (setq FPT1 (read-line FPT))
(command FPT1)
)
(command)
(close FPT)
(princ)
)

;;;以下为PT.TXT(所需点资料)
;;;-34.78,11.25
;;;8.56,-2.32
;;;8.73,-0.65
;;;9.73,-0.95
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-6-14 20:00:01 | 显示全部楼层
5.6  在 AutoLISP 中定义和使用多维数组
“表”是 AutoLISP 中最常用的数据库纪录类型,也是它最善于操作的、特有的数据类型。利用“表的生成和处理”有关函数,可以定义通常概念中的多维数组,可利用“表的查询和检索”的有关函数,可对这个表进行方便快速的数据提取。以下的模拟程序参见Tools.LSP:
  (Defun C:DataIO ()
       (PrinC "\n三维数组建立...")
       (SetQ l nil
                x0 (GetInt "\nX 维数: ")
                y0 (GetInt "\nY 维数: ")
                z0 (GetInt "\nZ 维数: ")
                 x 1 y 1 z 1 vlx '() vly '() vlz '()
       )
       (Repeat z0
               (Repeat y0
                        (Repeat x0
                                     (PrinC "\n(") (PrinC z)(PrinC y)(PrinC x)(PrinC ")")
                                    (SetQ vlx (Cons (GetReal " 元素数据: ") vlx)
                                                 x (1+ x)
                                     )
                        )
                        (SetQ vly (Cons (Reverse vlx) vly)
                                     y (1+ y)
                                  vlx '() x 1
                        )
                )
                (SetQ vlz (Cons (Reverse vly) vlz)
                             z (1+ z)
                           vly '() y 1
                    )
         )
         (SetQ l (Reverse vlz))
         (While (Progn (InitGet 7 "Exit Find  ")
                                (SetQ k (GetKWord "\nExit(结束)/<Find(提取)>: "))
                                (/= k "Exit")
                     )
                     (SetQ x (1- (GetInt (StrCat "\nX维序号(" (IToA x0) "): ")))
                                y (1- (GetInt (StrCat "\nY维序号(" (IToA y0) "): ")))
                                z (1- (GetInt (StrCat "\nZ维序号(" (IToA z0) "): ")))
                     )
                     (PrinC (Nth x (Nth y (Nth z l))))
         )
         (PrinC)
  )      
C:DataIO用于建立一个三维数组,之后提取和显示该数组中指定的数据。数组保存在变量L之中。
值得注意的是,这样的数组要占用堆区空间,不可以过于巨大,但是 AutoLISP 数组处理功能是相当强的,笔者用一台128M内存的PII 333主机,制作了生成一百万个元素的数组(每个元素是三个实数和一个索引组成):
'(1259 123.456 17.377 98706.964)
定义数组,解释运行耗时约20.7秒,编译运行耗时15.9秒。而引用任一元素仅是瞬间的事。这种数组创建和引用的能力,将能顺利解决解析程序中大规模矩阵运算的基础设施问题,也是AutoLISP具有特色的功能:简单、快速、容易控制、数据量大。

t  点评
用表类型数据结构组建数组,是一种典型的用法。“表”是 AutoLISP 中一种万能的数据结构容器,发挥你的想象力,利用表构建专业程序中的各种应用数据结构,就会体验到 AutoLISP 程序设计独特的优点,甚至在外挂工程数据文件中,也应当使用表结构。

以上摘自《Visual LISP for AutoCAD2000程序设计——从学会到用好》第五章
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-6-15 09:24:25 | 显示全部楼层
我的库中有从文件中读数据并变成表的子程序,你可以用
在我发表的工具中有!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-5 10:09 , Processed in 0.406253 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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