明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 432|回复: 1

【K:CalcPlineBulge】计算多段线上目标点两侧的新凸度

[复制链接]
发表于 2023-12-6 11:37 | 显示全部楼层 |阅读模式
本帖最后由 kucha007 于 2023-12-6 12:27 编辑

主要用于打断圆弧时,保持弧度不变。
该函数已用在此程序中:http://bbs.mjtd.com/thread-189001-1-1.html

关于凸度的资料:
https://www.cnblogs.com/JJBox/articles/15863558.html
http://www.lee-mac.com/bulgeconversion.html
http://bbs.mjtd.com/thread-183667-1-1.html

  1. ;计算多段线中某一段线上目标点两侧的新凸度
  2. ;Obj Vla对象
  3. ;TgtNum  多段线上目标点的参数,必须大于0
  4. (defun K:CalcPlineBulge (Obj TgtNum / IsNeg Rad Len1 Len2 BLG1 BLG2)
  5.   (if
  6.       (and
  7.           (eq (type Obj) 'VLA-OBJECT)
  8.           (> TgtNum 0);大于0
  9.           (>= TgtNum (setq StaNum (fix TgtNum)) )
  10.           (vlax-method-applicable-p obj 'getbulge)
  11.           (setq TgtBG (vla-getbulge obj StaNum))
  12.       )
  13.       (cond
  14.         ((= StaNum TgtNum);多段线顶点
  15.           (list
  16.             (vla-getbulge obj (1- StaNum))
  17.             (vla-getbulge obj StaNum)
  18.           )
  19.         )
  20.         ((= TgtBG 0.0);直线段
  21.           (list 0.0 0.0)
  22.         )
  23.         ((/= TgtBG 0.0);弧线段
  24.             (setq IsNeg (if (minusp TgtBG) -1 1))
  25.             (setq Rad (distance '(0.0 0.0 0.0) (vlax-curve-getsecondderiv Obj StaNum)));圆弧半径
  26.             (setq Len1 (*
  27.                         0.5
  28.                         (distance
  29.                           (vlax-curve-getpointatparam Obj StaNum)
  30.                           (vlax-curve-getpointatparam Obj TgtNum)
  31.                         )
  32.                       )
  33.                   Len2 (*
  34.                         0.5
  35.                         (distance
  36.                           (vlax-curve-getpointatparam Obj TgtNum)
  37.                           (vlax-curve-getpointatparam Obj (+ 1.0 StaNum))
  38.                         )
  39.                       )
  40.             );1/2弦长
  41.             (setq BLG1 (/ (- Rad (sqrt (- (expt Rad 2) (expt Len1 2)))) Len1)
  42.                   BLG2 (/ (- Rad (sqrt (- (expt Rad 2) (expt Len2 2)))) Len2)
  43.             );拱高除以1/2弦长=凸度
  44.             (list (* IsNeg BLG1) (* IsNeg BLG2))
  45.         )
  46.       )
  47.   )
  48. )


用法示意:
  1. (K:CalcPlineBulge (Vlax-Ename->Vla-Object (Car(Entsel))) 0.5)






发表于 2023-12-6 13:21 | 显示全部楼层
感谢大佬分享源码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-6 20:17 , Processed in 0.399169 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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