明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: dkj0322

[资源] [分享]批量圆转多段线(源码)

  [复制链接]
发表于 2010-12-7 09:33:19 | 显示全部楼层
本帖最后由 zxdcad 于 2010-12-7 09:57 编辑

用PL绘制圆弧再闭合是比较简单的一种方式生成多段线圆,


      ((= (cdr TC) "CIRCLE")
       (setq xy (cdr (assoc 10 b1)))
       (setq xy0 (trans xy 0 1))
       (setq ra (cdr (assoc 40 b1)))
       (setq ks (polar xy0 0 ra))
       (entdel ty)
       (command "pline" ks "w" kd kd "a" "ce" xy0 "a" 180 "cl")
      )
发表于 2010-12-7 16:18:30 | 显示全部楼层
这程序好像不应该收费。。。个人意见
发表于 2010-12-7 17:19:55 | 显示全部楼层
圆转多线 应该是转成 圆环吧  
发表于 2010-12-7 18:13:11 | 显示全部楼层
本帖最后由 Gu_xl 于 2010-12-7 19:01 编辑

我也来一个,ActiveX方法的!


  1. (defun c:tt(/ modelspace)
  2.   
  3.   (setq oldosmode (getvar "osmode")
  4. oldcmdecho (getvar "cmdecho")
  5. )
  6.   (setq modelspace (vla-get-ModelSpace (vla-get-activedocument(vlax-get-acad-object))))
  7.   (setvar "osmode" 0)
  8.   (setvar "cmdecho" 0)
  9.   (setq ss (ssget '((0 . "circle"))))
  10.   (setq k 0)
  11.   (if ss
  12.     (repeat (sslength ss)
  13.       (setq en (ssname ss k))
  14.       (setq cp (cdr (assoc 10 (setq enl (entget en))))
  15.      r (cdr (assoc 40 enl))
  16.      )
  17.       (setq p1 (polar cp pi r)
  18.      p2 (polar cp 0 r)
  19.      )
  20.       (setq pts (list p1 p2)
  21.      pts (mapcar '(lambda (x) (list (car x) (cadr x))) pts)
  22.       n (* 2 (length pts))
  23.      )
  24.       (setq arypts (vlax-make-variant
  25.        (vlax-safearray-fill
  26.          (vlax-make-safearray vlax-vbdouble (cons 1 n))
  27.          (apply 'append pts)
  28.        ) ;_ vlax-safearray-fill
  29.      ) ;_ vlax-make-variant
  30.       ) ;_ setq
  31.       (setq obj (vla-AddLightWeightPolyline modelspace arypts))
  32.       (vla-put-Closed obj :vlax-true)
  33.       (vla-SetBulge obj 0 1)
  34.       (vla-SetBulge obj 1 1)
  35.       (setq k (1+ k))
  36.       (command "_matchprop" en (entlast) "")
  37.       (entdel en)
  38.       )
  39.     )
  40.     (setvar "osmode" oldosmode)
  41.   (setvar "cmdecho" oldcmdecho)
  42.   )
发表于 2010-12-7 18:29:44 | 显示全部楼层
  1. ;; circle → 多段线
  2. (defun c:tt ()
  3.   (defun dxf (code elist) (cdr (assoc code elist)))
  4.   (setq        ss (ssget '((0 . "circle")))
  5.         n  -1
  6.   )
  7.   (while (setq s1 (ssname ss (setq n (1+ n))))
  8.     (setq et (entget s1)
  9.           pt (dxf 10 et)
  10.           r  (* (dxf 40 et) 2)
  11.     )
  12.     (command "donut" r r "non" pt "")
  13.     (entdel s1)
  14.   )
  15.   (princ)
  16. )
回复 支持 1 反对 0

使用道具 举报

发表于 2010-12-7 21:44:00 | 显示全部楼层
感谢诸位高手分享程序!
发表于 2013-11-11 21:58:45 | 显示全部楼层
高手啊,可以来个逆向的么,我需要将多线段转为圆,怎么搞,请高手帮忙
发表于 2013-11-12 07:00:21 | 显示全部楼层
都不错。值得学习
发表于 2013-11-13 20:06:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2013-11-14 18:33:38 | 显示全部楼层
xyp1964 发表于 2010-12-7 18:29

当UCS与WCS不一致时,转换后的多段线的圆与原来的圆不在同一位置哦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 04:36 , Processed in 0.185661 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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