明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5113|回复: 9

autolisp 里面怎么调用画圆命令给一个三角形画内切圆啊?

[复制链接]
发表于 2008-11-12 12:20:00 | 显示全部楼层 |阅读模式
 
autolisp 里面怎么调用画圆命令给一个三角形画内切圆啊?在绘图>>圆>>里可以看到"相切,相切,相切(A)",但怎么调用这个呢?
我用的是AutoCAD2006.
试过(command "circle" "A" aa bb cc ),但是不行.请高手指点一下!谢谢!
发表于 2008-11-12 17:05:00 | 显示全部楼层

是不是这样:

(DEFUN C:TTT ()
  (COMMAND "CIRCLE" "3P" "TAN" PAUSE "TAN" PAUSE "TAN")
)

 楼主| 发表于 2008-11-13 16:32:00 | 显示全部楼层
ljpnb发表于2008-11-12 17:05:00是不是这样DEFUN C:TTT ()  (COMMAND \"CIRCLE\" \"3P\" \"TAN\" PAUSE \"TAN\" PAUSE \"TAN\"))

谢谢!这样是可以做,但是这样跟直接用"相切,相切,相切"来画没什么区别,能不能直接把我程序前面已经获得的三条边的参数放进去,然后让程序自动完成画内切圆,而不用再去选一次呢.

发表于 2008-11-13 16:40:00 | 显示全部楼层

你可以在

(DEFUN C:TTT ()
  (COMMAND "CIRCLE" "3P" "TAN" PAUSE "TAN" PAUSE "TAN")
)

中把三角形的三条边分别用(setq sg1 (entlast))等标记下,再

(COMMAND "CIRCLE" "3P" "TAN" sg1 "TAN" sg2 "TAN" sg3)

即可.

发表于 2008-11-13 16:41:00 | 显示全部楼层

画三角形时用(setq sg1 (entlast))

...

后再

  (COMMAND "CIRCLE" "3P" "TAN" sg1 "TAN" sg2 "TAN" sg3)

发表于 2011-7-20 10:00:13 | 显示全部楼层
先把“对象捕捉”设置,只选择“延伸”和“切点”
命令C_3P_光标在3条线上取点即可,光标会显示出"递延切点"
发表于 2011-7-20 10:33:48 | 显示全部楼层
三角形的三个角平分线的交点即为内切圆的圆心,圆心至任一条边得垂直距离为半径,作圆。
发表于 2011-7-20 15:54:07 | 显示全部楼层
本帖最后由 highflybird 于 2011-7-20 15:54 编辑

回复 mrg999 的帖子

  1. (defun c:test (/ ss e1 e2 e3)
  2.   (setq ss (ssget))
  3.   (setq e1 (ssname ss 0))
  4.   (setq e2 (ssname ss 1))
  5.   (setq e3 (ssname ss 2))
  6.   (defun mid (e / dxf pt1 pt2)
  7.     (setq dxf (entget e))
  8.     (setq pt1 (cdr (assoc 10 dxf)))
  9.     (setq pt2 (cdr (assoc 11 dxf)))
  10.     (mapcar '* (mapcar '+ pt1 pt2) '(0.5 0.5 0.5))
  11.   )
  12.   (command ".circle" "_3p"  "_tan" (mid e1) "_tan" (mid e2) "_tan" (mid e3))
  13.   (princ)
  14. )

以上代码没有出错处理。请自行添加。
发表于 2011-7-20 16:52:13 | 显示全部楼层
回复 mrg999 的帖子

  1. ;;; (gxl-get3parea p1 p2 p3) 返回三角形 p1p2p3 的面积. 点逆时针为正,顺时针为负
  2. ;(gxl-get3parea  (getpoint) (getpoint) (getpoint))
  3. (defun gxl-get3parea (p1 p2 p3)
  4.   (* 0.5
  5.   (- (+        (* (car p1) (cadr p2))
  6.         (* (car p2) (cadr p3))
  7.         (* (car p3)
  8.            (cadr p1)
  9.         )
  10.      )
  11.      (* (car p1) (cadr p3))
  12.      (* (car p2) (cadr p1))
  13.      (*        (car p3)
  14.         (cadr p2)
  15.      )
  16.   )
  17.      )
  18. )
  19. ;;;(gxl-get3pInnerCircle p1 p2 p3) 由三点计算内切圆圆心、半径,返回 '(圆心坐标 半径)
  20. ;;;(gxl-get3pInnerCircle (getpoint) (getpoint) (getpoint))
  21. (defun gxl-get3pInnerCircle (p1 p2 p3 / s a b c d r a2 angmid )
  22.   (setq s (gxl-get3parea p1 p2 p3)
  23.         a (distance p1 p2)
  24.         b (distance p2 p3)
  25.         c (distance p3 p1)
  26.         r (/ (+ s s) (+ a b c))
  27.         angmid (* 0.5 (+ (angle p1 p2) (angle p1 p3))) ;_ P1处角平分线
  28.         a2 (* 0.5 (- (angle p1 p3) (angle p1 p2))) ;_ 夹角一半
  29.         d (/ r (sin a2))
  30.         )
  31.   (list (polar p1 angmid d) (abs r))
  32.   )
  33. ;测试 函数
  34. (defun c:tt(/ p1 p2 p3 data)
  35.   (setq os (getvar 'osmode))
  36.   (setvar 'osmode 0)
  37.   (setq p1 (getpoint "\n三角形第1点:")
  38.         p2 (getpoint p1 "\n三角形第2点:")
  39.         )
  40.   (command "line" p1 p2 "")
  41.   (setq p3 (getpoint p2 "\n三角形第3点:"))
  42.   (command "line" p2 p3 p1 "")
  43.   (setq data (gxl-get3pInnerCircle p1 p2 p3)
  44.         cp (car data)
  45.         r (cadr data)
  46.         )
  47.   (command "circle" cp r)
  48.   (setvar 'osmode os)
  49.   (princ)
  50.   )
发表于 2015-10-26 15:46:20 | 显示全部楼层
Gu_xl 发表于 2011-7-20 16:52
回复 mrg999 的帖子

高手就是不一般、
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 11:34 , Processed in 0.198919 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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