明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3236|回复: 11

[提问] 自己写的lisp,有疑问请教大侠们完善

[复制链接]
发表于 2014-4-30 17:38:11 | 显示全部楼层 |阅读模式
根据自己工作需要写了个lisp,不是很熟有两点希望高人指点:1,前面的两个变量怎么可以保存上次命令输入的数值;2,点取p4点怎么可以重复点选,用while能行不,望指点,谢谢。

(defun c:ttg()
  (setq         n1      (getint "\n请输入1值:")
         n2      (getdist "\n请输入2值:")
         p1         (getpoint "\n请输入第一点:")
         p2         (getpoint p1 "\n请输入第二点:"))
  (setq p1x (car p1)
        p1y (cadr p1)
        p2x (car p2)
        p2y (cadr p2))
  (setq p3 (list p2x (+ p2y n1)))
  (command "line" p1 p2 "")

  (setq  p4         (getpoint p1 "\n请输入下一点:"))

  (setq  p4x (car p4)
         p4y (cadr p4)
         p5  (list p4x (+ p4y 500))
         p6  (inters p1 p3 p4 p5 [onseg])
         p6x (car p6)
         p6y (cadr p6)
         p7  (list p6x (- p6y n2)))
  (command "line" p1 p6 p7 "")
  (setvar "osmode" 16383)
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-4-30 17:49:35 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-4-30 18:48 编辑

(defun c:ttg()
  (if (null n1)(setq          n1      (getint "\n请输入1值:")));;如果n1有值就不输入,下同
  (if (null n2)(setq          n2      (getint "\n请输入2值:")))
;;不清楚你说的记住是指直接用已有的值还是输入的时候提示它,如果是前者,上边这样就行了,如果是后者得再改下,把下边两句打开,把上边两句注解掉
;;(setq p1 n1 n1(getint(strcat"\n请输入1值["(itoa p1)"]"))) (if (null n1)(setq n1 p1))
;;(setq p1 n2 n2(getint(strcat"\n请输入2值["(itoa p1)"]"))) (if (null n2)(setq n2 p1))
   (setq          p1         (getpoint "\n请输入第一点:")
          p2         (getpoint p1 "\n请输入第二点:"))
   (setq p1x (car p1)
         p1y (cadr p1)
         p2x (car p2)
         p2y (cadr p2))
   (setq p3 (list p2x (+ p2y n1)))
(setvar "osmode" 16384);;此句你原来没有,但在最后把捕捉全开,这就导致第一次运行以后捕捉是全开着的,可能会对line命令产生影响
   (command "line" p1 p2 "")
(while
   (setq  p4         (getpoint p1 "\n请输入下一点(右键结束):"));以p4非空作为循环条件

   (setq  p4x (car p4)
          p4y (cadr p4)
          p5  (list p4x (+ p4y 500))
          p6  (inters p1 p3 p4 p5 [onseg])
          p6x (car p6)
          p6y (cadr p6)
          p7  (list p6x (- p6y n2)))
   (command "line" p1 p6 p7 "")
);while end
   (setvar "osmode" 16383)
)
 楼主| 发表于 2014-4-30 18:19:20 | 显示全部楼层
llsheng_73 发表于 2014-4-30 17:49
(defun c:ttg()
  (if (null n1)(setq          n1      (getint "\n请输入1值:")));;如果n1有值就不输入, ...

谢谢大侠回复,我试了下出错啊。。。
就是好像cad偏移命令那样按空格或者右键就默认上次的数值,重复点选p4点命令好像也不行呢
发表于 2014-4-30 18:46:45 | 显示全部楼层
start4444 发表于 2014-4-30 18:19
谢谢大侠回复,我试了下出错啊。。。
就是好像cad偏移命令那样按空格或者右键就默认上次的数值,重复点选 ...

不好意思,原来把while写成whille了,改过后试下
发表于 2014-4-30 18:58:47 | 显示全部楼层
llsheng_73 发表于 2014-4-30 17:49
(defun c:ttg()
  (if (null n1)(setq          n1      (getint "\n请输入1值:")));;如果n1有值就不输入, ...

大师。。要想写一个检查很多圆是不是同一条线上(X Y)
来点思路??
发表于 2014-4-30 19:00:53 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-4-30 19:08 编辑

晕,搞错了,可以进群里边去问,那里活人要多些
发表于 2014-4-30 19:07:55 | 显示全部楼层
ysq101 发表于 2014-4-30 18:58
大师。。要想写一个检查很多圆是不是同一条线上(X Y)
来点思路??

计算圆心到线的距离来看它是不是在线上
如果线是存在的,可以用VL函数(vlax-curve-getClosestPointTo curve-obj givenPnt [extend])得到最近点的坐标,再计算最近点到圆心的距离
如果线不存在,只知道线的方程的话那就得用纯数学的方法去计算圆心坐标是否满足直线(或者曲线方程),当方程比较复杂的时候要求解析几何比较历害才写得出来,当然也可以把线画出来,判断完了后再删除它
发表于 2014-4-30 20:52:14 | 显示全部楼层
论坛里不是有点是否在线上的判断吗?
发表于 2014-4-30 21:15:01 | 显示全部楼层
(defun c:ttg(/ n11 n22)  ;增加局部变量作为中间变量
  (if (setq n11 (getint "\n请输入1值:"))  ;n1为全局变量
      (setq n1 n11))                             ;如果有输入,则按n11输入值,否则不另外赋
  (if (setq n21 (getint "\n请输入2值:"))  ;n2为全局变量
      (setq n2 n21))                            ;如果有输入,则按n21输入值,否则不另外赋

         
      (setq p1 (getpoint "\n请输入第一点:")
            p2 (getpoint p1 "\n请输入第二点:"))
  (setq p1x (car p1)
        p1y (cadr p1)
        p2x (car p2)
        p2y (cadr p2))
  (setq p3 (list p2x (+ p2y n1)))
  (command "line" p1 p2 "")

  (setq  p4 (getpoint p1 "\n请输入下一点:"))

  (setq  p4x (car p4)
         p4y (cadr p4)
         p5  (list p4x (+ p4y 500))
         p6  (inters p1 p3 p4 p5 [onseg])
         p6x (car p6)
         p6y (cadr p6)
         p7  (list p6x (- p6y n2)))
  (command "line" p1 p6 p7 "")
  (setvar "osmode" 16383)
)

不知道这样改行不行?
发表于 2014-4-30 21:20:50 | 显示全部楼层
LLSHENG的输入提示不错,哈哈,又学会一招
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 20:14 , Processed in 0.200472 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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