明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1301|回复: 3

样条曲线表示任意图形

[复制链接]
发表于 2011-3-24 15:52:16 | 显示全部楼层 |阅读模式
AutoCAD中,对于一个任意图形(如直线、圆弧、多段线、样条曲线等组合),能否用样条曲线把这个图形统一表示出来???请求大家指点!!!

该贴已经同步到 Jully的微博
发表于 2011-4-15 21:28:10 | 显示全部楼层
本帖最后由 mandala 于 2011-4-15 21:44 编辑

如果这个图形是连续的话,可以将其连成一条多段线。用样条曲线的话,我好像只能想到用多段线相连后,再每隔一个小单位长度取一个点,然后连起来。但用样条曲线连线,会使图形失真。有必要去这么连吗?
发表于 2011-4-15 21:37:57 | 显示全部楼层
本帖最后由 mandala 于 2011-4-15 21:39 编辑

可以参考一下我写的一个lsp,其中连线的模糊距离设置为0.1,你可按需要修改。

  1. ;;子程序,将输入选择集ssp中的LINE,POLYLINE,LWPOLYLINE,SPLINE,ARC,circle,统一变成LWPOLYLINE,
  2. ;;如果其中有首尾相连的线,则连接成一条LWPOLYLINE,
  3. ;;最后返回一个名为xss的选择集。
  4. (defun connectbypline (ssp / a xss xn ent)
  5.   (acet-autoload2 '("FLATTENSUP.LSP" (acet-flatn ss hide)))
  6.   ;;加载flatten函数
  7.   (setq a   0
  8. xss (ssadd)
  9.   ) ;_ 结束setq
  10.   (if
  11.     (and (= (sslength ssp) 1)
  12.   (or (= (cdr (assoc 0 (entget (ssname ssp 0)))) "LWPOLYLINE")
  13.       (= (cdr (assoc 0 (entget (ssname ssp 0)))) "POLYLINE")
  14.   ) ;_ 结束or
  15.     ) ;_ 结束and
  16.      (ssadd (ssname ssp 0) xss)
  17.      ;;当选中的仅有一条pline的时候另作处理。
  18.      (progn
  19.        ;;如果有很多图元的话,全部变成pline并加入选择集xss:
  20.        (repeat (sslength ssp)
  21.   (setq xn (ssname ssp a))
  22.   (setq ent (entget xn))
  23.   (cond
  24.     ((= (cdr (assoc 0 ent)) "LWPOLYLINE")
  25.      (ssadd xn xss)
  26.     )
  27.     ((= (cdr (assoc 0 ent)) "POLYLINE")
  28.      (ssadd xn xss)
  29.     )
  30.     ((= (cdr (assoc 0 ent)) "LINE")
  31.      (command "pedit" xn "y" "")
  32.      (setq xn (entlast))
  33.      (ssadd xn xss)
  34.     )
  35.     ((= (cdr (assoc 0 ent)) "SPLINE")
  36.      (setq ss (ssadd))
  37.      (ssadd xn ss)
  38.      (acet-flatn ss nil)
  39.      (setq xn (entlast))
  40.      (ssadd xn xss)
  41.     )
  42.     ((= (cdr (assoc 0 ent)) "ARC")
  43.      (command "pedit" xn "y" "")
  44.      (setq xn (entlast))
  45.      (ssadd xn xss)
  46.     )
  47.     ((= (cdr (assoc 0 ENT)) "CIRCLE")
  48.      ;;圆的处理比较复杂
  49.      (setq cp (cdr (assoc 10 ent))
  50.     r  (cdr (assoc 40 ent))
  51.      ) ;_ 结束setq
  52.      (entmake
  53.        (setq lst (list
  54.      '(0 . "LWPOLYLINE")
  55.      '(100 . "AcDbEntity")
  56.      '(67 . 0)
  57.      '(410 . "Model")
  58.      '(100 . "AcDbPolyline")
  59.      '(90 . 2)
  60.      '(70 . 129)
  61.      (cons 10 (polar cp 0 r))
  62.      '(40 . 0)
  63.      '(41 . 0)
  64.      '(42 . -1)
  65.      (cons 10 (polar cp pi r))
  66.      '(40 . 0)
  67.      '(41 . 0)
  68.      '(42 . -1)
  69.    )  ;list
  70.        )    ;setq
  71.      )    ;entmake
  72.      (command "_matchprop" xn (entlast) "")
  73.      (entdel xn)
  74.      (setq xn (entlast))
  75.      (ssadd xn xss)
  76.     )
  77.   )    ;cond
  78.   (setq a (+ a 1))
  79.        )    ;repeat,以上将每个图元都变成pline并加入了选择集。
  80.        (command "pedit" "m" xss "" "j" 0.1 "")
  81.        ;;把能连的连上。
  82.        (setq xss xss)
  83.      )     ;progn
  84.   )     ;if
  85. ) ;_ 结束defun


发表于 2011-4-16 07:16:07 | 显示全部楼层
本帖最后由 raimo 于 2011-4-16 07:17 编辑

直接多段线闭合选择范围就好啦,样条曲线点数太多,如果用自动的更难保证合适的分段数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-10 13:13 , Processed in 0.159145 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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