明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: ljpnb

[求助]这个LISP程序如何编写?

  [复制链接]
发表于 2003-10-24 17:25:00 | 显示全部楼层
to ljpnb,关于捕捉点我是没有考虑,因为这只是实现个功能,并不是一个完整的程序。

龙龙仔的程序是使用CIRCLE的相切圆功能,不过只能画唯一圆,不过所有满足条件的圆都画,根据不同需要,可选
发表于 2003-10-24 18:30:00 | 显示全部楼层
本帖最后由 作者 于 2003-10-24 21:00:20 编辑

接受meflying版主教诲,由我带来的麻烦表示歉意!
言归正传:选择线段和点后,不输入半径大小,根据光标方位来确定相切圆的位置,而且这个相切圆的大小应随光标的移动而变化的,且应显示半径的数值,在设计图纸的时候有时这个半径是不确定的,要动态观察后才能确定大小。
发现一个问题:在下图中注明的位置不能显示相切圆

本帖子中包含更多资源

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

x
发表于 2003-10-24 19:51:00 | 显示全部楼层
不知你注明的位置是哪儿,图上很多东西, 看不出来
你的程序我再想想看
发表于 2003-10-25 21:19:00 | 显示全部楼层
上面的程序如果在输入半径的时候提示最小输入值就更好了。
发表于 2003-10-26 06:22:00 | 显示全部楼层
meflying发表于2003-10-24 19:51:00不知你注明的位置是哪儿,图上很多东西, 看不出来
你的程序我再想想看


你再看一下我注明得详细了
发表于 2003-10-26 06:25:00 | 显示全部楼层
gzy发表于2003-10-25 21:19:00上面的程序如果在输入半径的时候提示最小输入值就更好了。


如果输入最小半径不用程序也很好作的
发表于 2003-10-26 10:24:00 | 显示全部楼层
r0r发表于2003-10-26 6:22:00以下是引用meflying在2003-10-24 19:51:29的发言:
不知你注明的位置是哪儿,图上很多东西, 看不出来
  你的程序我再想想看


你再看一下我注明得详细了
[/quote]

就是因为太详细了,所以不知道哪个是,你画了一大堆东西,可一个文字说明都没有,我怎么知道哪点是你说的点?????
发表于 2003-10-26 10:57:00 | 显示全部楼层
meflying发表于2003-10-26 10:24:00以下是引用r0r在2003-10-26 6:22:11的发言:
以下是引用meflying在2003-10-24 19:51:29的发言:
  不知你注明的位置是哪儿,图上很多东西, 看不出来
   你的程序我再想想看


  你再看一下我注明得详细了
[/quote]

就是因为太详细了,...
[/quote]
我试着打开上传的文件,正常啊,里面有3处中文说明,目前用的是2002,存为R14兼容格式.
发表于 2003-10-26 11:51:00 | 显示全部楼层
程序没有问题,是你的图的问题,你的图的坐标系不是WCS,要先转换。
我已经说过了,这个程序只是个功能的实现,并不是一个完整的程序,所以一些细节错误处理等问题要自己去做。(注:这个程序原先是为ljpnb写的,他已经可以用了,所以我就没有继续完善)。
因为你对LISP程序不懂,如果你想为你写完整的程序,你最好去编程申请写出具体要求,要详细,这样如果不是很复杂,大家会为你写的。在这里,一般都是对问题的讨论,以及一些功能的实现,都是一些会LISP开发者的讨论,
你的这个程序我正在弄,就是要解呼吸里面那个方程,等方程解出来了,程序就好写了
发表于 2003-10-28 12:41:00 | 显示全部楼层
;;與Meflying的结合程序
(defun C:DRAWCIRCLE_LAI        (/         QQ1         QQ2         QQ3         QQ4
                         PTT         HOLDECHO         HOLDOSMODE
                         ENT         PT         R         ENTC         ENTL
                         PTS         RARC         PTARC         ENTSS
                        )

  (setq HOLDECHO (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (setq HOLDOSMODE (getvar "osmode"))
  (setvar "osmode" 0)
  (setq ENT (car (setq QQ1 (entsel "\n选择直线或圆弧..."))))
  (setq RARC (cdr (assoc 40 (entget ENT))))
  (setq PTARC (cdr (assoc 10 (entget ENT))))
  (setq PT (getpoint "\n输入通过点:"))
  (setq QQ2 (cadr QQ1))
  (setq QQ3 (entlast))
  ;;实时拉动、观察
  (while (= (car (setq PTT (grread 2 4))) 5)
    (if        (not (equal (entlast) QQ3))
      (progn
        (prompt
          (strcat "\r目前圆半径= "
                  (rtos (cdr (assoc 40 (entget (entlast)))) 2 4)
                  "                               "
          )
        )
        (command "_.erase" (entlast) "")
      )
    )
    (command "_.circle" "3p" PT "tan" QQ2 (cadr PTT))
  )
  (setq QQ4 (entlast))
  (if (not (equal QQ4 QQ3))
    (progn
      (setq R (getdist "\n输入圆半径: "))
      (entdel QQ4)
    )
  )
  (if (and (< (distance PT PTARC) RARC) (> R RARC))
    (exit)
  )
  (command "_.circle" PT R)
  (setq ENTC (entlast))
  (command "_.offset" R ENT PT "")
  (setq ENTL (entlast))
  (if (not (equal ENTC ENTL))
    (progn
      (setq PTS (GETINTERPOINT ENTC ENTL))
      (entdel ENTL)
      (setq ENTSS (DRAW PTS R ENT))
    )
  )
  (if (> R RARC)
    (progn
      (command "_.circle" PTARC (- R RARC))
      (setq ENTL (entlast))
      (setq PTS (GETINTERPOINT ENTC ENTL))
      (setq ENTSS (SSCAT ENTSS (DRAW PTS R ENT)))
      (entdel ENTL)
    )
  )
  (entdel ENTC)
  (while (= (car (setq PT (grread 2 5))) 5)
    (SSREDRAW ENTSS 3)
    (redraw (setq ENTC (GETCLOSEDENT ENTSS (cadr PT))) 4)
  )
  (ssdel ENTC ENTSS)
  (command "_.erase" ENTSS "")
  (setvar "osmode" HOLDOSMODE)
  (setvar "cmdecho" HOLDECHO)
  (princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 05:26 , Processed in 0.164914 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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