找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: lucas3

[求助] SPLINE 转 CIRCLE

[复制链接]
发表于 2014-4-17 22:03:34 | 显示全部楼层
zwwen12 发表于 2014-4-17 20:06
(defun ax:Centroid (poly / pl ms va reg cen)
  (setq pl (vlax-ename->vla-object poly)
ms (vla-g ...

(repeat (+ 1 (sslength SS))改为 (repeat (sslength SS),即可把后面错误去掉。
此命令主要用于多段线转圆,考虑到要检查效果,所以没有删掉原先的多段线或样条曲线。如果要删除,可以再输入删除,"p"(最后选择集)即可。

点评

谢谢!那对于不是一条封闭的SPLINE,而是多条组成的呢?  详情 回复 发表于 2014-4-17 23:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-4-17 23:47:27 | 显示全部楼层
zwwen12 发表于 2014-4-17 22:03
(repeat (+ 1 (sslength SS))改为 (repeat (sslength SS),即可把后面错误去掉。
此命令主要用于多段线 ...

谢谢!那对于不是一条封闭的SPLINE,而是多条组成的呢?
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:test2.rar 
下载次数:16  文件大小:18.24 KB 
下载权限: 不限 以上  [免费赚D豆]


点评

对于这种,给个思路,取得几段样条曲线的端点,三点画圆。  详情 回复 发表于 2014-4-18 21:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

发表于 2014-4-18 11:56:30 | 显示全部楼层
很好,学习了!但前辈们可不可以出一招。多段线转成线呢?这是类似于圆的多段线。但如果是圆弧呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-4-18 13:31:24 来自手机 | 显示全部楼层
xtdwynij 发表于 2014-4-18 11:56
很好,学习了!但前辈们可不可以出一招。多段线转成线呢?这是类似于圆的多段线。但如果是圆弧呢?

pline不是线?!

点评

不知道怎么说。楼主那样的转换LINE和ARC和CIRCLE 这样子。还没有开始学习。不过找到了G版的!现附上。不过转换出来的线有角,好像不怎么圆滑。  详情 回复 发表于 2014-4-18 17:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

发表于 2014-4-18 17:41:07 | 显示全部楼层
  1. (defun c:tt (/ d ss pl enl)
  2.   (setq d (getreal "\n输入弦高容差<0.5>"))
  3.   (if (null d)
  4.     (setq d 0.5)
  5.   )
  6.   (while (setq ss (ssget '((0 . "*line,arc,circle,ellipse"))))
  7.     (repeat (setq n (sslength ss))
  8.       (setq e (ssname ss (setq n (1- n))))
  9.       (setq pl (GXL-GETSAMPLET e d))
  10.       (setq enl
  11.              (list
  12.                '(0 . "LWPOLYLINE")
  13.                '(100 . "AcDbEntity")
  14.                '(100 . "AcDbPolyline")
  15.                (cons 90 (length pl))
  16.              )
  17.       )
  18.       (setq enl (append enl (mapcar '(lambda (x) (cons 10 x)) pl)))
  19.       (entmake enl)
  20.       (entdel e)
  21.     )
  22.   )
  23.   (princ)
  24. )
  25. (defun gxl-GetSamplet (CURVE D / PerDistToLine GETPOINTS NAME DXF PL I)
  26.   (defun PerDistToLine (pt p1 p2 / norm)
  27.     (setq norm (mapcar '- p2 p1)
  28.     p1   (trans p1 0 norm)
  29.     pt   (trans pt 0 norm)
  30.     )
  31.     (abs (- (car pt) (car p1)))
  32.   )
  33.   (defun getpoints (curve stPar enPar d / ps pe pm)
  34.     (setq ps (vlax-curve-getPointAtParam curve stPar)
  35.     pe (vlax-curve-getPointAtParam curve enPar)
  36.     pm (vlax-curve-getPointAtParam curve (* 0.5 (+ stPar enPar)))
  37.     )
  38.     (if  (<= (PerDistToLine pm ps pe) d)
  39.       (list pe)
  40.       (append (getpoints curve stpar (* 0.5 (+ stPar enPar)) d)
  41.         (getpoints curve (* 0.5 (+ stPar enPar)) enPar d)
  42.       )
  43.     )
  44.   )
  45.   (if (= 'vla-object (type curve))
  46.     (setq curve (vlax-vla-object->ename curve))
  47.   )
  48.   (cond
  49.     ((=  "LINE"
  50.   (setq name (cdr (assoc 0 (setq dxf (entget curve)))))
  51.      )
  52.      (list (vlax-curve-getStartPoint curve)
  53.      (vlax-curve-getEndPoint curve)
  54.      )
  55.     )
  56.     ((= "ARC" name)
  57.      (cons (vlax-curve-getstartpoint curve)
  58.      (getpoints curve
  59.           (vlax-curve-getStartParam curve)
  60.           (vlax-curve-getEndParam curve)
  61.           d
  62.      )
  63.      )
  64.     )
  65.     ((= "CIRCLE" name)
  66.      (cons (vlax-curve-getstartpoint curve)
  67.      (append
  68.        (getpoints  curve
  69.       0
  70.       pi
  71.       d
  72.        )
  73.        (getpoints  curve
  74.       pi
  75.       2pi
  76.       d
  77.        )
  78.      )
  79.      )
  80.     )
  81.     ((= "ELLIPSE" name)
  82.      (if (vlax-curve-isClosed curve)
  83.        (cons (vlax-curve-getstartpoint curve)
  84.        (append
  85.          (getpoints curve
  86.         0
  87.         pi
  88.         d
  89.          )
  90.          (getpoints curve
  91.         pi
  92.         2pi
  93.         d
  94.          )
  95.        )
  96.        )
  97.        (cons (vlax-curve-getstartpoint curve)
  98.        (getpoints  curve
  99.       (vlax-curve-getStartParam curve)
  100.       (vlax-curve-getEndParam curve)
  101.       d
  102.        )
  103.        )
  104.      )
  105.     )
  106.     ((= "SPLINE" name)
  107.      (setq
  108.        pl (mapcar 'cdr
  109.       (vl-remove-if-not '(lambda (x) (= 11 (car x))) dxf)
  110.     )
  111.      )
  112.      (if (not pl)
  113.        (setq pl
  114.         (mapcar
  115.     '(lambda (x) (vlax-curve-getclosestpointto curve (cdr x)))
  116.     (vl-remove-if-not '(lambda (x) (= 10 (car x))) dxf)
  117.         )
  118.        )
  119.      )
  120.      (setq pl (mapcar '(lambda (x)
  121.        (vlax-curve-getParamAtPoint
  122.          curve
  123.          x
  124.        )
  125.            )
  126.           pl
  127.         )
  128.      )
  129.      (if (vlax-curve-isClosed curve)
  130.        (setq
  131.    pl (reverse
  132.         (cons (vlax-curve-getEndParam curve) (cdr (reverse pl)))
  133.       )
  134.        )
  135.      )
  136.      (setq pl (mapcar 'list pl (cdr pl))
  137.      )
  138.      (setq pl
  139.       (apply 'append
  140.        (mapcar
  141.          '(lambda (x)
  142.       (list
  143.         (list (car x) (* 0.5 (apply '+ x)))
  144.         (list (* 0.5 (apply '+ x)) (cadr x))
  145.       )
  146.           )
  147.          pl
  148.        )
  149.       )
  150.      )
  151.      (cons
  152.        (vlax-curve-getStartPoint curve)
  153.        (apply
  154.    'append
  155.    (mapcar '(lambda (x)
  156.         (apply 'GETPOINTS (append (cons curve x) (list d)))
  157.       )
  158.      pl
  159.    )
  160.        )
  161.      )
  162.     )
  163.     ((WCMATCH name "*POLYLINE")
  164.      (setq pl nil
  165.      i  -1
  166.      )
  167.      (while (< i (vlax-curve-getEndParam curve))
  168.        (setq pl (cons (setq i (1+ i)) pl))
  169.      )
  170.      (setq pl (reverse pl)
  171.      pl (mapcar 'list pl (cdr pl))
  172.      )
  173.      (cons
  174.        (vlax-curve-getStartPoint curve)
  175.        (apply
  176.    'append
  177.    (mapcar '(lambda (x)
  178.         (apply 'GETPOINTS (append (cons curve x) (list d)))
  179.       )
  180.      pl
  181.    )
  182.        )
  183.      )
  184.     )
  185.   )
  186. )
不知道怎么说。楼主那样的转换LINE和ARC和CIRCLE 这样子。还没有开始学习。不过找到了G版的!现附上。不过转换出来的线有角,好像不怎么圆滑。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-4-18 21:15:04 | 显示全部楼层
lucas3 发表于 2014-4-17 23:47
谢谢!那对于不是一条封闭的SPLINE,而是多条组成的呢?

对于这种,给个思路,取得几段样条曲线的端点,三点画圆。

点评

那对于第一种情况,即封闭的spline又不行了吧,或者说像圆弧的一段spline又怎么处理呢?如果通杀就最好  详情 回复 发表于 2014-4-18 21:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-4-18 21:50:09 | 显示全部楼层
zwwen12 发表于 2014-4-18 21:15
对于这种,给个思路,取得几段样条曲线的端点,三点画圆。

那对于第一种情况,即封闭的spline又不行了吧,或者说像圆弧的一段spline又怎么处理呢?如果通杀就最好

点评

1.取样条曲线的第一点 2.样条曲线的长度 3.得出距离样条曲线第一点长度三分之一之处的点 4.得出距离样条曲线第一点长度三分之二之处的点 5.三点画圆。  详情 回复 发表于 2014-4-18 22:25
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-4-18 22:25:47 | 显示全部楼层
lucas3 发表于 2014-4-18 21:50
那对于第一种情况,即封闭的spline又不行了吧,或者说像圆弧的一段spline又怎么处理呢?如果通杀就最好

1.取样条曲线的第一点
2.样条曲线的长度
3.得出距离样条曲线第一点长度三分之一之处的点
4.得出距离样条曲线第一点长度三分之二之处的点
5.三点画圆。

点评

只知道3点画圆  详情 回复 发表于 2014-4-18 23:00
谢谢大师给思路,太复杂,只能想想啊  详情 回复 发表于 2014-4-18 22:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-4-18 22:31:42 | 显示全部楼层
zwwen12 发表于 2014-4-18 22:25
1.取样条曲线的第一点
2.样条曲线的长度
3.得出距离样条曲线第一点长度三分之一之处的点

谢谢大师给思路,太复杂,只能想想啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-4-18 23:00:18 | 显示全部楼层
本帖最后由 lucas3 于 2014-4-18 23:03 编辑
zwwen12 发表于 2014-4-18 22:25
1.取样条曲线的第一点
2.样条曲线的长度
3.得出距离样条曲线第一点长度三分之一之处的点

只知道3点画圆{:soso_e127:}
  1. (defun c:3PCircle ( / p1 p2 p3 lst )
  2.     (if
  3.         (and
  4.             (setq p1  (getpoint "\nSpecify 1st Point: "))
  5.             (setq p2  (getpoint "\nSpecify 2nd Point: " p1))
  6.             (setq p3  (getpoint "\nSpecify 3rd Point: " p2))
  7.             (setq lst (LM:3PCircle (trans p1 1 0) (trans p2 1 0) (trans p3 1 0)))
  8.         )
  9.         (entmake (append '((0 . "CIRCLE")) (mapcar 'cons '(10 40) lst)))
  10.     )
  11.     (princ)
  12. )

  13. (defun c:3PGrCircle ( / p1 p2 p3 lst cir )
  14.     (if
  15.         (and
  16.             (setq p1  (getpoint "\nSpecify 1st Point: "))
  17.             (setq p2  (getpoint "\nSpecify 2nd Point: " p1))
  18.             (setq p3  (cadr (grread t 13 0)))
  19.             (setq lst (LM:3PCircle (setq p1 (trans p1 1 0)) (setq p2 (trans p2 1 0)) (trans p3 1 0)))
  20.             (setq cir (entmakex (append '((0 . "CIRCLE")) (mapcar 'cons '(10 40) lst))))
  21.             (setq cir (list (cons -1 cir)))
  22.             (princ "\nSpecify 3rd Point: ")
  23.         )
  24.         (while (= 5 (car (setq gr (grread t 13 0))))
  25.             (if (setq lst (LM:3PCircle p1 p2 (trans (cadr gr) 1 0)))
  26.                 (entmod (append cir (mapcar 'cons '(10 40) lst)))
  27.             )
  28.         )
  29.     )
  30.     (princ)
  31. )
  1. ;; 3-Point Circle  -  Lee Mac
  2. ;; Returns the Center and Radius of the Circle defined
  3. ;; by three supplied points.

  4. (defun LM:3PCircle ( p1 p2 p3 / cn m1 m2 )
  5.     (setq m1 (mid p1 p2)
  6.           m2 (mid p2 p3)
  7.     )
  8.     (if
  9.         (setq cn
  10.             (inters
  11.                 m1 (polar m1 (+ (angle p1 p2) (/ pi 2.)) 1.0)
  12.                 m2 (polar m2 (+ (angle p2 p3) (/ pi 2.)) 1.0)
  13.                 nil
  14.             )
  15.         )
  16.         (list cn (distance cn p1))
  17.     )
  18. )

  19. ;; Midpoint  -  Lee Mac
  20. ;; Returns the midpoint of two points

  21. (defun mid ( a b )
  22.     (mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) a b)
  23. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-14 21:51 , Processed in 0.229447 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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