明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 尘缘一生

[提问] 如何取得标注尺寸线的中点?

[复制链接]
发表于 2020-3-18 11:07:05 | 显示全部楼层
尘缘一生 发表于 2020-3-18 10:57
搞出来了,有点位就知道了

你这个求法不行,13 14点位不一定和横线平行的,angle 14 13那个角度不能通用的,两边线经常有长有短。
 楼主| 发表于 2020-3-18 11:10:57 | 显示全部楼层
本帖最后由 尘缘一生 于 2020-3-18 11:23 编辑
start4444 发表于 2020-3-18 11:07
你这个求法不行,13 14点位不一定和横线平行的,angle 14 13那个角度不能通用的,两边线经常有长有短。

奥,这个问题,哪还得研究研究。忘了还有弧标注什么的情况,算法复杂了,。
发表于 2020-3-18 11:57:28 | 显示全部楼层
可根据这个点来做标注避让
发表于 2020-3-18 12:58:20 | 显示全部楼层
(defun c:tt (/ name pt ss t-get-dim-centre)
        (defun T-get-dim-centre (name / ang dxf pt1 pt13 pt14 pt2)
                (setq dxf (entget name))
                (setq pt13 (cdr (assoc 13 dxf)))
                (setq pt14 (cdr (assoc 14 dxf)))
                (setq ang (angle pt13 pt14));获取弧度
                (setq pt1 (polar (cdr (assoc 10 dxf)) ang (/(distance pt13 pt14) 2)))
                (setq pt2 (polar (cdr (assoc 10 dxf)) ang (- (/ (distance pt13 pt14) 2))))
                (if (<
                                        (+ (distance pt1 pt13) (distance pt1 pt14))
                                        (+ (distance pt2 pt13) (distance pt2 pt14))
                                )
                        pt1
                        pt2
                )
        )
        (if (setq ss (ssget '((0 . "DIMENSION"))))
                (progn
                        (while (setq name (ssname ss 0))
                                (setq pt (T-get-dim-centre name))
                                (command "CIRCLE" pt 100)
                                (ssdel name ss)
                        )
                )
        )
)

线性标注还要再判断下
对齐标注没问题
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-18 13:09:29 | 显示全部楼层
taoyi0727 发表于 2020-3-18 12:58
(defun c:tt (/ name pt ss t-get-dim-centre)
        (defun T-get-dim-centre (name / ang dxf pt1 pt13 pt14  ...

试了下,线性标注停完美,

能不能修改下,意思是,线性标注就用这个,其他的标注,暂且都取得文字的定位点 DXF 11 点就近采用。不会出大偏差。
发表于 2020-3-18 14:03:45 | 显示全部楼层
taoyi0727 发表于 2020-3-18 12:58
(defun c:tt (/ name pt ss t-get-dim-centre)
        (defun T-get-dim-centre (name / ang dxf pt1 pt13 pt14  ...

非世界坐标下无法使用

点评

加2句代码。。。。  发表于 2020-3-18 14:24
发表于 2020-3-18 19:12:16 | 显示全部楼层
本帖最后由 x_s_s_1 于 2020-3-18 19:34 编辑

没那么麻烦
  1. (defun c:test1 (/ get_dim_mid ss n)
  2.   (defun get_dim_mid (en / ent pt10 pt13 pt14 v pt13t)
  3.     (setq ent  (entget en)
  4.     pt10  (cdr (assoc 10 ent))
  5.     pt13  (cdr (assoc 13 ent))
  6.     pt14  (cdr (assoc 14 ent))
  7.     v  (mapcar '- pt10 pt14)
  8.     pt14  (trans pt14 0 v)
  9.     pt13t  (trans pt13 0 v)
  10.     )
  11.     (mapcar
  12.       '+
  13.       pt10
  14.       (mapcar '(lambda (x y) (* 0.5 (- x y)))
  15.         pt13
  16.         (trans (list (car pt14) (cadr pt14) (caddr pt13t)) v 0)
  17.       )
  18.     )
  19.   )
  20.   (setq ss (ssget))
  21.   (repeat (setq n (sslength ss))
  22.     (entmake
  23.       (list (cons 0 "circle")
  24.       (cons 10 (get_dim_mid (ssname ss (setq n (1- n)))))
  25.       (cons 40 100)
  26.       )
  27.     )
  28.   )
  29. )




发表于 2022-9-9 02:44:50 | 显示全部楼层
要理解这个trans函数,要看看高飞兄的贴:CAD 的坐标系统和trans函数的工作原理http://bbs.mjtd.com/forum.php?mo ... amp;highlight=trans
要搞清楚这个转换,要理解这个垂足怎么求出来的,要看看这个:Trans 函数妙用https://wenku.baidu.com/view/f9195127192e45361066f541.html
搞清楚了这个问题,利用数学几何知识,应该很好理解此贴了。
发表于 2024-1-15 20:20:38 | 显示全部楼层
尘缘一生 发表于 2020-3-18 10:57
搞出来了,有点位就知道了



组码13、14的连线不一定和尺寸线平行。

本帖子中包含更多资源

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

x
发表于 2024-1-15 22:02:18 | 显示全部楼层
; ;; 过13点平行于10-14的平行线与过10点垂直于10-14的线交点为10a
; ;; 10与10a的中点即为所求点
(defun c:qzd()
    (setvar "osmode" 0)
    (while (setq ssa (ssget ":S" '((0 . "DIMENSION"))))
        (setq ent (ssname ssa 0))
        (setq dxf (entget ent))
        (setq p10 (cdr (assoc 10 dxf)))
        (setq p13 (cdr (assoc 13 dxf)))
        (setq p14 (cdr (assoc 14 dxf)))
        (setq ang0 (angle p10 p14))
        (setq ang1 (+ ang0 (* 0.5 pi)))
        (setq p10a (inters p13 (polar p13 ang0 1.0)
                           p10 (polar p10 ang1 1.0)
                           nil
                   )
        )
        (setq pmid (mapcar '(lambda(x y)(* 0.5 (+ x y))) p10 p10a))
        (command "_pline"  pmid (polar pmid ang0 2.0) "")
    )
    (princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 17:46 , Processed in 0.146772 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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