明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: ZZXXQQ

[讨论]为何求图元外框程序对SPLINE曲线有误差?

  [复制链接]
发表于 2012-2-18 18:30:16 | 显示全部楼层
呵呵,确实是数学问题。QJCHEN和highflybird应该能解决
发表于 2012-2-18 20:21:36 | 显示全部楼层
本帖最后由 Gu_xl 于 2012-2-18 20:34 编辑
cabinsummer 发表于 2012-2-18 18:30
呵呵,确实是数学问题。QJCHEN和highflybird应该能解决

Spline的最小包围框可以通过精度拟合逼近!
下面是我的求任何物体的最小包围框通用函数:
  1. ;;;(gxl-GetRealBox e1 d) 获取物体真实实体外矩形框,d为拟合逼近Spline最小长度
  2. ;;参数 e1 图元名或Vla对象 d = Spline最小拟合间距
  3. (defun gxl-GetRealBox  (E1 D / OBJ MINPOINT MAXPOINT DD PTS LEN)
  4.   (if (= 'ENAME (type e1))
  5.     (setq obj (vlax-ename->vla-object e1)) ;_ 转换图元名
  6.     (setq obj e1)
  7.     )
  8.   (cond        ((= "AcDbSpline" (vla-get-ObjectName obj))
  9.           (setq        len (vlax-curve-getDistAtParam
  10.                       obj
  11.                       (vlax-curve-getEndParam obj))
  12.                 )
  13.           (if (or (equal d 0 1e-6)
  14.                   (> (/ len d) 1000)
  15.                   )
  16.             (setq d (/ len 1000.))
  17.             )
  18.           (setq        dd  d
  19.                 pts (list (vlax-curve-getStartPoint obj))
  20.                                )
  21.           (while (< dd len)
  22.             (setq pts (cons (vlax-curve-getPointAtDist obj dd) pts)
  23.                   dd  (+ dd d)
  24.                   )
  25.             )
  26.           (cons (vlax-curve-getendPoint obj) pts)
  27.           (list        (apply 'mapcar (cons 'min pts))
  28.                 (apply 'mapcar (cons 'max pts)))
  29.           )
  30.         (t
  31.          (vla-GetBoundingBox obj 'minpoint 'maxpoint) ;_ 取得包容图元的最大点和最小点
  32.          (setq minpoint (vlax-safearray->list minpoint)) ;_ 把变体数据转化为表
  33.          (setq maxpoint (vlax-safearray->list maxpoint)) ;_ 把变体数据转化为表
  34.          (list minpoint maxpoint)
  35.          )
  36.         )
  37.   )


评分

参与人数 1明经币 +3 金钱 +30 收起 理由
ZZXXQQ + 3 + 30 赞一个!

查看全部评分

发表于 2012-2-18 22:37:15 | 显示全部楼层
;我做了修改
(DEFUN C:waik ()
(vl-load-com)

(SETVAR "CMDECHO" 0)

(SETQ OLDOS (GETVAR "OSMODE"))

(IF (SETQ S1 (CAR (ENTSEL "\nSelect One Object 选择一个图元 :"))) (PROGN

  (vla-getboundingbox (vlax-ename->vla-object S1) 'minpoint 'maxpoint)

  (setq pmax (vlax-safearray->list maxpoint)

        pmin (vlax-safearray->list minpoint))
   (setq bk1 (- 10 (car pmin))
         bk2 (- 10 (cadr pmin))
         bk3 (+ 10 (car pmax))
         bk4 (+ 10 (cadr pmax)))
    (setq pmin (list bk1 bk2))
    (setq pmax (list bk3 bk4))

  (SETVAR "OSMODE" 0)
  (COMMAND ".RECTANG" PMIN PMAX)

  (SETVAR "OSMODE" OLDOS)

))

(SETVAR "CMDECHO" 1)

(PRINC)

)

为何左下角的坐标偏移10有问题啊。

发表于 2013-4-9 14:33:21 | 显示全部楼层
Gu_xl 发表于 2012-2-18 20:21
Spline的最小包围框可以通过精度拟合逼近!
下面是我的求任何物体的最小包围框通用函数:

请问如何才能多选呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-30 18:04 , Processed in 0.169571 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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