明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5460|回复: 16

[求助]如何獲取pline中圓弧的半徑?

  [复制链接]
发表于 2006-11-21 15:40 | 显示全部楼层 |阅读模式
如何获取pline中圆弧的半径?多谢
发表于 2018-3-9 07:40 来自手机 | 显示全部楼层
能否获取多段线中缓和曲线的ls1,ls2呢
发表于 2006-11-21 21:03 | 显示全部楼层
可以通过pline中顶点的GetBulge方法得到它的凸度,然后经过计算,得到圆弧半径!
 楼主| 发表于 2006-11-22 08:27 | 显示全部楼层
GetBulge方法可以得到它的凸度,但是凸度与半径是什么关系,能不能说明白点?
发表于 2006-11-22 20:52 | 显示全部楼层
凸度在数值上等于圆弧的高度与圆弧弦长比值的二倍!
 楼主| 发表于 2006-11-23 08:30 | 显示全部楼层

这个还是有点困难,圆弧的凸度就是1/4圆弧角度的正弦值,除非引入点的坐标,不然就算不出半径,不过这样意义就不是很大啦,没有办法修改PLINE上圆弧的半径。除非重新生成。

圆弧角度 90       tan(90/4)=0.414214

                180     tan(180/4)=1

                 270    tan(270/4)=2.414214

正好是对应圆弧的凸度,与半径无关

发表于 2006-11-23 10:12 | 显示全部楼层

Command: (setq p1 '(0 0) p2 '(0 100) bulge -1)
-1

;; Bulge = 凸度
(setq Ang/2 (* 2 (atan Bulge))
      ArcRad (abs (/ (distance p1 p2) (sin Ang/2) 2.0))
)

===>50.0

点评

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=41088 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=56215&replyID=&skin=1  发表于 2012-7-31 10:19
发表于 2006-11-23 13:09 | 显示全部楼层
不要凸度,把PLINE炸开,然后得到圆弧半径再恢复
发表于 2006-11-23 23:14 | 显示全部楼层
(defun c:test ()
  (vl-load-com)
  (princ "请选择多义线:")
  (setq plobj (vlax-ename->vla-object (car (entsel)))
 pts   (vlax-safearray->list
  (vlax-variant-value (VLA-GET-COORDINATEs plobj))
       )
 n     0
  )
  (if (= (vla-get-closed plobj) :vlax-true)
    (setq pts (append pts (list (nth 0 pts) (nth 1 pts)))
    )
  )
  (while (< n (- (length pts) 1))
    (if (/= (setq bulge (vla-GetBulge plobj (/ n 2))) 0)
      (progn
 (setq haldis (/ (distance (list (nth n pts) (nth (+ n 1) pts))
      (list (nth (+ n 2) pts) (nth (+ n 3) pts))
   )
   2
       )
       ang    (* 2 (atan bulge))
       rad    (abs (/ haldis (sin ang)))
 )
 (alert (strcat "第"
         (itoa (+ (/ n 2) 1))
         "点处为圆弧,圆弧半径为:"
         (rtos rad 2 3)
        )
 )
      )
    )
    (setq n (+ n 2))
  )
)
发表于 2006-11-23 23:17 | 显示全部楼层
临时帮你写了一个,不知道是否符合你的要求!
发表于 2006-11-23 23:25 | 显示全部楼层
本帖最后由 作者 于 2006-11-24 11:31:39 编辑

  1. ;;;******************************************************
  2. ;;;一个求多义线各段参数(如果是弧段则有半径弧长)的lisp程序
  3. ;;;编号  1:凸度,2:弦长或直段长,3:半径,4:弧长,5:圆心--
  4. ;;;加载程序,运行bulge,则显示上述参数-------------------
  5. (defun C:Bulge (/ ss1 ename el obj len ifclose i par ptfirst ptend judge
  6.     tu pt1 pt2 dis radius h h1 half-angle arc-length pa n)
  7.   (setq ss1 (ssget ":S" '((-4 . "<OR")
  8.           (0 . "POLYLINE")
  9.           (0 . "LWPOLYLINE")
  10.           (-4 . "OR>")))
  11.   )
  12.   (if (or nil (= ss1 nil) (/= (assoc 75 (entget (ssname ss1 0))) nil))
  13.     (progn
  14.       (alert "你没有选中物体或者选择的不是多义线!")
  15.       (princ)
  16.     )
  17.     (progn
  18.       (setq ename (ssname ss1 0))
  19.       (setq el (entget ename))
  20.       (setq obj (vlax-ename->vla-object ename))
  21.       (setq len (cdr (assoc 90 el)))
  22.       (setq ifclose (cdr (assoc 70 el)))
  23.       (setq i 0 par nil)
  24.       (setq ptfirst (vlax-curve-getpointatparam ename 0))
  25.       (setq ptend (vlax-curve-getpointatparam ename (1- len)))
  26.       (setq judge (and (not (equal ptfirst ptend 1e-8)) (= ifclose 1)))
  27.       (repeat (if judge len (1- len))
  28.         (setq tu (vla-getBulge obj i))
  29.         (setq pt1 (vlax-curve-getpointatparam ename i))
  30.         (if (and (= i (1- len)) judge)
  31.    (setq pt2 (vlax-curve-getpointatparam ename 0))
  32.           (setq pt2 (vlax-curve-getpointatparam ename (1+ i)))  
  33.         )
  34.         (setq dis (distance pt1 pt2))
  35.         (if (/= tu 0)
  36.           (progn   
  37.             (setq radius (/ (* (+ 1.0 (* tu tu)) dis 0.25) (abs tu)))
  38.             (setq h (* dis (abs tu) 0.5) h1 (- radius h))
  39.             (setq half-angle (atan (/ dis 2) h1))
  40.             (setq arc-length (* 2 half-angle radius))
  41.      (setq cen (midp pt1 pt2))
  42.      (setq cen (polar cen
  43.         (+ (angle pt1 pt2)
  44.     (if (or nil (and (> h1 0) (> tu 0)) (and (< h1 0) (< tu 0)))
  45.       (* pi 0.5) (* pi -0.5)
  46.     )
  47.         )        
  48.         (abs h1)
  49.         )
  50.      )
  51.             (setq pa (list tu dis radius arc-length cen))
  52.             (setq par (cons pa par))
  53.           )
  54.           (progn
  55.             (setq pa (list tu dis))
  56.             (setq par (cons pa par))
  57.           )
  58.         )
  59.         (setq i (1+ i))
  60.       )
  61.       (setq par (reverse par))
  62.       (princ "\n下面为此曲线的各段列表,3,4,5编号为弧段才有:")
  63.       (princ "\n1:凸度 2:弦长(或直线长) 3:半径 4:弧长 5:圆心")
  64.       (foreach n par
  65.         (princ "\n")
  66.         (princ n)
  67.       )
  68.       (princ)
  69.     )
  70.   )
  71. )
  72. ;;;******************************************************
我也来一个,加载程序,运行bulge则可。

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-4-17 05:40 , Processed in 0.318606 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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