找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 921|回复: 14

[求助] 求矩形坐标

[复制链接]
发表于 2021-3-9 17:17:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×

下面的这段代码是在网上找到的求矩形的四个角点的坐标。
为什么求坐标还需要使用这个函数      (vlax-invoke-method obj "GetBoundingBox" 'ptmin 'ptmax)
另外是否有其他更简洁的方法可以求得矩形坐标?
  1. (defun c:jxzb()
  2.   (vl-load-com)
  3.   (if (setq ent (car (entsel "\n请选取水平放置的矩形:")))
  4.     (progn
  5.       (setq obj (vlax-ename->vla-object ent))
  6.       (setq name (vlax-get-property obj "ObjectName"))
  7.       (If (not (wcmatch name "AcDbPolyline,AcDb3dPolyline"))
  8.         (alert "所选取的不多段线!")
  9.         (progn
  10.           (setq pts (vlax-get obj "Coordinates"))
  11.           (cond ((= name "AcDbPolyline") (setq n 2))
  12.             ((= name "AcDb3dPolyline") (setq n 3))
  13.           )
  14.           (setq m (/ (length pts) n))
  15.           (If (/= m 4)
  16.             (alert "所选取的不是矩形!")
  17.             (progn
  18.               (vlax-invoke-method obj "GetBoundingBox" 'ptmin 'ptmax)
  19.               (setq s1 (vlax-safearray->list ptmin)) ;左下角
  20.               (setq s3 (vlax-safearray->list ptmax)) ;右上角
  21.               (setq s2 (list (car s3) (cadr s1) 0)) ;右下角
  22.               (setq s4 (list (car s1) (cadr s3) 0)) ;左上角
  23.               (princ "\n左下角S1=")(princ s1)
  24.               (princ "\n右下角S2=")(princ s2)
  25.               (princ "\n右上角S3=")(princ s3)
  26.               (princ "\n左上角S4=")(princ s4)
  27.             )
  28.           )
  29.         )
  30.       )
  31.     )
  32.   )
  33.   (princ)
  34. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2021-3-10 08:16:27 | 显示全部楼层
GetBoundingBox 应该是获得对象的左下角和右上角两点,可以试试。其他类型对象也可以。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 15:02:26 | 显示全部楼层
mercio 发表于 2021-3-10 08:16
GetBoundingBox 应该是获得对象的左下角和右上角两点,可以试试。其他类型对象也可以。

谢谢,GetBoundingBox函数返回的'minExt  'maxExt两个数据是多边形的什么数值?如果是五边形呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 15:03:55 | 显示全部楼层
mercio 发表于 2021-3-10 08:16
GetBoundingBox 应该是获得对象的左下角和右上角两点,可以试试。其他类型对象也可以。

谢谢,GetBoundingBox函数返回的'minExt  'maxExt两个数据是多边形的什么数值?如果是五边形呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2021-3-10 19:08:47 | 显示全部楼层
我也是刚加入论坛,之前野路子自学的,这种函数论坛里好像是有翻译办,我之前是在帮助里查的。
帮助里的解释是:
Gets two points of a box enclosing the specified object.
我的理解是,一个图形的占地面积对应的,左下角,和右上角。
具体你可以试试,用你的lisp获取对应图形的边缘坐标,再在CAD里看看,这个坐标对应的点在哪。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 110个

财富等级: 日进斗金

发表于 2021-3-11 01:17:41 | 显示全部楼层
好复杂  的样子 不懂
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 11:42:48 | 显示全部楼层
mercio 发表于 2021-3-10 19:08
我也是刚加入论坛,之前野路子自学的,这种函数论坛里好像是有翻译办,我之前是在帮助里查的。
帮助里的解 ...

谢谢,找到了,是对角坐标
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3913个

财富等级: 富可敌国

发表于 2021-3-11 13:47:24 | 显示全部楼层
这样求的目的猜想是:通过左下角、右上角可以方便明确地得到如此顺序的角点“左下角、右下角、右上角、左上角”,水平放置的矩形绘图时顺序并非都如此,当然也可以用(vlax-get obj "Coordinates")得到后,再处理为如此顺序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3913个

财富等级: 富可敌国

发表于 2021-3-11 14:03:57 | 显示全部楼层
  1. (defun c:jxzbA()
  2.   (vl-load-com)
  3.   (if (setq ent (car (entsel "\n请选取水平放置的矩形:")))
  4.     (progn
  5.       (setq obj (vlax-ename->vla-object ent))
  6.       (setq name (vlax-get-property obj "ObjectName"))
  7.       (If (not (wcmatch name "AcDbPolyline,AcDb3dPolyline"))
  8.         (alert "所选取的不多段线!")
  9.         (progn
  10.           (setq pts (vlax-get obj "Coordinates"))
  11.           (cond ((= name "AcDbPolyline") (setq n 2))
  12.                 ((= name "AcDb3dPolyline") (setq n 3))
  13.           )
  14.           (setq m (/ (length pts) n))
  15.           (If (/= m 4)
  16.             (alert "所选取的不是矩形!")
  17.             (progn
  18.               (setq ptb nil)
  19.               (repeat m
  20.                   (if (= name "AcDbPolyline")
  21.                       (setq ptb (cons (list (car pts) (cadr pts)) ptb)
  22.                             pts (cdr (cdr pts))
  23.                       )
  24.                       (setq ptb (cons (list (car pts) (cadr pts) (caddr pts)) ptb)
  25.                             pts (cdr (cdr (cdr pts)))
  26.                       )
  27.                   )
  28.               )
  29.               (setq s1 (apply 'mapcar (cons 'min ptb))) ;左下角
  30.               (setq s3 (apply 'mapcar (cons 'max ptb))) ;右上角
  31.               (if (= (length s1) 2) (setq s1 (list (car s1) (cadr s1) 0)))
  32.               (if (= (length s3) 2) (setq s3 (list (car s3) (cadr s3) 0)))
  33.               (setq s2 (list (car s3) (cadr s1) 0)) ;右下角
  34.               (setq s4 (list (car s1) (cadr s3) 0)) ;左上角
  35.               (princ "\n左下角S1=")(princ s1)
  36.               (princ "\n右下角S2=")(princ s2)
  37.               (princ "\n右上角S3=")(princ s3)
  38.               (princ "\n左上角S4=")(princ s4)
  39.             )
  40.           )
  41.         )
  42.       )
  43.     )
  44.   )
  45.   (princ)
  46. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 756个

财富等级: 财运亨通

发表于 2021-3-12 09:53:13 | 显示全部楼层
enclosing —— 围,围住图形矩形框(不存在的虚框)的左下和右上点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-15 14:32:54 | 显示全部楼层

谢谢,这是另一个方法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-17 16:26:44 | 显示全部楼层
hh_lj007 发表于 2021-3-12 09:53
enclosing —— 围,围住图形矩形框(不存在的虚框)的左下和右上点

enclosing 没有这个函数吧

点评

没有enclose函数,是形容GetBoundingBox的效果  详情 回复 发表于 2021-3-17 17:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 756个

财富等级: 财运亨通

发表于 2021-3-17 17:56:19 | 显示全部楼层
iamzhangxs 发表于 2021-3-17 16:26
enclosing 没有这个函数吧

没有enclose函数,是形容GetBoundingBox的效果
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-17 18:36:10 | 显示全部楼层
hh_lj007 发表于 2021-3-17 17:56
没有enclose函数,是形容GetBoundingBox的效果

是的,我也发现了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2021-3-18 11:09:16 | 显示全部楼层
楼主这个代码是求四点多段线的矩形外包框的四点坐标,对象不是矩形,只要是四点多段线应该能运行

获取各点坐标很简单啊,多段线去找群码10的表
一行代码解决:
  (mapcar 'cdr (vl-remove-if-not '(lambda(x) (= 10 (car x))) (entget (car (entsel)))))

如果想知道四个点的位置,再判断就是了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 11:01 , Processed in 0.377645 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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