明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2247|回复: 15

lisp程序修改问题

  [复制链接]
发表于 2012-3-14 09:44:16 | 显示全部楼层 |阅读模式
现在有一个lisp程序,功能是:在cad中输入aa,提示“输入数值”,输入数字(比如说100),则在本图中插入事先放在support文件夹里的图形bb.dwg,并把图形放大100/38倍。
我现在想把“输入数值”改为用鼠标选择两点,则插入bb.dwg并放大 "两点间距离/38"倍。。请问这个程序该怎么修改啊?

  (defun c:aa(/ num file)
  (setvar "cmdecho" 0)
  (if (setq num (getreal "\n输入数值:"))
    (if(setq file(findfile "bb.dwg"))
      (command "-insert" file '(0 0 0) (/ num 38) (/ num 38) "")
      )
    )
  (setvar "cmdecho" 1)
  (princ)
  )
发表于 2012-3-14 10:47:58 | 显示全部楼层

(if (setq num (getreal "\n输入数值:"))
改为用鼠标选择两点
(if (setq num (getDist "\n用鼠标选择两点: "))
 楼主| 发表于 2012-3-14 12:23:14 | 显示全部楼层
Andyhon 发表于 2012-3-14 10:47
(if (setq num (getreal "\n输入数值:"))
改为用鼠标选择两点
(if (setq num (getDist "\n用鼠标选择两 ...

太感谢了~哈哈,搜了好几天都没找到答案,让您一下解决了:)以后多向您学习
 楼主| 发表于 2012-3-14 12:51:26 | 显示全部楼层
Andyhon 发表于 2012-3-14 10:47
(if (setq num (getreal "\n输入数值:"))
改为用鼠标选择两点
(if (setq num (getDist "\n用鼠标选择两 ...

长老~我想再请教您一个问题,呵呵~~我是初学lisp,觉得功能太强大了
这个问题我在其他网站求助过,一直没有解决,希望您有空帮我看下哈。。
就是我想在这个程序的基础上再加点东西:
用鼠标选择两点距离后得到“距离1”,然后再用鼠标选择两点得到“距离2”。。
如果“距离2”/("距离1"/38)<10,则插入事先放在ee文件夹里的图b1.dwg,并放大"距离1"/38倍;
如果“距离2”/("距离1"/38)>10,则插入事先放在ee文件夹里的图b2.dwg,并放大"距离1"/38倍;
如果“距离2”/("距离1"/38)>20,则插入事先放在ee文件夹里的图b3.dwg,并放大"距离1"/38倍;

拜托您了:)真不知道怎么感谢您
发表于 2012-3-14 13:21:43 | 显示全部楼层
(setq dist1 (getDist "\n用鼠标选择两点: "))         ; 用鼠标选择两点距离后得到“距离1”
(setq dist2 (getDist "\n用鼠标选择两点: "))         ; 然后再用鼠标选择两点得到“距离2”。。
(cond
  ((setq d2/1 (/ dist2 dist1) sxl (* d2/1 38) $ nil))
  
  ((> sxl 20) (setq dwg '放在ee文件夹里的图b3.dwg))
  ((> sxl 10) (setq dwg '放在ee文件夹里的图b2.dwg))
  ((< sxl 10) (setq dwg '放在ee文件夹里的图b1.dwg))
)
 楼主| 发表于 2012-3-14 14:22:04 | 显示全部楼层
Andyhon 发表于 2012-3-14 13:21
(setq dist1 (getDist "\n用鼠标选择两点: "))         ; 用鼠标选择两点距离后得到“距离1”
(setq dist ...

我改了下,但没成功~您给看看错那了啊

  (defun c:aa(/ num file)
  (setvar "cmdecho" 0)
  (if (setq dist1 (getDist "\n用鼠标选择两点: "))
      (setq dist2 (getDist "\n用鼠标选择两点: "))
       (cond
        ((setq d2/1 (/ dist2 dist1) sxl (* d2/1 38) $ nil))  
        ((> sxl 20) (setq dwg 'b3.dwg))
        ((> sxl 10) (setq dwg 'b2.dwg))
        ((< sxl 10) (setq dwg 'b1.dwg))         
       )
     (progn
      (command "-insert" file pause (/ num 38) (/ num 38) "")
      (command "_explode"  (entlast))
     )
  )
  (setvar "cmdecho" 1)
  (princ)
  )
 楼主| 发表于 2012-3-14 14:35:51 | 显示全部楼层
Andyhon 发表于 2012-3-14 13:21
(setq dist1 (getDist "\n用鼠标选择两点: "))         ; 用鼠标选择两点距离后得到“距离1”
(setq dist ...

我又想到一点,呵呵——用鼠标选择两点,Y方向的增量为dist1,X方向的增量为dist2。
这样只需要用鼠标选择一次就可以了。。。这个怎么实现啊
发表于 2012-3-14 14:43:25 | 显示全部楼层
本帖最后由 Andyhon 于 2012-3-14 14:44 编辑


  1. (defun c:aa (/ num file)
  2.   (setvar "cmdecho" 0)
  3.   (if (and (setq dist1 (getDist "\n用鼠标选择两点: "))
  4.            (setq dist2 (getDist "\n用鼠标选择两点: "))
  5.       )
  6.     (progn
  7.       (cond
  8.         ((setq d2/1 (/ dist2 dist1)
  9.                sxl  (* d2/1 38)
  10.                $    nil
  11.          )
  12.         )
  13.         ((> sxl 20) (setq dwg 'b3.dwg))      ; 'b3.dwg 得如 "D:\\ee\\B3.dwg"
  14.         ;; ((> sxl 20) (setq dwg "D:\\ee\\B3.dwg"))  ; 下同
  15.         ((> sxl 10) (setq dwg 'b2.dwg))
  16.         ((< sxl 10) (setq dwg 'b1.dwg))
  17.       )
  18.       (command "-insert" dwg pause (/ dist1 38) (/ Dist1 38) "")
  19.       (command "_explode" (entlast))
  20.     )
  21.   )
  22.   (setvar "cmdecho" 1)
  23.   (princ)
  24. )
 楼主| 发表于 2012-3-14 15:15:52 | 显示全部楼层
Andyhon 发表于 2012-3-14 14:43

没运行出来啊。。呵呵~
发表于 2012-3-14 15:43:52 | 显示全部楼层
没运行出来啊...
您得描述您调试的背景及错误讯息
要不就得去老猫那儿上课...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-25 03:11 , Processed in 0.194037 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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