明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: ljpnb

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

  [复制链接]
发表于 2003-10-24 14:07:00 | 显示全部楼层
meflying发表于2003-10-24 13:28:001、做按钮,你看帮助文件,有详细介绍,本论坛也有很多的讨论了,
2、选择?根据什么条件选择呢?因为这些圆都满足已知条件,我不能无端将谁去掉


以纯使用者的角度说:
   1. 点此命令后应先确定通过的点,再选相切的线段;比如过圆外一点与此圆相切,条件成立的话最少二个圆,作图时总知道切点方位,你就点那个部位,不就只能生成一个圆了吗。
   2.点相切的线段时,光标接触的线段最好能变成虚线,以正确选择
   3.从没做过按钮,能提个头吗?(要编程免说了,对此0.1点都不懂)
发表于 2003-10-24 14:16:00 | 显示全部楼层
你如果不想自学,那最好参加一些培训,这里不可能一点一点地教你,这里是解决你在学习过程中遇到的问题,是解决问题,而不是教学。
按钮是菜单,你看相应的帮助,我说了很多次了,帮助中有详细的介绍,你怎么就不去看?
发表于 2003-10-24 14:25:00 | 显示全部楼层
本帖最后由 作者 于 2003-10-24 14:51:01 编辑

meflying发表于2003-10-24 14:16:00你如果不想自学,那最好参加一些培训,这里不可能一点一点地教你,这里是解决你在学习过程中遇到的问题,是解决问题,而不是教学。
按钮是菜单,你看相应的帮助,我说了很多次了,帮助中有详


关键是这二点!
以纯使用者的角度说:
   1. 点此命令后应[I]先确定通过的点,再选相切的线段[/I];比如过圆外一点与此圆相切,条件成立的话最少二个圆,作图时总知道切点方位,你就点那个部位(此时如果[U]虚线显示生成的圆[/U]更好了),不就只能生成一个圆了吗。
   2.点相切的线段时,[U]光标接触的线段最好能变成虚线[/U],以正确选择

我E文绝对不好,只认识字母,不认识单字,我何尝不想自己搞定呢!奈何先天不足,心有余而力不足,有时真的请见谅!
发表于 2003-10-24 14:49:00 | 显示全部楼层
你的已知条件不够,无法完成
发表于 2003-10-24 15:47:00 | 显示全部楼层
这是我在其它CAD软件中相关功能的操作步骤:以过圆外一点与此圆相切为例
1.点“切”按钮
2.选“点”,再选圆上任意点,在二点间生成一条虚线
3.选内切还是外切
4.光标移向虚线,待光标变形后按住鼠标左键并拖动,虚线变成一个动态的相切圆,你可即时拉动、观察,并弹出一个小窗口,即时显示半径的大小,松开鼠标左键,你可在小窗口中填写要求的半径大小,点确定
5.完成
是否可以从这个例子中说明问题?
 楼主| 发表于 2003-10-24 16:28:00 | 显示全部楼层
meflying发表于2003-10-23 8:27:00哦,是这样,你必须先加载(vl-load-com),将这句放到程序的最前面,因为我的系统会自行加载这个,所以我每次都不记得这句,再试试



谢谢,加了(vl-load-com)后程序是可以出来结果,不过有一点,如果捕捉功能开着的时候,程序会出错,如果在选择“输入通过点”之后,关掉捕捉功能,那么可以画出最终的那个圆,不过它还会叫你画一个圆!不知道为什么?
发表于 2003-10-24 16:56:00 | 显示全部楼层
即时拉动、观察

(defun C:TEST1 (/ QQ QQ1 ENT1 PT)
  (setvar "osmode" 0)
  (setq QQ (getpoint "选点: "))
  (setvar "osmode" 256)
  (setq QQ1 (getpoint QQ "选切点: "))
  (setvar "osmode" 0)
  (setq ENT1 (entlast))
  (while (= (car (setq PT (grread 2 4))) 5)
    (if        (not (equal (entlast) ENT1))
      (entdel (entlast))
    )
    (command "_.circle" "3p" QQ "tan" QQ1 (cadr PT))
  )
  (princ)
)
发表于 2003-10-24 17:17:00 | 显示全部楼层
龙龙仔发表于2003-10-24 16:56:00即时拉动、观察

(defun C:TEST1 (/ QQ QQ1 ENT1 PT)
   (setvar "osmode" 0)
   (setq QQ (getpoint "选点: "))
   (setvar "osmode" 256)
   (setq QQ


龙龙仔版主:与meflying程序结合,参照35楼的方法,能给个完整的程序吗?
发表于 2003-10-24 17:20:00 | 显示全部楼层
嘩!!!
這個最棒.  好程序..想不到可以如此改進..



-------------------------------------------------
我愛CAD     多多學習.  多多指教.
发表于 2003-10-24 17:21:00 | 显示全部楼层
r0r发表于2003-10-24 15:47:00这是我在其它CAD软件中相关功能的操作步骤:以过圆外一点与此圆相切为例
1.点“切”按钮
2.选“点”,再选圆上任意点,在二点间生成一条虚线
3.选内切还是外切
4.光标移向虚线,待光标



你说话怎么不一次说完?到现在才把具体要求说出来,弹出窗口同时可移动鼠标画图不是VLISP能做到的,
你这样的提问会让人累死的,希望你在提问是能够注意一下方法,论坛留言里有篇帖子,关于提问的,应该好好读读。(注:你应该考虑到不是每个人每个软件都会用过,所以不是所有的过程大家都会明白的)
下面这个,你凑合用吧
  1. (defun sscat(ss1 ss2 / i ename)
  2.   (setq i 0)
  3.   (cond
  4.     ((not ss1) ss2)
  5.     ((not ss2) ss1)
  6.     (t
  7.      (while (< i (sslength ss2))
  8.        (setq ename (ssname ss2 i))
  9.        (ssadd ename ss1)
  10.        (setq i (1+ i))
  11.      )
  12.      ss1)
  13.   )
  14. )

  15. (defun ssredraw (ss n / i)
  16.   (setq i 0)
  17.   (repeat (sslength ss)
  18.     (redraw (ssname ss i) n)
  19.     (setq i (1+ i))
  20.   )
  21. )

  22. (defun GetClosedEnt(ss pt / i sname dist ents)
  23.   (setq i 0)
  24.   (repeat (sslength ss)
  25.     (setq sname (ssname ss i))
  26.     (setq dist (distance pt (cdr (assoc 10 (entget sname)))))
  27.     (setq ents (append ents (list (list dist sname))))
  28.     (setq i (1+ i))
  29.   )
  30.   (setq ents (vl-sort ents '(lambda (e1 e2) (< (car e1) (car e2)))))
  31.   (cadar ents)
  32. )
  33. (defun GetInterPoint (ent1 ent2 / ax_ent_1 ax_ent_2 intpoints points i)
  34.   (setq ax_ent_1 (vlax-ename->vla-object ent1)
  35.         ax_ent_2 (vlax-ename->vla-object ent2)
  36.   )
  37.   (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone))
  38.   (setq intpoints (vlax-variant-value intpoints))
  39.   (setq i 0)
  40.   (if (> (vlax-safearray-get-u-bound intpoints 1) 0)
  41.     (repeat (/ (+ 1
  42.               (- (vlax-safearray-get-u-bound intpoints 1)
  43.                  (vlax-safearray-get-l-bound intpoints 1)
  44.               )
  45.            )
  46.            3
  47.         )
  48.       (setq points (append points (list (list
  49.         (vlax-safearray-get-element intpoints i)
  50.         (vlax-safearray-get-element intpoints (+ i 1))
  51.         (vlax-safearray-get-element intpoints (+ i 2))
  52.       )))
  53.       )
  54.       (setq i (+ 3 i))
  55.     )
  56.   )
  57.   points
  58. )
  59. (defun Draw(pts r ent / pt entc i)
  60.   (setq i 0)
  61.   (setq entss (ssadd))
  62.   (repeat (length pts)
  63.     (setq pt (nth i pts))
  64.     (command "_.circle" pt r)
  65.     (setq entc (entlast))
  66.     (ssadd entc entss)
  67.     (if (= (length (GetInterpoint entc ent)) 0) (entdel entc))
  68.     (setq i (1+ i))
  69.   )
  70.   entss
  71. )

  72. (defun c:DrawCircle( / ent pt r entc entl pts rArc ptArc entss)
  73.   (setq ent (car (entsel "\n选择直线或圆弧...")))
  74.   (setq rArc (cdr (assoc 40 (entget ent))))
  75.   (setq ptArc (cdr (assoc 10 (entget ent))))
  76.   (setq pt (getpoint "\n输入通过点:"))
  77.   (setq r (getreal "\n输入半径:"))
  78.   (if (and (< (distance pt ptArc) rArc) (> r rArc)) (exit))
  79.   (setvar "cmdecho" 0)
  80.   (command "_.circle" pt r)
  81.   (setq entc (entlast))
  82.   (command "_.offset" r ent pt "")
  83.   (setq entl (entlast))
  84.   (if (not (equal entc entl))
  85.     (progn
  86.       (setq pts (GetInterpoint entc entl))
  87.       (entdel entl)
  88.       (setq entss (Draw pts r ent))
  89.     )
  90.   )
  91.   (if (> r rArc)
  92.     (progn
  93.       (command "_.circle" ptArc (- r rArc))
  94.       (setq entl (entlast))
  95.       (setq pts (GetInterpoint entc entl))
  96.       (setq entss (sscat entss (Draw pts r ent)))
  97.       (entdel entl)
  98.     )
  99.   )
  100.   (entdel entc)
  101.   (while (= (car (setq pt (grread 2 5))) 5)
  102.     (ssredraw entss 3)
  103.     (redraw (setq entc (GetClosedEnt entss (cadr pt))) 4)
  104.   )
  105.   (ssdel entc entss)
  106.   (command "_.erase" entss "")
  107.   (princ)
  108. )

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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