明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 自贡黄明儒

[讨论] 关于多段线

    [复制链接]
发表于 2014-4-7 21:51 | 显示全部楼层
楼盖了这么高了,看看
发表于 2014-4-8 08:36 | 显示全部楼层
;;; 程序整理BY USER2128(HLCAD),欢迎使用。
  1. ;;; 返回多段线凸度处的 (圆心点坐标    半径  起始角   终止角)
  2. ;|
  3. Ex:
  4. (mapcar (function (lambda(x) (apply 'cvtbulge x)))
  5.         (mapcar 'cdr (plarcinfo (entget (car (entsel))))))
  6. ==> (((1746.88 1442.56) 100.0 1.83905  2.86187)
  7.      ((1775.67 1450.48) 100.0 0.268258 1.83905))
  8.         (圆心点坐标    半径  起始角   终止角)
  9. |;
  10. (defun cvtbulge (sp bulge ep / cotbce x1 x2 y1 y2 temp
  11.                  cen rad sa ea)
  12.   (setq x1 (car  sp) x2 (car  ep))
  13.   (setq y1 (cadr sp) y2 (cadr ep))
  14.   (setq cotbce (/ (- (/ 1.0 bulge) bulge) 2.0))
  15.   
  16. ; Compute center point and radius
  17.   (setq cen (list (/ (+ x1 x2 (- (* (- y2 y1) cotbce))) 2.0)
  18.                   (/ (+ y1 y2    (* (- x2 x1) cotbce) ) 2.0))
  19.         )
  20.   (setq rad (distance cen sp))
  21.   
  22. ; Compute start and end angles
  23.   (setq sa  (atan (- y1 (cadr cen)) (- x1 (car cen))))
  24.   (setq ea  (atan (- y2 (cadr cen)) (- x2 (car cen))))
  25.   (if (< sa 0.0)                      ; Eliminate negative angles
  26.     (setq sa (+ sa (* 2.0 pi)))
  27.     )
  28.   (if (< ea 0.0)
  29.     (setq ea (+ ea (* 2.0 pi)))
  30.     )
  31.   (if (< bulge 0.0)                   ; Swap angles if clockwise
  32.     (progn
  33.       (setq temp sa)
  34.       (setq sa ea)
  35.       (setq ea temp)
  36.       )
  37.     )
  38.   (list cen rad sa ea)
  39.   )
  40. ;;; =============================================
  41. ;;;程序得到多段线在哪个顶点开始有圆弧,并且圆弧的信息。
  42. ;;; (plarcinfo (entget (car (entsel))))
  43. ;  ==> ((2 (1566.14 815.301 0.0) 0.567253 (1625.41 877.383 0.0))
  44. ;       (4 (1537.78 1194.31 0.0) 0.414214 (1476.26 1229.18 0.0)))
  45. (defun plarcinfo (el / i lst bl)
  46.   (setq i -1)
  47.   (if (setq lst (vl-remove nil
  48.       (mapcar
  49.         (function (lambda (y) (setq i (1+ i)) (if (zerop y) nil i)))
  50.         (setq bl(mapcar 'cdr(vl-remove-if-not '(lambda(x)(=(car x)42))el)))
  51.         )))
  52.     (mapcar 'cons lst
  53.             (mapcar '(lambda (x y)
  54.                        (setq e (cdr (assoc -1 el)))
  55.                        (list (vlax-curve-getpointatparam e x)
  56.                              y
  57.                              (vlax-curve-getpointatparam e (1+ x))
  58.                              )
  59.                        ) lst (vl-remove 0. bl))
  60.             )
  61.     )
  62.   )
  63. ;;; =============================================
发表于 2014-4-8 10:36 | 显示全部楼层
学习了。。。。。
发表于 2014-4-9 14:19 | 显示全部楼层
多谢楼主 看到几个非常实用的
发表于 2014-4-9 23:50 | 显示全部楼层
感谢,涨姿势了
发表于 2014-4-10 07:22 | 显示全部楼层
学习一下这个命令,感觉挺有用的。
发表于 2014-4-11 17:35 | 显示全部楼层
黄老师  辛苦了!
发表于 2014-4-11 20:45 | 显示全部楼层
量产大师!!!
发表于 2014-4-13 19:28 | 显示全部楼层
回复看看是神马东东!!...
发表于 2014-4-15 09:03 | 显示全部楼层
大力支持。大公无私。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 19:01 , Processed in 0.247721 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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