找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1847|回复: 16

[求助] [求助]:为什么这段代码和实际结果不相符

  [复制链接]
发表于 2005-11-23 22:22:03 | 显示全部楼层 |阅读模式

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

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

×
(defun c:pbox()
(setq pa (getpoint "x,y:"))
(setq ww (getreal "with:"))
(setq hh (getreal "high:"))
(setq pb(polar pa 0 ww))
(setq pc(polar pb(/ pi 2) hh))
(setq pd (polar pc pi ww))
(command "pline" pa pb pc pd "c")

(setq mp1 (polar pa 0 (/ ww 2)))

(setq mp2 (polar pb (/ pi 2) (/ hh 2)))

(setq mp3 (polar pd 0 (/ ww 2)))

(setq mp4 (polar pa (/ pi 2) (/ hh 2)))
(command "line" mp1 mp3 "")
(command "line" mp2 mp4 "")
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-11-23 22:37:13 | 显示全部楼层
没关闭捕捉?
可用(command "line" "non" pt1 ...)这样的格式输入点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-23 22:51:55 | 显示全部楼层
谢谢你了

(command "line" "non" mp1 mp3 "") 也不行
关闭捕捉就可以了,难道没有其他的解决方法吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-23 23:30:17 | 显示全部楼层

Re: [求助]:为什么这段代码和实际结果不相符

最初由 huaheroys 发布
[B](defun c:pbox()
(setq pa (getpoint "x,y:"))
(setq ww (getreal "with:"))
(setq hh (getreal "high:"))
(setq pb(polar pa 0 ww))
(setq pc(polar pb(/ pi 2) hh))
(setq pd (polar pc pi ww))
(command "... [/B]

复杂化了!
  1. [FONT=courier new](defun c:pbox (/ pa ww hh pb)
  2.   (setvar "osmode" 0)
  3.   (setq        pa (getpoint "\n左下角点 : ")
  4.         ww (getreal "\n宽 : ")
  5.         hh (getreal "\n高 : ")
  6.         pb (list (+ (car pa) ww) (+ (cadr pa) hh))
  7.   )
  8.   (command "rectang" pa pb)
  9.   (command "line" pa pb "")
  10.   (princ)
  11. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-24 08:53:05 | 显示全部楼层
最初由 huaheroys 发布
[B]谢谢你了

(command "line" "non" mp1 mp3 "") 也不行
关闭捕捉就可以了,难道没有其他的解决方法吗? [/B]


command函数中每当给点的时候,前面都要加一个“non”才行。
如:
(command "line" "non" mp1 "non" mp3 "")
就行了。
用"non"的方法虽然看似笨一点,但程序的友好性好,比如在程序进行当中改变捕捉设定、或中断运行的情况下,都不影响捕捉设定。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-24 19:39:39 | 显示全部楼层
多谢!多谢!我对大侠的感激之情犹如滔滔江水连绵不绝,又恰似黄河泛滥一发不可收拾!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-24 20:07:23 | 显示全部楼层
最初由 841594 发布
[B]

command函数中每当给点的时候,前面都要加一个“no... [/B]

并没有下载“结果”文件,怎知其错误所在?!
这么用“药”可能……呵呵……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-24 20:19:11 | 显示全部楼层
command函数中每当给点的时候,前面都要加一个“non”才行。
如:
(command "line" "non" mp1 "non" mp3 "")
就行了。
用"non"的方法虽然看似笨一点,但程序的友好性好,比如在程序进行当中改变捕捉设定、或中断运行的情况下,都不影响捕捉设定。

我试过,行得通啊!
我明白了,楼上的大侠可能没有仔细看我的程序码,所以有所误解,我的结果文件是错的,我要的是我程序码的效果。不过,同样谢谢大侠关心,对了你上次帮我写的

点与线的属性互相传递问题(cass)续

(load "xyp_lib.vlx")
;|加载通用函数(可在签名栏直接下载)
如果已经下载xyp_lib并放到搜索路径下可以不再下载!
利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
★1·在acad.lsp中增加(load"xyp_lib")
■2·在每个程序内增加(load"xyp_lib")
■3·在command下,输入(load"xyp_lib")
■4·在菜单.mnl中增加(load"xyp_lib")
■5·将xyp_lib.vlx文件直接拽到cad屏幕
★通用函数下载地址:
http://www.xdcad.net/forum/attachme...&postid=1606661
|;

;;;点与线的属性互相传递问题
(defun c:test ()
  (CMDLA0)
  (setq        ss (ssget "X" '((0 . "INSERT") (8 . "GCD")))
        i  -1
  )
  (while (setq s1 (ssname ss (setq i (1+ i))))
    (setq pt1 (xyp-get-Dxf 10 s1)
          dy  (caddr pt1)
          pt2 (list (- (car pt1) 1) (- (cadr pt1) 1) 0)
          pt3 (list (+ (car pt1) 1) (+ (cadr pt1) 1) 0)
    )
    (setq ss1 (ssget "c" pt2 pt3)
          j   -1
    )
    (command "select" ss1 "r" s1 "")
    (setq ss1 (ssget "P"))
    (if        (and (setq ss1 (ssget "P"))
             (= (sslength ss1) 2)
        )
      (progn
        (while (setq s2 (ssname ss1 (setq j (1+ j))))
          (setq        etype (xyp-get-Dxf 0 s2)
                la    (xyp-get-Dxf 8 s2)
          )
          (if (= etype "TEXT")
            (setq s-text s2)
            (progn
              (setq s-o        s2
                    la1        la
              )
            )
          )
        )
        (command "chprop" s1 s-text "" "la" la1 "")
        (command "move"
                 s-o
                 s-text
                 ""
                 (list 0 0 0)
                 (list 0 0 dy)
        )
      )
      (princ"此处存在物体重叠!")
    )
  )
  (CMDLA1)
)


对样例完全行得通,可实际应用时,却有点问题,能麻烦你再帮我一下吗?

给的实例与最终结果完全不同,当然无法实现!比如先要画个圆,而实际却要画个椭圆,程序怎能实现?by xyp1964[/COLOR]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-24 21:45:14 | 显示全部楼层
最初由 xyp1964 发布
[B]
并没有下载“结果”文件,怎知其错误所在?!
这么用“药”可能……呵呵…… [/B]


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

使用道具 举报

发表于 2005-11-24 22:31:35 | 显示全部楼层
内部函数多了,结果就变成简单的串联。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-24 22:44:23 | 显示全部楼层
最初由 huaheroys 发布
[B]command函数中每当给点的时候,前面都要加一个“non”才行。
如:
(command "line" "non" mp1 "non" mp3 "")
就行了。
用"non"的方法虽然看似笨一点,但程序的友好性好,比如在程序进行当中改变捕捉设定、或中?.. [/B]

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

使用道具 举报

发表于 2005-11-24 23:04:44 | 显示全部楼层
“command函数中每当给点的时候,前面都要加一个“non”才行。”?!
一个不用“non”的例子:阿基米德螺旋线

  1. [FONT=courier new](load "xyp_lib.vlx")
  2. ;;;当期版本:2005年11月23日
  3. ;|加载通用函数(可在签名栏直接下载)
  4. 如果已经下载xyp_lib并放到搜索路径下可以不再下载!
  5. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  6. ★1·在acad.lsp中增加(load"xyp_lib")
  7. ■2·在每个程序内增加(load"xyp_lib")
  8. ■3·在command下,输入(load"xyp_lib")
  9. ■4·在菜单.mnl中增加(load"xyp_lib")
  10. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  11. [COLOR=red] ★通用函数下载地址:[/COLOR]
  12. [url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  13. |;

  14. (defun c:qx43 ()
  15.   (CMDLA0)
  16.   (princ
  17.     "\n阿基米德螺旋线 : r = at ; 步宽0.01PI ;
  18.     \n建议缺省值 : a=1"
  19.   )
  20.   (setq        pt1 (upoint 1 "" "\n指定一个假设坐标原点" pt1 nil)
  21.         a   (ureal 7 "" "\n常数a" a)
  22.         no1 (ureal 7 "" "\n周期" no1)
  23.         rad 0
  24.   )
  25.   (mkla "阿基米德螺旋线" 3)
  26.   (setvar "osmode" 0)
  27.   (command "ucs" "n" pt1)
  28.   (command "pline")
  29.   (while (<= rad (* 2 PI no1))
  30.     (setq r  (* a rad)
  31.           pt (polar (list 0 0) rad r)
  32.     )
  33.     (command pt)
  34.     (setq rad (+ rad (* PI 0.01)))
  35.   )
  36.   (command "")
  37.   (CMDLA1)
  38. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-25 00:24:33 | 显示全部楼层
最初由 xyp1964 发布
[B]“command函数中每当给点的时候,前面都要加一个“non”才行。”?!
一个不用“non”的例子:阿基米德螺旋线

[CODE](load "xyp_lib.vlx")
;;;当期版本:2005年11月23日
;|加载通用函?.. [/B]


其实问题很简单,如果用程序直接生成实体(entmake,vla-add*),是否设置捕捉都不会有问题.
而在调用command或vl-cmdf并请求输入点的时候,要进入交互状态,如果之前没有将osmode设为0,就有可能捕捉到其他实体,从而改变运行结果.
所以,请求输入点的时候,先输入"non",从而临时改变捕捉方式(不捕捉),是可以消除这种弊端的;需要说明的是,non和在命令行下一样,只对紧跟着的一次取点有效.如果点不是很多,倒是不失为一种办法,反正command已经用了,就不必在乎是在命令中用non还是在命令外部用osmode了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-25 13:17:18 | 显示全部楼层
最初由 xyp1964 发布
[B]“command函数中每当给点的时候,前面都要加一个“non”才行。”?!
一个不用“non”的例子:阿基米德螺旋线

[CODE](load "xyp_lib.vlx")
;;;当期版本:2005年11月23日
;|加载通用函?.. [/B]

斑竹看文字请结合上下文,切不可断章取义。楼主发这个帖子是寻求帮助,我提个解决的办法,帮忙而已,顺带说一句心得体会,有心者听之或许有点帮助,不理解也无大碍,至于为什么这么说,有机会可以再专题讨论,对于楼主的出发点而言,就太没必要在这里较真了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-25 13:38:42 | 显示全部楼层
最初由 841594 发布
[B][QUOTE]最初由 xyp1964 发布
[B]“command函数中每当给点的时候,前面都要加一个“non”才行。”?!
一个不用“non”的例子:阿基米德螺旋线

[CODE](load "xyp_lib.vlx")
;;;?.. [/B]

只针对是否用不用“non”而已,如果是觉得较真,讨论到此结束!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 23:47 , Processed in 0.194004 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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