明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 984|回复: 3

[提问] 请教各位大佬,这是根据桩位dat坐标绘制路径的源代码,但是我怎么让标注避开多段线

  [复制链接]
发表于 2025-8-6 14:25:58 | 显示全部楼层 |阅读模式
请教各位大佬,这是根据桩位dat坐标绘制路径的源代码,但是我怎么让标注避开多段线



(defun split-string (str delim / pos res)
  (setq res '())
  (while (setq pos (vl-string-search delim str))
    (setq res (cons (substr str 1 pos) res)
                        str (substr str (+ pos 2)))
                (reverse (cons str res))
        )
)
(defun draw-point-symbol (pt name elev h / name_len elev_len max_len        hw name_pt elev_pt p1 p2)
        (setq name_len (* h (strlen name) 0.7)
                elev_len (* h (strlen elev) 0.7)
                max_len (max name_len elev_len)
                hw (/ max_len 2))
        (setq name_pt (polar pt (/ pi 2) (* h 0.15)))
        (setq elev_pt (polar pt (/ pi -2) (* h 1.25)))
        (setq p1 (polar pt pi hw)
                p2 (polar pt 0 hw))
        (entmake (list '(0 . "LINE")
                                                 (cons 10 p1)
                                                 (cons 11 p2)))
        (entmake (list '(0 . "TEXT")
                                                 (cons 10 name_pt)
                                                 (cons 40 h)
                                                 (cons 1 name)
                                                 (cons 72 1)
                                                 (cons 11 name_pt)))
        (entmake (list '(0 . "TEXT")
                                                 (cons 10 elev_pt)
                                                 (cons 40 h)
                                                 (cons 1 elev)
                                                 (cons 72 1)
                                                 (cons 11 elev_pt)))
)

(defun C:DP (/ count f fn h items line pname pt_list text_height x y)
        (vl-load-com)
        (setq text_height (if (zerop (getvar "TEXTSIZE")) 3.0 (getvar "TEXTSIZE")))
        (setq fn (getfiled "选择DAT数据文件" "" "dat" 16))
        (if (not fn) (exit))
        (setq f (open fn "r")
                pt_list '()
                count 0)
        (while (setq line (read-line f))
                (if (and (> (strlen line) 0)
                                        (setq items (split-string line ",")))
                        (if (>= (length items) 5)
                                (progn
                                        (setq pname (nth 0 items)
                                                x (atof (nth 2 items))
                                                y (atof (nth 3 items))
                                                h (rtos (atof (nth 4 items)) 2 3)
                                        )
                                        (draw-point-symbol (list x y) pname h text_height)
                                        (setq pt_list (cons (list x y) pt_list)
                                                count (1+ count)
                                               
                                        )
                                       
                                )
                        )
                )
        )
        (close f)
        (if (> count 0)
                (progn
                        (command "_.pline")
                        (foreach pt (reverse pt_list) (command pt))
                        (command "")
                )
        )
        (princ)
       
)
(princ)


本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2025-8-6 15:05:48 | 显示全部楼层
画个图示意一下你想怎么避让?什么情况是没避让?
毕竟要需要理解你代码的话其实挺麻烦的.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-6 16:33:33 | 显示全部楼层
你有种再说一遍 发表于 2025-8-6 15:05
画个图示意一下你想怎么避让?什么情况是没避让?
毕竟要需要理解你代码的话其实挺麻烦的.

这种,让水准点样式的标注,不和多段线交叉

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-8-6 17:58:11 | 显示全部楼层
可以求两线角平分线,再求标注包围盒对角线长度,然后往平分线方向移动半个对角线长度
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-12 04:09 , Processed in 0.145689 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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