明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4740|回复: 64

[函数] 将圆和圆弧转为两节点多段线

    [复制链接]
发表于 2022-12-5 21:57 | 显示全部楼层 |阅读模式
本帖最后由 guosheyang 于 2022-12-5 22:09 编辑

      工作中,有时候需要将圆和圆弧转为两节点多段线 如何批量 将圆和圆弧 转化为多段线 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)
      这里给朋友们分享该功能的两个函数----将圆弧和圆转为两个节点的多段线的函数,请大家测试并反馈,谢谢!

;函数名 ygs_a2pl  作者 ygs--羊羊羊
;功能:将圆弧转两节点多段线            
;参数:yh 为圆弧                     
;返回值:无                           
;执行 (ygs_a2pl(setq yh(car(entsel))))


(defun ygs_a2pl(yh / ANG1 ANG2 CEN1 MID QD1 RAD1 TD X XZD Y YH ZD1)

(setq cen1(trans (cdr(assoc 10(entget yh)))1 0)

       rad1 (cdr(assoc 40(entget yh)))

       qd1(vlax-curve-getstartpoint yh)

       zd1(vlax-curve-getendpoint yh)

       mid(vlax-curve-getpointatparam yh(* (+(vlax-curve-getparamatpoint yh zd1)

                             (vlax-curve-getparamatpoint yh qd1))0.5))

      ang1 (cdr(assoc 50(entget yh)))

      ang2(cdr(assoc 51(entget yh)))

      xzd(mapcar'(lambda(x y)(/(+ x y)2.)) qd1 zd1)

      td(/(* 2(distance xzd mid))(distance qd1 zd1)))

  (entdel yh)

  (entmakex (append (list '(0 . "LWPOLYLINE")

        '(100 . "AcDbEntity")

        '(100 . "AcDbPolyline")

        (cons 90 2)

        (cons 70 0)

        (cons 10 qd1)

        (cons 42 td)

        (cons 10 zd1)               

        )

      )

)

)

;函数名 ygs_cir2pl 作者 作者 ygs--羊羊羊

;功能:将圆转为两节点的多段线      

;参数:cir1 为圆                    

;返回值:无                        

;(ygs_cir2pl(setq cir(car(entsel))))

(defun ygs_cir2pl(cir1 / CEN1 CIR1 QD1 RAD1 TD X Y ZD1 ZXXD)

(setq cen1(trans (cdr(assoc 10(entget cir1)))1 0)

       rad1 (cdr(assoc 40(entget cir1)))

       qd1(vlax-curve-getstartpoint cir1)

       zxxd(mapcar'(lambda(x y)(-(* x 2) y)) cen1 qd1))

(entdel cir1)

(entmakex (append (list '(0 . "LWPOLYLINE")

        '(100 . "AcDbEntity")

        '(100 . "AcDbPolyline")

        (cons 90 3)

        (cons 70 0)

        (cons 10 zxxd )

        (cons 42 -1.0)

        (cons 10 qd1)

        (cons 42 -1.0)

        (cons 10 zxxd )

        (cons 42 -1.0)

        )

      )

)

)

本帖子中包含更多资源

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

x

评分

参与人数 4明经币 +4 收起 理由
bssurvey + 1 赞一个!
kucha007 + 1 赞一个!
cheefeel + 1 很给力!
lee50310 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
    共1人打赏

本帖被以下淘专辑推荐:

发表于 2022-12-6 10:57 | 显示全部楼层
本帖最后由 lee50310 于 2022-12-6 18:19 编辑

根據版主提供的函數 寫成
批量圓,弧轉成多段線  ch2pl.lsp
執行指令:ch2pl




左邊簡體版   <---->   右邊繁體版





本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
cheefeel + 1 很给力!

查看全部评分

回复 支持 5 反对 0

使用道具 举报

发表于 2022-12-6 18:11 | 显示全部楼层
本帖最后由 lee50310 于 2022-12-6 18:13 编辑
cheefeel 发表于 2022-12-6 17:31
请问是什么编码格式的,我打开以后繁体是乱码状态。
右邊是 繁體版 ch2lp_cht.lsp

你cad是簡體版
請下載 左邊 簡體版 ch2lp_chs.lsp

点评

嗯嗯  发表于 2022-12-7 09:20
回复 支持 1 反对 1

使用道具 举报

发表于 2023-1-3 10:34 | 显示全部楼层

转圆或弧为二点多段线

本帖最后由 llsheng_73 于 2023-1-3 14:52 编辑

没想通转个圆或弧为二点多段线怎么搞出3k多代码的,自己搞个
  1. (defun arctopl(p r ang1 ang2 / a);;圆(弧)转多段线
  2.   (setq a(*(rem(+(- ang2 ang1)pi pi)(+ pi pi))0.25)a(cons 42(/(sin a)(cos a))))
  3.   (List(cons 10(polar p ang1 r))a(cons 10(polar p ang2 r))a))
  4. (defun tt(e yn / en p r ang1 ang2)
  5.   (setq en(entget e)
  6.         p(cdr(assoc 10 en))
  7.         r(cdr(assoc 40 en))
  8.         ang1(cdr(assoc 50 en)))
  9.   (entmakex(vl-remove'nil(append(mapcar'cons'(0 100 100 90 70)(list"LWPOLYLINE""AcDbEntity""AcDbPolyline"2(if ang1 0 1)))(list(assoc 8 en)(assoc 370 en)(assoc 62 en))
  10.                                 (if ang1(arctopl p r ang1(cdr(assoc 51 en)))(arctopl p r 0 pi)))))
  11.   (or(="1"Yn)(entdel e)))
  12. (defun c:tt(/ e Yn )
  13.   (initget "1 2")
  14.   (or(member(setq Yn(getkword"1.保留圆(弧) 2.不保留圆(弧)[2]"))'("1""2"))(setq Yn"2"))
  15.   (while(setq e(ssget":E:S"'((0 . "circle,arc"))))
  16.     (tt(ssname e 0)Yn))
  17.   )

回复 支持 1 反对 0

使用道具 举报

发表于 2022-12-5 23:21 | 显示全部楼层
谢谢! 分享函数!
发表于 2022-12-6 08:36 | 显示全部楼层
不错。精华是将一个圆转成两个半圆。
发表于 2022-12-6 08:39 | 显示全部楼层
看着很厉害
发表于 2022-12-6 08:40 | 显示全部楼层
666666666666666666666
发表于 2022-12-6 08:41 | 显示全部楼层
支持,好想法
发表于 2022-12-6 09:18 | 显示全部楼层
本帖最后由 cheefeel 于 2022-12-6 09:21 编辑

确实要的就是这个结果,是否能做成原帖描述的那个LSP呢?
小白不会啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 12:07 , Processed in 0.749356 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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