找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1227|回复: 12

[求助] [求助]:一个自编的标注坐标点的lsp程序,请大家帮我找错误。先谢了。

[复制链接]
发表于 2003-1-13 17:53:03 | 显示全部楼层 |阅读模式

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

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

×
问题是在程序设置osmode后,直线没有按制定的点画线,有点莫名其妙。顺便问一句,Vlisp中怎样设置才能看到程序一行一行的执行,设置了自动执行后,我只看到工具拦上的"(|)"动来动去,文本编辑区没反映。

该程序的功能是在ACAD2002中文版中标注施工图总图中坐标点。该程序如下:
  1. <normalfont>
  2. (defun c:zbbz
  3.        (/ os pt1 pt2 pt1_1 pt1_2 pt1_3 pt1_4 pt2_1 textpt1 textpt2 ang chksty str)
  4.   (setvar "cmdecho" 0)
  5.   (setq os (getvar "osmode"))
  6.           (if (< os 16384)
  7.              (setq os (+ os 16384))
  8.          )
  9.   (setvar "osmode" 1)
  10.   (setq pt1 (getpoint "\n标注点:"))
  11.   (setq pt1_1 (polar pt1 (* pi 0.25) 1000))
  12.   (setq pt1_2 (polar pt1 (* pi 0.75) 1000))
  13.   (setq pt1_3 (polar pt1 (* pi 1.25) 1000))
  14.   (setq pt1_4 (polar pt1 (* pi 1.75) 1000))
  15.   (command "line" pt1_1 pt1_3 "")
  16.   (command "line" pt1_2 pt1_4 "")
  17.   (setq pt2 (getpoint pt1 "\n给出标注位置:"))
  18.   (command "line" pt1 pt2 "")
  19.   (setq        ang (angle pt1 pt2))
  20.   (if (or (and (>= ang 0) (<= ang (* pi 0.5)))
  21.           (and (> ang (* pi 1.5)) (< ang (* pi 2)))
  22.       )

  23.     (progn (setq pt2_1 (polar pt2 0 13000))
  24.            (setq textpt1 (polar pt2 (/ pi 2) 500))
  25.            (setq textpt2 (polar pt2 (/ pi -2) 2150))
  26.     ))
  27.   (if (and (> ang (/ pi 2)) (<= ang (* pi 1.5)))
  28.           
  29.     (progn (setq pt2_1 (polar pt2 0 -13000))
  30.            (setq textpt1 (polar pt2_1 (/ pi 2) 500))
  31.            (setq textpt2 (polar pt2_1 (/ pi -2) 2150))
  32.     )
  33.   )
  34.   (command "line" pt2 pt2_1 "")
  35.   (setq str "zz")
  36.   (setq chksty (tblsearch "style" str))
  37.   (if (= chksty nil)
  38.     (command "style" str "gbenor,gbcbig" "" "" "" "" "" "")
  39.   )
  40.   (command "text"
  41.            textpt1
  42.            1750
  43.            0
  44.            (strcat "X=" (rtos (cadr pt1)))
  45.   )
  46.   (command "text"
  47.            textpt2
  48.            1750
  49.            0
  50.            (strcat "Y=" (rtos (car pt1)))
  51.   )
  52.   (setvar "osmode" os)
  53.   (princ)
  54. )
  55. </normalfont>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-1-13 18:06:27 | 显示全部楼层

Re: [求助]:一个自编的标注坐标点的lsp程序,请大家帮我找错误。先谢了。

最初由 wee 发布
[B]问题是在程序设置osmode后,直线没有按制定的点画线,有点莫名其妙。顺便问一句,Vlisp中怎样设置才能看到程序一行一行的执行,设置了自动执行后,我只看到工具拦上的"(|)"动来动去,文本编辑区没反映。

该程序的... [/B]


先说说,你想要求怎么画,而程序是怎么画的吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-13 19:14:13 | 显示全部楼层
我想原因就是你在以开始用了(setvar “osmode” 1),将捕捉模式设为端点模式的缘故,虽然这有助于你定点,但你应在程序开始自动画图前将它关闭,因这时已不需要捕捉了。
就想这样:

  1. (defun c:zbbz
  2.               (/       os      pt1     pt2     pt1_1   pt1_2   pt1_3
  3.                pt1_4   pt2_1   textpt1 textpt2 ang     chksty  str
  4.               )
  5.   (setvar "cmdecho" 0)
  6.   (setq os (getvar "osmode"))
  7.   (if (< os 16384)
  8.     (setq os (+ os 16384))
  9.   )
  10.   (setvar "osmode" 1)
  11.   (setq pt1 (getpoint "\n标注点:"))
  12.   (setq pt1_1 (polar pt1 (* pi 0.25) 1000))
  13.   (setq pt1_2 (polar pt1 (* pi 0.75) 1000))
  14.   (setq pt1_3 (polar pt1 (* pi 1.25) 1000))
  15.   (setq pt1_4 (polar pt1 (* pi 1.75) 1000))
  16.   (setvar "osmode" os)                                ;在这里关闭捕捉模式
  17.   (command "line" pt1_1 pt1_3 "")
  18.   (command "line" pt1_2 pt1_4 "")
  19.   (setq pt2 (getpoint pt1 "\n给出标注位置:"))
  20.   (command "line" pt1 pt2 "")
  21.   (setq ang (angle pt1 pt2))
  22.   (if (or (and (>= ang 0) (<= ang (* pi 0.5)))
  23.           (and (> ang (* pi 1.5)) (< ang (* pi 2)))
  24.       )

  25.     (progn (setq pt2_1 (polar pt2 0 13000))
  26.            (setq textpt1 (polar pt2 (/ pi 2) 500))
  27.            (setq textpt2 (polar pt2 (/ pi -2) 2150))
  28.     )
  29.   )
  30.   (if (and (> ang (/ pi 2)) (<= ang (* pi 1.5)))

  31.     (progn (setq pt2_1 (polar pt2 0 -13000))
  32.            (setq textpt1 (polar pt2_1 (/ pi 2) 500))
  33.            (setq textpt2 (polar pt2_1 (/ pi -2) 2150))
  34.     )
  35.   )
  36.   (command "line" pt2 pt2_1 "")
  37.   (setq str "zz")
  38.   (setq chksty (tblsearch "style" str))
  39.   (if (= chksty nil)
  40.     (command "style" str "gbenor,gbcbig" "" "" "" "" "" "")
  41.   )
  42.   (command "text"
  43.            textpt1
  44.            1750
  45.            0
  46.            (strcat "X=" (rtos (cadr pt1)))
  47.   )
  48.   (command "text"
  49.            textpt2
  50.            1750
  51.            0
  52.            (strcat "Y=" (rtos (car pt1)))
  53.   )
  54.   (setvar "osmode" os)
  55.   (princ)
  56. )

这是一个漫好的程序
最好能自己设置坐标原点,这样程序更通用。
在使用过程中我发现一个问题,如图:
就是计算时的正负值有误。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-1-13 20:06:43 | 显示全部楼层
看看帮助,取值反了。

  1.   [FONT=courier new]
  2. car 返回表的第一个元素
  3. cadr 返回表的第二个元素
  4.   [/FONT]
复制代码

在你的程序中是这样子用的:


  1.   [FONT=courier new]
  2. (command "text"
  3.            textpt1
  4.            1750
  5.            0
  6.            (strcat "X=" (rtos (cadr pt1)))
  7.   )
  8.   (command "text"
  9.            textpt2
  10.            1750
  11.            0
  12.            (strcat "Y=" (rtos (car pt1)))
  13.   )
  14.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-13 20:35:05 | 显示全部楼层
真是这样的,其实那另两个也是错的,我只注意到了符号反了。现在好了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-13 20:58:56 | 显示全部楼层
对不起,我顺便说一句,建筑施工图里的总图上标注的坐标点(X,Y),X指的是南北方向,y指东西方向,所以和AutoCAD里是反的。
关于负值问题,我们的建筑施工图总图上的坐标点在“米”一级都是上万的,不会有负值出现,所以我没有发现错误。会不会是rtos函数的原因?
我会根据你们的提示修改一下程序。
我刚才想到,在用户UCS里标世界坐标系的坐标的方法(trans  pt 1 0),可以在总图上建筑平面是个斜的时候,转到用户UCS时建筑平面是个水平竖直时,标原UCS(世界坐标系)的坐标,lisp真是太方便了。
作这个小程序的原因是天正5和理正都不能满足我在工作中的需要。我还想完善画图比例,设置标注小数点的位数等等,争取是个较通用的程序。在等我完善后,还作个dcl对话框拿出来,请大家猛批一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-13 21:26:22 | 显示全部楼层
我也画过总图,关于不会出现负值我看不一定,这要看你将坐标原点定在哪里,如果将它设在图的左下方,就全是正的,反之就全是负的,在建筑总图上要将建筑物定位,先要找一个参照点,一般是已建的永久建筑物,他的位置可不一定在图的左下角噢。
你的说法在城市坐标系上到是合适的,他是不会有负值的,至少我没见过。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

发表于 2003-1-13 23:22:01 | 显示全部楼层
  1. [font=courier new]
  2. 第6 贴
  3. 对不起,我顺便说一句,建筑施工图里的总图上标注的坐标点(X,Y),X指的是南北方向,y指东西方向,所以和AutoCAD里是反的。
  4. 关于负值问题,我们的建筑施工图总图上的坐标点在“米”一级都是上万的,不会有负值出现,所以我没有发现错误。会不会是rtos函数的原因?
  5. 我会根据你们的提示修改一下程序。
  6. 我刚才想到,在用户UCS里标世界坐标系的坐标的方法(trans pt 1 0),可以在总图上建筑平面是个斜的时候,转到用户UCS时建筑平面是个水平竖直时,标原UCS(世界坐标系)的坐标,lisp真是太方便了。
  7. 作这个小程序的原因是天正5和理正都不能满足我在工作中的需要。我还想完善画图比例,设置标注小数点的位数等等,争取是个较通用的程序。在等我完善后,还作个dcl对话框拿出来,请大家猛批一下。
  8. [/font]
复制代码


我想你说的天正和理正不好用是因为他们不能修改吧,试用一下下面的吧,命令是zxet
另外标坐标点命令是zxbzb,可以选择保留的小数点位数,比例用字高来调整,一般1:500的
总图珂采用900高
http://www.xdcad.net/forum/showthread.php?s=&threadid=24873
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-1-14 00:00:45 | 显示全部楼层
所以我用自己写的。

  1. <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="650" id="AutoNumber1" height="498">
  2.   <tr>
  3.     <td width="100%" height="489">
  4.       <iframe name="I1" width="100%" height="100%" src="http://www.xdcad.net/forum/showthread.php?postid=112449#post112449">
  5. 浏览器不支持嵌入式框架或配置为不显示嵌入式框架
  6.       </iframe>
  7.     </td>
  8.   </tr>
  9. </table>
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-1-14 09:33:13 | 显示全部楼层
ALisp使用VL编辑器调试最常用的几个按钮:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-14 18:30:42 | 显示全部楼层
最初由 zhynt 发布
[B]我也画过总图,关于不会出现负值我看不一定,这要看你将坐标原点定在哪里,如果将它设在图的左下方,就全是正的,反之就全是负的,在建筑总图上要将建筑物定位,先要找一个参照点,一般是已建的永久建筑物,他的位置... [/B]


你说的对,我是做地铁车站设计的遇到的问题,那是在城市坐标系下。出现负值也不要紧,只是我把X,Y对调,是负的就是负的。你说的对,与原点有关,那就先设置UCS吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-30 18:04:19 | 显示全部楼层
不知道怎么改比例,能在1;1000中用,请帮忙
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-15 10:55 , Processed in 0.410948 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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