cabinsummer 发表于 2012-2-18 18:30:16

呵呵,确实是数学问题。QJCHEN和highflybird应该能解决

Gu_xl 发表于 2012-2-18 20:21:36

本帖最后由 Gu_xl 于 2012-2-18 20:34 编辑

cabinsummer 发表于 2012-2-18 18:30 static/image/common/back.gif
呵呵,确实是数学问题。QJCHEN和highflybird应该能解决
Spline的最小包围框可以通过精度拟合逼近!
下面是我的求任何物体的最小包围框通用函数:

;;;(gxl-GetRealBox e1 d) 获取物体真实实体外矩形框,d为拟合逼近Spline最小长度
;;参数 e1 图元名或Vla对象 d = Spline最小拟合间距
(defun gxl-GetRealBox(E1 D / OBJ MINPOINT MAXPOINT DD PTS LEN)
(if (= 'ENAME (type e1))
    (setq obj (vlax-ename->vla-object e1)) ;_ 转换图元名
    (setq obj e1)
    )
(cond      ((= "AcDbSpline" (vla-get-ObjectName obj))
          (setq      len (vlax-curve-getDistAtParam
                      obj
                      (vlax-curve-getEndParam obj))
                )
          (if (or (equal d 0 1e-6)
                  (> (/ len d) 1000)
                  )
            (setq d (/ len 1000.))
            )
          (setq      ddd
                pts (list (vlax-curve-getStartPoint obj))
                               )
          (while (< dd len)
            (setq pts (cons (vlax-curve-getPointAtDist obj dd) pts)
                  dd(+ dd d)
                  )
            )
          (cons (vlax-curve-getendPoint obj) pts)
          (list      (apply 'mapcar (cons 'min pts))
                (apply 'mapcar (cons 'max pts)))
          )
      (t
         (vla-GetBoundingBox obj 'minpoint 'maxpoint) ;_ 取得包容图元的最大点和最小点
         (setq minpoint (vlax-safearray->list minpoint)) ;_ 把变体数据转化为表
         (setq maxpoint (vlax-safearray->list maxpoint)) ;_ 把变体数据转化为表
         (list minpoint maxpoint)
         )
      )
)


yxh1202 发表于 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有问题啊。

zhengxiansz 发表于 2013-4-9 14:33:21

Gu_xl 发表于 2012-2-18 20:21 static/image/common/back.gif
Spline的最小包围框可以通过精度拟合逼近!
下面是我的求任何物体的最小包围框通用函数:

请问如何才能多选呀
页: 1 [2]
查看完整版本: [讨论]为何求图元外框程序对SPLINE曲线有误差?