明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1592|回复: 15

[提问] 求求 , 怎么获取圆角矩形中的4个圆角的中点坐标啊

[复制链接]
发表于 2024-2-4 14:15:23 | 显示全部楼层 |阅读模式
  1.获取图元
  2.遍历顶点
  3.将相邻顶点间距最小的添加进圆弧列表(怎么在循环中把坐标加入列表啊 ,用setq好像会覆盖)
  4.遍历对比相邻顶点的xy,判断圆角开口方向
  5.将相邻点xy求差值,得出半径,根据半径得出弧长,然后..然后就意识到数学的重要性了..还是不知道咋求

是这样求吗..或者应该用其他的办法实现

本帖子中包含更多资源

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

x
发表于 2024-2-4 14:54:02 | 显示全部楼层
as6424 发表于 2024-2-4 14:47
谢谢老师 , 那我先去试试遍历判断圆弧和判断圆弧开口方向 , 那个 , 我不会将循环中提取的元素添加进指定 ...

其中一种方式,仅供参考
  1. (defun c:tt (/ e p1 p2 p3 p4)
  2.         (if (setq e (car (entsel)))
  3.                 (mapcar '(lambda(x)(vlax-curve-getClosestPointTo e x))
  4.                         (progn
  5.                                 (vla-GetBoundingBox (vlax-ename->vla-object e) 'p1 'p3)
  6.                                 (setq p1 (vlax-safearray->list p1)
  7.                                         p3 (vlax-safearray->list p3)
  8.                                         p2 (list (car p3)(cadr p1) 0.0)
  9.                                         p4 (list (car p1)(cadr p3) 0.0)
  10.                                 )
  11.                                 (list p1 p2 p3 p4)
  12.                         )
  13.                 )
  14.         )
  15. )

点评

对于有角度的就不行了  发表于 2024-2-5 11:21

评分

参与人数 1明经币 +1 收起 理由
tigcat + 1 很巧妙

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2024-2-7 09:01:25 | 显示全部楼层
炸开法
  1. (defun c:tt  (/ obj)
  2.     (setq obj (vlax-ename->vla-object (car (entsel))))
  3.     (foreach obj  (vlax-safearray->list
  4.                       (vlax-variant-value (vla-explode obj)))
  5.         (if (= "AcDbArc" (vla-get-ObjectName obj))
  6.             (entmake
  7.                 (list
  8.                     '(0 . "point")
  9.                     (cons 10
  10.                           (vlax-curve-getpointatparam
  11.                               obj
  12.                               (* 0.5
  13.                                  (+ (vlax-curve-getstartparam
  14.                                         obj)
  15.                                     (vlax-curve-getendparam
  16.                                         obj))))))))
  17.         (vla-delete obj)))

评分

参与人数 1明经币 +1 收起 理由
xyp1964 + 1 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2024-2-5 11:20:33 | 显示全部楼层
这个稍微通用一点
  1. (defun c:tt  (/ en i pt1 pt2 pt3 u v)
  2.     (setq en (car (entsel))
  3.           i  (vlax-curve-getendparam en))
  4.     (repeat (fix i)
  5.         (setq pt1 (vlax-curve-getpointatparam en i)
  6.               pt2 (vlax-curve-getpointatparam en (1- i)))
  7.         (setq pt3 (vlax-curve-getpointatparam
  8.                       en
  9.                       (+ (setq i (1- i)) 0.5))
  10.               u          (mapcar '- pt1 pt3)
  11.               v          (mapcar '- pt2 pt3))
  12.         (if (not (equal        '(0. 0. 0.)
  13.                         (list (- (* (cadr u) (caddr v))
  14.                                  (* (cadr v) (caddr u)))
  15.                               (- (* (car v) (caddr u))
  16.                                  (* (car u) (caddr v)))
  17.                               (- (* (car u) (cadr v))
  18.                                  (* (car v) (cadr u))))
  19.                         1e-6))
  20.             (entmake (list '(0 . "point") (cons 10 pt3))))))
发表于 2024-2-4 14:21:35 | 显示全部楼层
包围盒顶点到曲线的最近点
 楼主| 发表于 2024-2-4 14:47:28 | 显示全部楼层
bonny 发表于 2024-2-4 14:21
包围盒顶点到曲线的最近点

谢谢老师 , 那我先去试试遍历判断圆弧和判断圆弧开口方向 , 那个 , 我不会将循环中提取的元素添加进指定列表 , 是只能用cons吗 , 不能用下标指定赋值吗
发表于 2024-2-4 14:53:57 | 显示全部楼层
遍历polyline的时候有凸度,从而判断是弧段,也可以根据正负数判断开口方向,接着自己算也好,用曲线求长度也行
 楼主| 发表于 2024-2-5 09:44:18 | 显示全部楼层
bonny 发表于 2024-2-4 14:54
其中一种方式,仅供参考

谢谢老师 , 我去学习下lambda和mapcar
 楼主| 发表于 2024-2-5 09:47:35 | 显示全部楼层
你有种再说一遍 发表于 2024-2-4 14:53
遍历polyline的时候有凸度,从而判断是弧段,也可以根据正负数判断开口方向,接着自己算也好,用曲线求长度也行

谢谢老师提供思路 , 不过目前甚至不理解凸度..
 楼主| 发表于 2024-2-5 13:27:36 | 显示全部楼层
x_s_s_1 发表于 2024-2-5 11:20
这个稍微通用一点

我消化一下, 谢谢老师
发表于 2024-2-5 13:54:19 | 显示全部楼层
复制炸开求圆心最直接
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 23:27 , Processed in 0.186857 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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