批量圆转多段线(源码)

网友答:
  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. )


网友答:
ljttjl 发表于 2010-11-1 21:01
圆、椭圆、样条曲线转多段线程序见:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=68784&extra=&pa ...

好东西,收藏了!!!!!!!!

网友答: 本帖最后由 cchessbd 于 2022-12-19 19:34 编辑

可以可以。但是您这个精度有些问题。我改成了40以适合钣金加工的。



网友答: 转换的份数可以选就好了,期待..

网友答: 很简单啊.我也来一个.
  1. (defun gps->Circle-2plinelst (pt r n / ang nang pt1 ptlst)  (setq nang (/ (* 2 pi) n) ang 0)  (repeat n    (setq pt1 (polar pt ang r))        (setq ang (+ ang  nang))         (setq ptlst (append ptlst (list pt1)))   ))
  2. (defun gps->entmake-pline(pt_lst lay clsd)     (entmakex     (append       (list           '(0 . "LWPOLYLINE")       '(100 . "AcDbEntity")       '(100 . "AcDbPolyline")       (cons 8 lay)       (cons 90 (length pt_lst))       (cons 70 clsd); 1闭合       )       (mapcar '(lambda (pt) (cons 10 pt)) pt_lst)     )   ) ) (defun gps->ss-2lst (ss / lst n)  (if (= (type ss) 'PICKSET)    (repeat (setq n (sslength ss))     (setq lst (cons (ssname ss (setq n (1- n))) lst))    )      )  lst)(defun c:cl()  (if (null $fs)(setq $fs 10))    (setq tmp (getint (strcat "\n圆转多段线,请输入等份数量<" (itoa $fs) ">:")))  (if tmp (setq $fs tmp))  (foreach n (gps->ss-2lst (ssget '((0 . "Circle"))))        (setq ptlst (entget n) lay (cdr (assoc 8 ptlst))  pt (cdr (assoc 10 ptlst)) r (cdr (assoc 40 ptlst)))    (gps->entmake-pline (gps->Circle-2plinelst pt r $fs) lay 1)    (entdel n)  )  (prin1))


网友答: 呵呵 ,楼上的这个是将圆变成了多边行,再改该吧(我承认我这个也是,只是多了看不出)

网友答:

圆、椭圆、样条曲线转多段线程序见:

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=68784&extra=&page=1



网友答: 上面的的都太复杂了,其实很简单,最简单的就几行代码就搞定,复杂一点也用不了这么多代码,非常简单的事情!!!!!

网友答:

改天我贴上来!!!



网友答: 本帖最后由 redcat 于 2011-1-18 23:16 编辑


  1. (defun redcat_circle_pl (/ entlst setpick i norm layer center r pro_x)
  2.   (setq setpick (ssget '((0 . "CIRCLE")))
  3. i 0
  4.   ) ;_ 结束setq
  5.   (repeat (sslength setpick)
  6.     (setq entlst (entget (ssname setpick i))) ;_ 结束setq
  7.     (setq norm  (assoc 67 entlst) ;图形在模型空间或图纸空间
  8.    layer  (assoc 8 entlst) ;图层
  9.    center (assoc 10 entlst) ;圆心
  10.    r  (cdr (assoc 40 entlst)) ;半径
  11.    pro_x  (assoc 210 entlst) ;X轴拉伸方向
  12. ;;;....其余代码根据需要自行添加
  13.     ) ;_ 结束setq
  14.     (entmake (list '(0 . "LWPOLYLINE")
  15.      '(100 . "AcDbEntity")
  16.      norm
  17.      '(410 . "Model")
  18.      layer
  19.      '(100 . "AcDbPolyline")
  20.      '(90 . 3)
  21.      '(70 . 0)
  22.      '(43 . 0.0)
  23.      '(38 . 0.0)
  24.      '(39 . 0.0)
  25.      (list 10 (- (cadr center) r) (- (caddr center) r))
  26.      '(40 . 0.0)
  27.      '(41 . 0.0)
  28.      '(42 . 1.0)
  29.      '(91 . 0)
  30.      (list 10 (- (cadr center) r) (+ (caddr center) r))
  31.      '(40 . 0.0)
  32.      '(41 . 0.0)
  33.      '(42 . 1.0)
  34.      '(91 . 0)
  35.      (list 10 (- (cadr center) r) (- (caddr center) r))
  36.      '(40 . 0.0)
  37.      '(41 . 0.0)
  38.      '(42 . 0.46903)
  39.      '(91 . 0)
  40.      pro_x
  41.       ) ;_ 结束list
  42.     ) ;_ 结束entmake
  43.     (entdel (ssname setpick i))
  44.     (setq i (1+ i))
  45.   ) ;_ 结束repeat
  46.   (princ)
  47. ) ;_ 结束defun





网友答: 高手云集啊

网友答: 大家继续讨论不用管我
我只是看看在新论坛里自己的样子
  • 上一篇:提升累加测距程序
  • 下一篇:没有了