开宝马的浪子 发表于 2011-8-3 22:57:13

图形最大边界

      各位大虾,请问这个lisp程序该怎么写,用什么函数;


根据左边图形的最大边界线(右图中的小长方形),画一个方形(右图红色),使该红方形与小方形(右图)每边最小距离3mm以上,且保证红方形的每边长度为0.5的N倍(N为整数)。请 各位指教,多谢

Andyhon 发表于 2011-8-4 08:20:50

外框线前不久才讨论过....
----------------------------------
每边长度为0.5的N倍

Command: (/ (fix (* (+ 5.01 0.5) 2)) 2.0)
5.5

Command: (/ (fix (* (+ 5.51 0.5) 2)) 2.0)
6.0

Command: (/ (fix (* (+ 5.49 0.5) 2)) 2.0)
5.5

Command: (/ (fix (* (+ 5.99 0.5) 2)) 2.0)
6.0

开宝马的浪子 发表于 2011-8-4 12:20:36

呵呵,我是新注册的,多谢你的解答

开宝马的浪子 发表于 2011-8-4 12:41:05

ANDYHON,能发个链接吗,找了,但没找到,多谢

kx820506 发表于 2011-8-8 18:26:35

学习了,谢谢

AMTONNY 发表于 2011-8-8 19:07:20

楼主怎么搞的,前几天刚有人讨论过这个,你找找看呀,两个星期内的贴子都有的入块画外形程序了

Andyhon 发表于 2011-8-8 19:35:59

..但没找到...
只是有个印象耳
So,链接您得寻觅哩

pxt2001 发表于 2011-8-8 22:11:05

以前收集的,可能有用。
;By Longxin 明经通道 2005.06
;;取得实体外矩形框
;;例:(getbox 图元名)
;;返回:((x1 y1 z1)_min (x2 y2 z2)_max)
(defun getbox (e1 / obj minpoint maxpoint)
(setq obj (vlax-ename->vla-object e1)) ;转换图元名
(vla-GetBoundingBox obj 'minpoint 'maxpoint)
                                        ;取得包容图元的最大点和最小点
(setq minpoint (vlax-safearray->list minpoint)) ;把变体数据转化为表
(setq maxpoint (vlax-safearray->list maxpoint)) ;把变体数据转化为表
;;(command "box" minpoint maxpoint 2)
(setq obj (list minpoint maxpoint))
)

xiaolong1487 发表于 2012-5-17 17:27:53

找好久都找不到,就要2D的,不要3D的!选几个线和几个其它的图元,画出个最大外框!哎

logoin 发表于 2012-5-17 20:23:32

支持选择集的,自已扩展一下就可以了
(setq testSS (ssget))
(if testSS
(progn
(vl-load-com)
(setq Obj (vlax-ename->vla-object (ssname testSS 0)))
(vla-GetBoundingBox obj 'minpoint 'maxpoint)
(setq minX (car (vlax-safearray->list minpoint)))
(setq minY (cadr (vlax-safearray->list minpoint)))
(setq maxX (car (vlax-safearray->list maxpoint)))
(setq maxY (cadr (vlax-safearray->list maxpoint)))
(setq index 0)
(while (< index (sslength testSS))
(setq Obj (vlax-ename->vla-object (ssname testSS index)))
(vla-GetBoundingBox obj 'minpoint 'maxpoint)
(setq #minX (car (vlax-safearray->list minpoint)))
(setq #minY (cadr (vlax-safearray->list minpoint)))
(setq #maxX (car (vlax-safearray->list maxpoint)))
(setq #maxY (cadr (vlax-safearray->list maxpoint)))
(if (<= #minX minX) (setq minX #minX))
(if (<= #minY minY) (setq minY #minY))
(if (>= #maxX maxX) (setq maxX #maxX))
(if (>= #maxY maxY) (setq maxY #maxY))
    (setq index (1+ index))
    )
       (setq MinPoint (list minX minY))
      (setq MaxPoint (list maxX maxY))
       (vl-cmdf "RECTANG" minPoint MaxPoint)
      )
)
页: [1] 2
查看完整版本: 图形最大边界