明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2024|回复: 11

[提问] 图形最大外形的点坐标

[复制链接]
发表于 2018-4-3 12:44 | 显示全部楼层 |阅读模式
5明经币
求一个能框选图形后(如下图一所示的图形),自动算出图形的最大外形(如图2的洋红色线),并给出最大外形上的4个点 pt1 pt2 pt3 pt4  的坐标值,不需要画出最大外形,谢谢了


附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

vla-getboundingbox 的典型用法: ;;调用 (GetsBox (ssget)) 即可 (defun GetsBox (ss / n zx ys x y) (repeat (setq n (sslength ss)) (vla-getboundingbox (vlax-ename->vla-object (ssname ss (setq n (1- n)))) 'x 'y) (setq zx (cons (vlax-safearray->list x) zx) ys (cons (vlax-safearray->list y) ys)) )(mapcar '(lambda(a b)(apply 'mapcar (cons a b)))'(min max)(list zx ys)) )
发表于 2018-4-3 12:44 | 显示全部楼层
vla-getboundingbox 的典型用法:

;;调用 (GetsBox  (ssget)) 即可
(defun GetsBox (ss / n zx ys x y)
(repeat (setq n (sslength ss))
(vla-getboundingbox (vlax-ename->vla-object (ssname ss (setq n (1- n)))) 'x 'y)
(setq zx (cons (vlax-safearray->list x) zx)
        ys (cons (vlax-safearray->list y) ys))
)(mapcar '(lambda(a b)(apply 'mapcar (cons a b)))'(min max)(list zx ys))
)
回复

使用道具 举报

发表于 2018-4-3 15:53 | 显示全部楼层
  1. ;;;点表的左下点和右上点
  2. (defun AYL-GetBoxAtPtLst (PtLst)
  3.   (list
  4.     (apply (function mapcar) (cons (function min) PtLst))
  5.     (apply (function mapcar) (cons (function max) PtLst))
  6.   )
  7. )
回复

使用道具 举报

 楼主| 发表于 2018-4-3 17:35 | 显示全部楼层

能把4个角的坐标都搞出来吗
回复

使用道具 举报

 楼主| 发表于 2018-4-3 17:36 | 显示全部楼层
要支持图块哦,因为有些图是图块的
回复

使用道具 举报

 楼主| 发表于 2018-4-3 17:43 | 显示全部楼层
yxp 发表于 2018-4-3 15:09
vla-getboundingbox 的典型用法:

;;调用 (GetsBox  (ssget)) 即可

谢谢院长,我试试
回复

使用道具 举报

 楼主| 发表于 2018-4-3 19:26 | 显示全部楼层
@yxp @nzl1116 能详细点吗,我想要的就是如下图所示的程序的那样的4个点,我可以把那4个点pt1  pt2  pt3  pt4拿来画线或者做别的什么,谢谢了


  1. (defun C:34 (/ PT1 PT2 PT3 PT4)
  2.    (graphscr)
  3.    (setq oldlay (getvar "clayer"))
  4. (setq nl(car (entsel "選取:")))
  5. (vla-getboundingbox (vlax-ename->vla-object nl) 'll 'ur)
  6. (setq pt1 (vlax-safearray->list ll))
  7. (setq pt3 (vlax-safearray->list ur))
  8.    (setq PT2 (list (car PT1)(cadr PT3)))
  9.    (setq PT4 (list (car PT3)(cadr PT1)))
  10.    (command "Pline" PT1 PT3 "")
  11.    (command "Pline" PT2 PT4 "")
  12.    (command "RECTANGLE" PT1 PT3 "")
  13.   (command "color" "bylayer")
  14.    (setvar "clayer" oldlay)
回复

使用道具 举报

发表于 2018-4-3 21:30 | 显示全部楼层
加载GetssBox后执行:
(command "RECTANG" (car (setq pt (GetssBox (ssget)))) (cadr pt))
回复

使用道具 举报

 楼主| 发表于 2018-4-4 08:14 | 显示全部楼层
本帖最后由 yxl88168 于 2018-7-13 13:31 编辑
yxp 发表于 2018-4-3 21:30
加载GetssBox后执行:
(command "RECTANG" (car (setq pt (GetssBox (ssget)))) (cadr pt))

我不是要最大外形,我要的是4个点,
回复

使用道具 举报

发表于 2018-4-4 17:58 | 显示全部楼层
应该是最小外包矩形
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 12:17 , Processed in 3.092167 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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