找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1089|回复: 14

[求助] [求助]:lisp新手上路

[复制链接]
发表于 2004-10-21 19:53:30 | 显示全部楼层 |阅读模式

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

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

×
1 一个lisp程序,想实现输入第一、第二点,连线,

   再输入第三点,如果响应是一个点的话则连接第二和第三点,

  如果是回车的话,则转入其他操作

( setq  p1 (getpoint "enter p1:"))
(setq  p2 (getpoint "enter p2:"))

(setq p3 (getpoint "enter p3:"))    想在这里加一个判断,请指点
  或有其他好的方法就更好了

2 发现自己写的 lisp 程序用 R2004 自带的 visual lisp 运行是可以的,但是用

  R14或2004 的 application load 加载后,运行完总跳出一些莫名其妙的命令

  不知道在程序末尾还要加上什么东东才会正常退出,

  我是加了 (princ) ,看来还是不够,help

3 另外再问一下,想作个工具条来响应写的lisp程序,不知道应该看什么书?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-10-22 09:38:30 | 显示全部楼层
楼主同志,我也是刚刚学习lisp,你那里有没有学习lsp的一些资料什么的吗,大家分享一下,共同进步。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-23 22:50:06 | 显示全部楼层
okok  上 down了些简单的资料, 其他的暂时没有,书店里也没看到什么好书 sign
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-24 00:23:07 | 显示全部楼层
[php](defun c:test ()
  (setq p1 (getpoint "\n 起点 : "))
  (setq p2 (getpoint p1 "\n 下一点 : "))
  (command "line" p1 p2)
  (while p2
    (setq p2 (getpoint p2 "\n 下一点<退出> : "))
    (command p2)
  )
  (command)
  (princ)
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-24 14:03:32 | 显示全部楼层
xyp 兄,谢谢先,

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

使用道具 举报

已领礼包: 11304个

财富等级: 富甲天下

发表于 2004-10-25 09:22:48 | 显示全部楼层
1、(command):结束LINE命令;
2、(princ):使程序结束时不返回nil。
3、其中:
(while p2
    (setq p2 (getpoint p2 "\n 下一点<退出> : "))
    (command p2)
  )
应改为:
(while (setq p2 (getpoint p2 "\n 下一点<退出> : "))
    (command p2)
  )
才正确。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-25 20:37:30 | 显示全部楼层
zxq兄,下面是偶编的一个小东东,还是有些问题
程序的目的是先画引出线,然后再第一点画一根类似标注的短斜线
运行时发现一个很怪的问题,在一个不大的屏幕范围里运行时,没有问题
但先  画一个10000长的线,再 zoom , all,然后再这个屏幕范围内执行下面的lisp程序,
相当于画的引出线很长,结果画出的短斜线成了一个点,但是list的性质还是线,调试中发现
整个过程 短斜线 的两端点坐标 pa,pb 的计算好像没错,接着的语句
(command "line" pa pb "")  应该也不会有问题呀? 不知道是哪一步出错了

(defun C:ds (/ p1 p2 pa pb ObliqueLength)
  (setq ObliqueLength 200.0);;;设置短斜线的长度               
;;;画引出线
  (setq p1 (getpoint "Specify first point:"))
  (setq p2 (getpoint p1 "\nSpecify next point:"))
  (command "line" p1 p2)
  (while (setq p2 (getpoint p2 "Specify next point or <exit>:"))
    (command p2)
  )                                        ;while
  (command)

;;;画短斜线
  (setq pa (polar p1 (/ pi 4) (/ ObliqueLength 2.0)))
  (setq pb (polar p1 (* pi 1.25) (/ ObliqueLength 2.0)))
  (command "line" pa pb "")     ;;;???????????????????????
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11304个

财富等级: 富甲天下

发表于 2004-10-26 10:09:25 | 显示全部楼层
程序没错。只是短斜线与引出线相比太短了。建议按图纸的比例画短斜线。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-26 23:19:29 | 显示全部楼层
按图纸的比例画短斜线的话,那lisp程序的局限性就太大了吧,
我定的斜线长度是 1:100 的图,一般的操作都是再模型空间里的呀,
另外,在cad中操作一些命令的时候并没有这些问题呀,比如dim标注,
是不是我的lisp中变量的精度不够呀,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2004-10-28 21:12:42 | 显示全部楼层
怎么没人回答小弟的问题呀,困扰我已经好几天了,
斑竹在那里呀,好想念你呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11304个

财富等级: 富甲天下

发表于 2004-10-29 14:35:10 | 显示全部楼层
程序改成下面的如何?

(defun C:ds (/ p1 p2 pa pb ObliqueLength)
;;;画引出线
(setq p1 (getpoint "Specify first point:"))
(setq p2 (getpoint p1 "\nSpecify next point:"))
(command "line" p1 p2)
(setq ds1 (distance p1 p2))
(setq ObliqueLength (if (< ds1 2000) 200.0 (/ ds1 10)));;;设置短斜线的长度
(while (setq p2 (getpoint p2 "Specify next point or :"))
(command p2)
) ;while
(command)

;;;画短斜线
(setq pa (polar p1 (/ pi 4) (/ ObliqueLength 2.0)))
(setq pb (polar p1 (* pi 1.25) (/ ObliqueLength 2.0)))
(command "line" pa pb "") ;;;???????????????????????
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-30 10:21:47 | 显示全部楼层
谢谢先,但我觉得并不是一个很好的解决办法,我将短斜线的长度改为根据用户的要求输入

(setq ObliqueLength (getreal "输入斜线长度<200>:"))
(if (null ObliquelLength)
    (setq ObliqueLength 200.0)
) ;;; end if

如果这样的话,zxq兄的方法就不是很好了,
希望论坛能提供比较好的解决方法,我觉得自己编些其他的小程序也会遇到同样的问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-30 10:43:33 | 显示全部楼层
[php]
;试试下面的:
;短斜线的长度根据用户的要求输入,其值作为下次输入的缺省值。除短斜线外,其余线均改为pline线成为整体。
(defun C:test (/ p1 p2 pa pb ObliqueLength)
  (setq        NO2 (ureal 1 "" "\n短斜线的长度" no2)
        p1  (getpoint "\n起点 : ")
        p2  (getpoint p1 "\n下一点 : ")
  )
  (setvar"plinewid"0)
  (command "pline" p1 p2)
  (while (setq p2 (getpoint p2 "\n下一点 : "))
    (command p2)
  )
  (command)
  (setq        pa (polar p1 (/ pi 4) (/ no2 2.0))
        pb (polar p1 (* pi 1.25) (/ no2 2.0))
  )
  (command "line" pa pb "")
  (princ)
)
(defun ureal (bit kwd msg def / inp)
  (if def
    (setq msg (strcat "\n" msg "<" (rtos def 2) ">: ")
          bit (* 2 (fix (/ bit 2)))
    )
    (setq msg (strcat "\n" msg ": "))
  )
  (initget bit kwd)
  (setq inp (getreal msg))
  (if inp
    inp
    def
  )
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-31 09:20:57 | 显示全部楼层
xyp兄,多谢了,偶的小东东又可以升级一下了,呵呵
但是,我在7楼的问题还是存在呀?
劳驾多费心了,:P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 13:48 , Processed in 0.331769 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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