明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1830|回复: 6

[LISP]请指高手如何求任意一多义线中圆弧的四分圆点的坐标值

[复制链接]
发表于 2005-12-2 23:16 | 显示全部楼层 |阅读模式
请指高手如何求任意一多义线中圆弧的四分圆点的坐标值,如上图所示!

本帖子中包含更多资源

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

x
 楼主| 发表于 2005-12-4 16:58 | 显示全部楼层
高手们怎么都不指点一下呢?
发表于 2005-12-4 17:54 | 显示全部楼层
先求圆心和半径
发表于 2005-12-6 21:11 | 显示全部楼层
  1. 条件不足,园的1/4点无穷个哈!
  2. (defun c:test( / m_plent m_hdlist m_pt1 m_pt2 m_pt3 m_xc m_radius m_ptcenter m_angle m_taglength m_arclength)
  3.   (setq m_plent (car (entsel"\n请选择含圆弧的多段线:")))
  4.   (if (setq m_hdlist (m_searchhd m_plent));;求出多义线中组码42值不等于0的所有点表
  5.     (repeat (length m_hdlist)
  6.       (setq m_pt1 (nth 1 (car m_hdlist)))
  7.       (setq m_pt2 (nth 2 (car m_hdlist)))
  8.       (setq m_xc (distance m_pt1 m_pt2));;弦长
  9.       (setq m_radius (abs (/ (* m_xc (1+ (* (caar m_hdlist)(caar m_hdlist)))) (* 4 (caar m_hdlist)))));;半径R
  10.       (setq m_pt3 (polar m_pt1 (angle m_pt1 m_pt2) (/ m_xc 2.0)))
  11.       (if (> 0.0 (caar m_hdlist))
  12. (setq m_ptcenter (polar m_pt3 (- (angle m_pt1 m_pt2) (angtof "90"))  (- m_radius (/ (* (abs (caar m_hdlist)) m_xc) 2.0))))
  13. (setq m_ptcenter (polar m_pt3 (- (angle m_pt1 m_pt2) (angtof "270")) (- m_radius (/ (* (abs (caar m_hdlist)) m_xc) 2.0))))
  14.       )
  15.       (setq m_angle (abs (- (angle m_ptcenter m_pt1)(angle m_ptcenter m_pt2))));;弧角弧度
  16.       ;;(if (< m_angle 0) (setq m_angle (+ (* 2 pi) m_angle)))
  17.       (setq m_taglength (* m_radius (/ (sin (/ m_angle 2.0))(cos (/ m_angle 2.0)))));;半切线长
  18.       (setq m_arclength (* m_radius m_angle));;弧长
  19.       (setq m_len (vlax-curve-getdistatpoint (vlax-ename->vla-object m_plent) m_pt1))
  20.       (setq m_pt1 (vlax-curve-getpointatdist (vlax-ename->vla-object m_plent) (+ m_len (/ m_arclength 3))))
  21.       (m_drawpc m_pt1)
  22.       (setq m_pt1 (vlax-curve-getpointatdist (vlax-ename->vla-object m_plent) (+ m_len (* 2 (/ m_arclength 3)))))
  23.       (m_drawpc m_pt1)
  24.       
  25.       (setq m_hdlist (cdr m_hdlist))
  26.     )
  27.     (princ" ——>多段线中未包括圆弧!")
  28.   )
  29. )
  30. (defun m_searchhd(m_plent / m_pttab m_pt1 m_pt2 m_tmp m_ptlist)
  31.   ;;搜索多义线实体中是否有圆弧段,返回(((组码42值(非零) (点座标) (下一点座标)) ...)
  32.   (setq m_pttab (entget m_plent))
  33.   (while (setq m_pt1 (assoc '10 m_pttab))
  34.     (setq m_tmp (assoc '42 m_pttab))
  35.     (if (/= 0.0 (cdr m_tmp))
  36.       (if (setq m_pt2 (assoc '10 (cdr (member m_pt1 m_pttab))))
  37. (progn
  38.    (setq m_pt1 (list (nth 1 m_pt1) (nth 2 m_pt1)))
  39.    (setq m_pt2 (list (nth 1 m_pt2) (nth 2 m_pt2)))
  40.    (setq m_ptlist (append m_ptlist (list (list (cdr m_tmp) m_pt1 m_pt2))))
  41. )
  42.       )
  43.     )
  44.     (setq m_pttab (cdr (member m_tmp m_pttab)))
  45.   )
  46.   m_ptlist
  47. )
  48. (defun m_drawpc(pt / mspace m_vlaline1 m_vlaline2 m_vlacircle m_sstmp m_linelen)
  49.   
  50.     (setq m_sstmp (ssadd))
  51.   
  52.     (setq mspace (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
  53.     (setq m_linelen 5)
  54.     (setq m_vlaline1 (vla-addline mspace (vlax-3d-point (polar pt (angtof "45") m_linelen))
  55.       (vlax-3d-point (polar pt (angtof "225") m_linelen)));;创建一条直线
  56.     )
  57.     (vla-put-color m_vlaline1 acgreen);;颜色-绿色
  58.     (vla-put-lineweight m_vlaline1 aclnwt030);;设置线宽
  59.     (ssadd (entlast) m_sstmp)
  60.     (setq m_vlaline2 (vla-addline mspace (vlax-3d-point (polar pt (angtof "135") m_linelen))
  61.       (vlax-3d-point (polar pt (angtof "315") m_linelen)))
  62.     )
  63.     (vla-put-color m_vlaline2 acgreen)
  64.     (vla-put-lineweight m_vlaline2 aclnwt030)
  65.     (ssadd (entlast) m_sstmp)
  66.   
  67.     (setq m_vlacircle (vla-addcircle mspace (vlax-3d-point pt) (/ m_linelen 2.0)));;创建一个园
  68.     (vla-put-color m_vlacircle acyellow);;颜色-黄色
  69.     (vla-put-lineweight m_vlacircle aclnwt030)
  70.     (ssadd (entlast) m_sstmp)
  71.     m_sstmp
  72. )
 楼主| 发表于 2005-12-7 21:06 | 显示全部楼层

多谢3楼的朋友!不过我运行时出错,提示如下:

no function definition: VLAX-ENAME->VLA-OBJECT

发表于 2005-12-7 22:05 | 显示全部楼层

先 Run 这个  (vl-load-com)

 

发表于 2005-12-7 22:41 | 显示全部楼层

简单一点的,可以炸开,取所有arc

分别求象限点

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

本版积分规则

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

GMT+8, 2024-5-5 08:05 , Processed in 3.091901 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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