明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 184|回复: 6

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

[复制链接]
发表于 2021-9-13 16:23 | 显示全部楼层 |阅读模式
本帖最后由 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 来自手机 | 显示全部楼层
自己顶一下
发表于 2021-9-14 10:12 | 显示全部楼层
算法是不是有问题
发表于 2021-9-14 10:38 | 显示全部楼层
帮你把先画出来,点位算法你自己完善

(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 | 显示全部楼层
本帖最后由 夏生生 于 2021-9-14 11:09 编辑

感觉你的算法不对,不过我也不是专业的,您试试
[code="lisp] (defun c:xgx (/ r1 r2 ang n pt x1 i lst x y make-lwpl)
  (setq        r1  (getreal "\n主管半径:")
        r2  (getreal "\n支管半径:")
        ang (getangle "\n夹角:")
        n   (getint "\n等分数:")
        pt  (getpoint "\n插入点:")
  )
  (setq        x1 (/ pi (* 0.5 n))
        i  0
  )
  (repeat (1+ n)
    (setq x (* i x1))
    (setq y (/ (+ (* r2 (cos x) (cos ang))
                  (sqrt (- (* r1 r1) (expt (* r2 (sin x)) 2)))
               )
               (sin ang)
            )
    )
    (setq i   (1+ i)
          lst (cons (list (* r2 x) y) lst)
    )
  )
  (make-lwpl
    (mapcar '(lambda (x)
               (mapcar '+
                       (list (car pt) (- (cadr pt) (cadr (last lst))))
                       x
               )
             )
            lst
    )
    0
    0
  )
  (defun make-lwpl (plist mode w / ocs ed)
    (setq ocs (trans '(0 0 1) 1 0 t))
    (setq ed (list (cons 0 "LWPOLYLINE")
                   (cons 100 "AcDbEntity")
                   (cons 100 "AcDbPolyline")
                   (cons 90 (length plist))
                   (cons 70 mode)
                   (cons 43 w)
             )
    )
    (foreach elem plist
      (setq
        ed (append ed
                   (list (cons 10 (trans elem 1 ocs))
                   )
           )
      )
    )
    (setq ed (append ed (list (cons 210 ocs))))
    (entmakex ed)
  )
)[/code]

本帖子中包含更多资源

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

x
 楼主| 发表于 2021-9-14 17:26 | 显示全部楼层
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 | 显示全部楼层
本帖最后由 hushiyong11 于 2021-9-14 17:50 编辑
夏生生 发表于 2021-9-14 11:00
感觉你的算法不对,不过我也不是专业的,您试试

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

本版积分规则

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

GMT+8, 2021-9-18 01:07 , Processed in 0.431443 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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