明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: langjs

[源码] 画椎椎、柱柱相贯线和展开图

  [复制链接]
发表于 前天 11:30 | 显示全部楼层

通过三角函数计算点位
  1. ;;说明:绘制斜交圆锥管三通相贯线(Diagonal cone tube tee Intersecting line)
  2. ;;参数:BMinDN:  大椎小圆直径
  3. ;;参数:BMaxDN:  大椎大圆直径
  4. ;;参数:BHig:    大椎高度
  5. ;;参数:SMinDN:  小椎小圆直径
  6. ;;参数:SMaxDN:  小椎大圆直径
  7. ;;参数:SHig:    小椎高度
  8. ;;参数:CSubLen:  两椎中心轴交点距底面高度
  9. ;;参数:ang:      两椎相交角度
  10. ;;参数:divnum:  相贯线等分精度
  11. ;;(zuixiangguan 120 200 250 50 100 200 100 60.0 36.0)
  12. ;;(setq BMinDN 120 BMaxDN 200 BHig 250 SMinDN 50 SMaxDN 100 SHig 200 CSubLen 100 ang 60.0 divnum 12.0)
  13. (defun zuixiangguan(BMinDN BMaxDN BHig SMinDN SMaxDN SHig CSubLen ang divnum / acos ang1011 anglst asidelen divdis divpts i intpt1 intpt2 intpt3 intpt4 intpts itmang itmr makeline makespl pt0 pt1 pt10 pt11 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt9 radius staper vlsorty)
  14.   (progn
  15.     (defun makeline (pt1 pt2)         ; 画直线
  16.       (entmakex (list '(0 . "LINE") (cons 10 pt1) (cons 11 pt2)))
  17.     )
  18.     (defun makespl (ptlst / pt); 画样条曲线
  19.       (entmakex
  20.         (append
  21.           (list '(0 . "SPLINE") '(100 . "AcDbEntity") '(100 . "AcDbSpline") '(62 . 3) '(71 . 3))
  22.           (mapcar '(lambda (pt) (cons 11 pt) ) ptlst)
  23.         )
  24.       )
  25.     )
  26.     (defun acos (x)           ; 反余弦
  27.       (if (<= (abs x) 1) (atan (sqrt (- 1 (* x x))) x))
  28.     )
  29.     (defun vlsorty (lst / e1 e2)         ; 点按y排序
  30.       (vl-sort lst(function (lambda (e1 e2) (< (cadr e1) (cadr e2)))))
  31.     )
  32.   )
  33.   (vl-load-com)
  34.   ;(setq BMinDN 120)             ; 大椎小圆直径
  35.   ;(setq BMaxDN 200)             ; 大椎大圆直径
  36.   ;(setq BHig 250)               ; 大椎高度
  37.   ;(setq SMinDN 50)               ; 小椎小圆直径
  38.   ;(setq SMaxDN 100)             ; 小椎大圆直径
  39.   ;(setq SHig 200)               ; 小椎高度
  40.   ;(setq CSubLen 100)             ; 两椎中心轴交点距底面高度
  41.   ;(setq ang 60.0)               ; 两椎相交角度
  42.   ;(setq divnum 12.0)             ; 计算相贯线的精度
  43.   (if (setq pt0 (getpoint "插入点:"))
  44.     (progn
  45.       ;;------计算点位和角度------
  46.       (setq ang (* ang (/ pi 180.0)))
  47.       (setq pt1 (list (- (car pt0) (* 0.5 BMaxDN)) (- (cadr pt0) CSubLen)))
  48.       (setq pt2 (list (- (car pt0) (* 0.5 BMinDN)) (+ (cadr pt0) (- BHig CSubLen))))
  49.       (setq pt3 (list (+ (car pt2) BMinDN) (cadr pt2)))
  50.       (setq pt4 (list (+ (car pt1) BMaxDN) (cadr pt1)))
  51.       (setq pt9 (polar pt0 (+ ang (* 0.5 pi)) SHig))
  52.       (setq pt5 (polar pt0 (+ ang pi) (* 0.5 SMaxDN)))
  53.       (setq pt6 (polar pt9 (+ ang pi) (* 0.5 SMinDN)))
  54.       (setq pt7 (polar pt9 ang (* 0.5 SMinDN)))
  55.       (setq pt8 (polar pt0 ang (* 0.5 SMaxDN)))
  56.       (setq STaper (atan (/ (* 0.5 (- SMaxDN SMinDN)) SHig)));;小锥锥度
  57.       (setq asidelen (* 0.5 SMaxDN (cos STaper)));;小锥底心到锥面的距离
  58.       (setq pt10 (inters pt1 pt2 pt5 pt6))
  59.       (setq pt11 (inters pt1 pt2 pt7 pt8))
  60.       (setq ang1011 (angle pt10 pt11))
  61.       ;;======创建线条======
  62.       (makeline pt1 pt10)
  63.       (makeline pt11 pt2)
  64.       (makeline pt2 pt3)
  65.       (makeline pt3 pt4)
  66.       (makeline pt4 pt1)
  67.       (vlax-put-property (vlax-ename->vla-object (makeline pt5 pt10)) "color" 6)
  68.       (makeline pt10 pt6)
  69.       (makeline pt6 pt7)
  70.       (makeline pt7 pt11)
  71.       (vlax-put-property (vlax-ename->vla-object (makeline pt11 pt8)) "color" 6)
  72.       (vlax-put-property (vlax-ename->vla-object (makeline pt8 pt5)) "color" 6)
  73.       (vlax-put-property
  74.         (vlax-ename->vla-object
  75.           (makeline (list (car pt0) (cadr pt1)) (list (car pt0) (cadr pt2)))
  76.         )
  77.         "color" 1
  78.       )
  79.       (vlax-put-property (vlax-ename->vla-object (makeline pt0 pt9)) "color" 1)
  80.       ;;======计算相贯线点位======
  81.       (setq divdis (/ (distance pt10 pt11) divnum) i 0 divpts nil)
  82.       (while (< (setq i (1+ i)) divnum)
  83.         (setq divpts (cons (polar pt10 ang1011 (* divdis i)) divpts))
  84.       )
  85.       (setq divpts (reverse divpts))
  86.       (setq anglst nil)
  87.       (foreach pt divpts
  88.         (setq radius (distance pt0 pt))
  89.         (setq anglst (cons (list (- (* pi 0.5) (acos (/ asidelen radius)) STaper) radius pt) anglst))
  90.       )
  91.       (setq anglst (vl-sort anglst '(lambda(x y) (> (car x) (car y)))))
  92.       (setq intpts nil intpts (cons pt10 intpts))
  93.       (foreach itm anglst
  94.         (setq itmang (car itm) itmr (cadr itm))
  95.         (setq intpt1 (caddr itm))
  96.         (setq intpt2 (list (car pt0) (cadr intpt1)))
  97.         (setq intpt3 (polar pt0 (+ ang (* 0.5 pi) itmang) itmr))
  98.         (setq intpt4 (polar pt0 (- (+ ang (* 0.5 pi)) itmang) itmr))
  99.         (setq intpts (cons (inters intpt1 intpt2 intpt3 intpt4) intpts))
  100.       )
  101.       (setq intpts (vlsorty (cons pt11 intpts)))
  102.       (makespl intpts) ; 绘制相贯线
  103.     )
  104.   )
  105.   (princ)
  106. )


回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-14 13:56 , Processed in 0.156045 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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