明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: lansedi

[已解答] 【求助】自动连接直线与圆

[复制链接]
发表于 2013-9-6 21:49:29 | 显示全部楼层
香田里浪人 发表于 2013-9-6 21:14
请教阁下,我改了一下,可以连接多边形,就是将CIRCLE改为LWPOLYLINE,如何修改可以连接到多边形质心(中 ...

计算质心有点麻烦
回复

使用道具 举报

发表于 2013-9-8 14:57:39 | 显示全部楼层
nzl1116 发表于 2013-9-6 21:49
计算质心有点麻烦

计算质心麻烦.如果能在多边形内任意位置也行。恳请阁下帮忙修改一下,谢谢!
回复

使用道具 举报

发表于 2013-9-9 13:55:56 | 显示全部楼层
;;;文字自动连接多边形
(vl-load-com)
(defun GetBoundingBox (TextObj / MinPnt MaxPnt)
  (vla-GetBoundingBox TextObj 'MinPnt 'MaxPnt)
  (list        (vlax-safearray->list MinPnt)
        (vlax-safearray->list MaxPnt)
  )
)
(defun c:wzzdlj (/ ss Lst0 Lst1 n Ent Data Pt0 Pt1 Pt2 Pt3 Pt4 PLst Ent0 H0 H1 Wid Hgt Dst0 Dst1)
  (if (setq ss (ssget '((0 . "Text,LWPOLYLINE"))))
    (progn
      (setq Lst0 nil Lst1 nil n 0)
      (repeat (sslength ss)
        (setq Ent (ssname ss n)
              n   (1+ n)
        )
        (if (= (cdr (assoc 0 (entget Ent))) "LWPOLYLINE")
          (setq Lst1 (cons Ent Lst1))
          (setq Lst0 (cons Ent Lst0))
        )
      )
      (setq ss nil)
      (while (and Lst0 Lst1)
        (setq Data (GetBoundingBox (vlax-ename->vla-object (car Lst0)))
              Pt0  (car Data)
              Pt1  (cadr Data)
              Hgt  (- (cadr Pt1) (cadr Pt0))
              H0   (* Hgt 0.2)
              H1   (* Hgt 0.25)
              Wid  (- (car Pt1) (car Pt0))
              Pt3  (polar Pt0 pi H1)
              Pt3  (polar Pt3 (* pi 1.5) H0)
              PLst (list (cons 10 Pt3))
              Pt3  (polar Pt3 0 (+ Wid H1 H1))
              PLst (cons (cons 10 Pt3) PLst)
              Dst0 nil
              n    0
        )
        (repeat (length Lst1)
          (setq Ent  (nth n Lst1)
                n    (1+ n)
                Dst1 (distance (setq Pt4 (cdr (assoc 10 (entget Ent)))) Pt3)
          )
          (cond
            ((not Dst0) (setq Dst0 Dst1 Ent0 Ent Pt2 Pt4))
            ((< Dst1 Dst0) (setq Dst0 Dst1 Ent0 Ent Pt2 Pt4))
            (t nil)
          )
        )
        (setq Lst0 (cdr Lst0)
              Lst1 (vl-remove Ent0 Lst1)
              Pt3  (polar Pt3 (angle Pt3 Pt2) (- Dst0 (cdr (assoc 40 (entget Ent0)))))
              PLst (cons (cons 10 Pt3) PLst)
              PLst (apply 'append (mapcar '(lambda (x) (list x (cons 40 0) (cons 41 0))) PLst))
        )
        (entmakex
          (append '((0 . "LWPOLYLINE")
                    (100 . "AcDbEntity")
                    (67 . 0)
                    (410 . "Model")
                    (100 . "AcDbPolyline")
                    (8 . "0")
                    (70 . 0)
                   )
                  (list (cons 90 3))
                  PLst
          )
        )
      )
    )
  )
  (princ)
)
回复

使用道具 举报

发表于 2013-9-9 22:08:10 | 显示全部楼层
浪人,自己顿悟了?!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-26 09:50 , Processed in 0.163243 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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