明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 942|回复: 6

[源码] 展开相贯线的问题

[复制链接]
发表于 2021-9-13 16:23:34 | 显示全部楼层 |阅读模式
本帖最后由 hushiyong11 于 2021-9-13 16:32 编辑

代码功能:展开主管与支管交叉处的相贯线(目前代码求出的坐标还不完美,还在完善)

问题:可以计算出各点的坐标,无法绘出图形

图片还不会改插入位置
以下是代码:
(defun c:zk(/ pt n dist1 dist2 rad1 rad2 ang x y yy)
;;;计算半径
  (setq rad1 (/ (getreal "输入主管直径:") 2))
  (setq rad2 (/ (getreal "输入支管直径:") 2))
  (setq n (getint "输入等分数:"))
  (setq ang (/ 360 n))
  (setq y 0)
  ;;;计算出点坐标并画出多段线
  (repeat n
    (setq x (cos (*(/ (* ang pi) 180) y)))
    (setq dist1 (* rad2 x))
    (setq dist2 (sqrt (- (* rad1 rad1) (* dist1 dist1))))
    (setq yy (list dist2 (* y (/ (* rad2 pi) n))))
    (command "_.pline" yy )
    (setq y (1+ y))
    )
   )



本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
USER2128 + 1 赞一个!

查看全部评分

 楼主| 发表于 2021-9-14 08:51:43 来自手机 | 显示全部楼层
自己顶一下
发表于 2021-9-14 10:12:34 | 显示全部楼层
算法是不是有问题
发表于 2021-9-14 10:38:02 | 显示全部楼层
帮你把先画出来,点位算法你自己完善

(defun c:tt5(/ ang dist1 dist2 n pt ptbs ptlst rad1 rad2 x y yy)
;;;计算半径
  (setq rad1 (/ (getreal "输入主管直径:") 2))
  (setq rad2 (/ (getreal "输入支管直径:") 2))
  (setq n (getint "输入等分数:"))
  (setq ang (/ 360 n))
  (setq y 0)
        (setq ptbs (getpoint"\n选择基点:") ptlst '())
  ;;;计算出点坐标并组成表
  (repeat n
    (setq x (cos (*(/ (* ang pi) 180) y)))
    (setq dist1 (* rad2 x))
    (setq dist2 (sqrt (- (* rad1 rad1) (* dist1 dist1))))
    (setq yy (list (+ (car ptbs) dist2) (+ (cadr ptbs) (* y (/ (* rad2 pi) n)))))
    ;(command "_.pline" yy )
                (setq ptlst (cons yy ptlst))
    (setq y (1+ y))
    )
        ;表->多段线
        (Make-LWPOLYLINE ptlst)
        (princ)
   )

(defun Make-LWPOLYLINE (lst / PT);;点表->多段线
  (entmake (append (list '(0 . "LWPOLYLINE")
                                                                                 '(100 . "AcDbEntity")
                                                                                 '(100 . "AcDbPolyline")
                                                                                 (cons 90 (length lst))
                   )
                                                 (mapcar '(lambda (pt) (cons 10 pt)) lst)
           )
  )
)
发表于 2021-9-14 11:00:49 | 显示全部楼层
本帖最后由 夏生生 于 2021-9-14 11:09 编辑

感觉你的算法不对,不过我也不是专业的,您试试
  1. (defun c:xgx (/ r1 r2 ang n pt x1 i lst x y make-lwpl)
  2.   (setq        r1  (getreal "\n主管半径:")
  3.         r2  (getreal "\n支管半径:")
  4.         ang (getangle "\n夹角:")
  5.         n   (getint "\n等分数:")
  6.         pt  (getpoint "\n插入点:")
  7.   )
  8.   (setq        x1 (/ pi (* 0.5 n))
  9.         i  0
  10.   )
  11.   (repeat (1+ n)
  12.     (setq x (* i x1))
  13.     (setq y (/ (+ (* r2 (cos x) (cos ang))
  14.                   (sqrt (- (* r1 r1) (expt (* r2 (sin x)) 2)))
  15.                )
  16.                (sin ang)
  17.             )
  18.     )
  19.     (setq i   (1+ i)
  20.           lst (cons (list (* r2 x) y) lst)
  21.     )
  22.   )
  23.   (make-lwpl
  24.     (mapcar '(lambda (x)
  25.                (mapcar '+
  26.                        (list (car pt) (- (cadr pt) (cadr (last lst))))
  27.                        x
  28.                )
  29.              )
  30.             lst
  31.     )
  32.     0
  33.     0
  34.   )
  35.   (defun make-lwpl (plist mode w / ocs ed)
  36.     (setq ocs (trans '(0 0 1) 1 0 t))
  37.     (setq ed (list (cons 0 "LWPOLYLINE")
  38.                    (cons 100 "AcDbEntity")
  39.                    (cons 100 "AcDbPolyline")
  40.                    (cons 90 (length plist))
  41.                    (cons 70 mode)
  42.                    (cons 43 w)
  43.              )
  44.     )
  45.     (foreach elem plist
  46.       (setq
  47.         ed (append ed
  48.                    (list (cons 10 (trans elem 1 ocs))
  49.                    )
  50.            )
  51.       )
  52.     )
  53.     (setq ed (append ed (list (cons 210 ocs))))
  54.     (entmakex ed)
  55.   )
  56. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2021-9-14 17:26:30 | 显示全部楼层
start4444 发表于 2021-9-14 10:38
帮你把先画出来,点位算法你自己完善

(defun c:tt5(/ ang dist1 dist2 n pt ptbs ptlst rad1 rad2 x y y ...

感谢您的指导,您的代码我已测试,运行成功
 楼主| 发表于 2021-9-14 17:29:24 | 显示全部楼层
本帖最后由 hushiyong11 于 2021-9-14 17:50 编辑
夏生生 发表于 2021-9-14 11:00
感觉你的算法不对,不过我也不是专业的,您试试

您的代码里有好多函数我还没用过,我还差的多
代码里有一段需要调整一下,可以完美运行,谢谢指导
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 18:17 , Processed in 0.169206 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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