明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1558|回复: 9

[求助]为什么一加入循环就出错了呢?

[复制链接]
发表于 2005-6-19 04:01:00 | 显示全部楼层 |阅读模式
问题如题,当程序为一个数值时可以得到想要的结果 (setq NLen (strlen nums)
pn 0
Rpoints '()

) ;初始化数据
(setq m (nth pn Rpoint))
(if (=(nth 0 CLpoint) (nth 0 m))
(progn
(setq rpoint (list (list (atof( nth 1 m ))(atof (nth 2 m)))));提取坐标并将一组坐标放在一个表中
(setq Rpoints (append Rpoints rpoint));将点号对应的坐标按点号的顺序放在一个表中 )
) 但加入下面的循环时就出现了的错误提示"; 错误: 参数类型错误: consp nil",这是什么原因 (setq NLen (strlen nums)
j 0
pn 0
Rpoints '()
) ;初始化数据
(while (< j Nlen)
(while(< pn 6 )
(setq m (nth pn Rpoint))
(if ( = (nth j CLpoint)(nth 0 m))
(progn
(setq rpoint (list (list (atof( nth 1 m ))(atof (nth 2 m)))))
(setq Rpoints (append Rpoints rpoint));将点号对应的坐标按点号的顺序放在一个表中
)
)
(setq pn (+ pn 1))
)
(setq j (+ j 1))
) 具体程序和所需文件也同时附上

本帖子中包含更多资源

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

x
发表于 2005-6-19 09:07:00 | 显示全部楼层
可以试试这个“利用已有数据画线”的程序:
  1. (load "xyp_lib");加载通用函数
  2. ;|
  3. 如果已经下载xyp_lib并放到搜索路径下可以不再下载!
  4. 利用以下任何一种方式即可加载和运行通用函数内的所有子程序:
  5. 1.在acad.lsp中增加(load"xyp_lib")
  6. 2.在每个程序内增加(load"xyp_lib")
  7. 3.在command下,输入(load"xyp_lib")
  8. 4.在菜单.mnl中增加(load"xyp_lib")
  9. 通用函数下载地址:
  10. dispbbs.asp?boardID=3&ID=37554&page=1
  11. |; ;;;利用已有数据画线
  12. (defun c:test ()
  13.    (cmdla0)
  14.    (alert (strcat "数据格式 : "
  15.      "\n点位号 X坐标 Y坐标 Z坐标"
  16.      "\n点位号 X坐标 Y坐标 Z坐标"
  17.      "\n点位号 X坐标 Y坐标 Z坐标"
  18.      "\n..."
  19.      "\n..."
  20.      "\n..."
  21.     )
  22.    )
  23.    (prompt "\n稍候 : ")
  24.    (MKLA "建筑-红线" 1)
  25.    (while (not
  26.        (setq tn (getfiled "坐标数据文件(txt;dat;*)" "" "txt;dat;*" 2))
  27.    )
  28.    )
  29.    (setq  fle       (findfile tn)
  30.   pt-lst '()
  31.    )
  32.    (if (not fle)
  33.        (setq fle (getfiled "请选择坐标数据文件" "" "txt;dat;*" 8))
  34.    )
  35.    (if fle
  36.        (progn
  37.            (setq fn (open fle "r")
  38.          n   0
  39.            )
  40.            (command "pline")
  41.            (while (setq pt (read-line fn))
  42.   (setq pt         (cdr (read (strcat "(" pt ")")))
  43.              pt-lst (cons pt pt-lst)
  44.              n           (1+ n)
  45.   )
  46.   (command pt)
  47.   (princ ".")
  48.            )
  49.            (command "")
  50.            (close fn)
  51.            (jzhz);加载汉字
  52.            (MKLA "坐标" 3)
  53.            (mapcar '(lambda (#pt) (x_zb #pt)) pt-lst) ;标注顶点坐标
  54.            (princ "共输入和标注 ")
  55.            (princ n)
  56.            (princ " 个坐标点!")
  57.        )
  58.        (princ "\n未选择数据文件,退出")
  59.    )
  60.    (cmdla1)
  61. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2005-6-19 10:27:00 | 显示全部楼层
程序看过了,你画线的核心算法跟我的差不多


但是因为我的数据文件结构是"点号,X坐标,Y坐标,高程"


我的目的是通过数据点号来对应坐标,那个循环就是用来处理这部分的,对应上就把坐标作成一个表然后放在一起
发表于 2005-6-19 10:47:00 | 显示全部楼层
程序思路有点罗嗦! “坐标作成一个表”基本无用,读一行写一个点更方便。“点位号 X坐标 Y坐标 Z坐标”与“点号 X坐标 Y坐标 高程”没有区别。程序核心:
  1. (command "pline")
  2. (while (setq pt (read-line fn))
  3.    (setq  pt         (cdr (read (strcat "(" pt ")")))
  4.   pt-lst (cons pt pt-lst)
  5.   n           (1+ n)
  6.    )
  7.    (command pt)
  8.    (princ ".")
  9. )
  10. (command "")
 楼主| 发表于 2005-6-19 11:15:00 | 显示全部楼层
可我并不是每一个点都需要"pline"命令,只有输入点号所对应的坐标才需要,因而需要有个判断,来决定是否读入这个点的坐标,所以才将部分点号放在一个表与所有数据的点号进行比较.


你的程序应该是每个点都是线上的一个点,所以可以读一个画一个吧?


是不是这样?因为估计只看了几天lisp,所以比较菜
发表于 2005-6-19 11:25:00 | 显示全部楼层
不是线上的点放到数据文件中有何用?所以说“程序思路有点罗嗦!”


有时间用程序进行判断,不如直接修改数据文件更简洁、省事!
 楼主| 发表于 2005-6-19 11:42:00 | 显示全部楼层
我除了画线还有地物标注,面积图案填充等程序,为了画地图,数据文件是一个总体


都从其中提取
发表于 2005-6-19 12:36:00 | 显示全部楼层
这样做每次既要分析数据文件,还要改程序,很辛苦!呵呵……
 楼主| 发表于 2005-6-19 12:47:00 | 显示全部楼层
是呀!但老师就提了这种要求,没办法!


好,那我自己继续努力,希望可以有结果!谢谢你


对了,; 错误: 参数类型错误: consp nil,你知不知道是哪种类型的变量值被附为空了吗?这样改起来还有点头绪
发表于 2005-6-19 23:21:00 | 显示全部楼层
错误: 参数类型错误: consp nil表示


点对表错误!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 15:34 , Processed in 0.182681 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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