乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 118|回复: 6

如何使编号咬合圆心?

[复制链接]

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2009-1-12 11:01:00 | 显示全部楼层 |阅读模式
在cad中 每个圆都有一个文本编号在其旁边 但是此文本编号的对齐点不咬合圆心  请问如何将这些编号逐一咬合到靠近它的圆的圆心上,谢谢 !!!

如何使编号咬合圆心?

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

5

主题

55

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2009-1-14 20:09:00 | 显示全部楼层
移过去,呵呵。想用程序来实现也行:如果圆的大小都一样的话可以这样来实现:选择模型空间的所有实体,筛选出指定大小的圆并提取圆心坐标,同时筛选出所有文本实体的插入点。构建循环,计算文本插入点和圆心之间的距离,将最小距离的文本实体移动到圆心上就可以了。
回复

使用道具 举报

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2009-1-17 08:25:00 | 显示全部楼层
谢谢!
能不能写点示例代码看看啊?
回复

使用道具 举报

5

主题

55

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2009-1-17 08:52:00 | 显示全部楼层
可以,请你把示例文件传上来,根据你的文件具体来写。
回复

使用道具 举报

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2009-1-18 16:24:00 | 显示全部楼层
示例文件已经给你发过去了 谢谢!
回复

使用道具 举报

5

主题

55

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2009-1-19 12:20:00 | 显示全部楼层
你的示例文件中的圆和文本规律不是很明显,程序实现起来做到完全准确比较困难。给你写了一段代码,你可按实际情况修改使用:
Dim CssetObj As AcadSelectionSet
       Set CssetObj = ThisDrawing.SelectionSets.Add("CssetObj")
        
'
    Dim Cgpcode(0) As Integer
    Dim Cdatavalue(0) As Variant
        Cgpcode(0) = 0
        Cdatavalue(0) = "CIRCLE"
      
   
    Dim Cgroupcode As Variant, Cdatacode As Variant
        Cgroupcode = Cgpcode
        Cdatacode = Cdatavalue
        CssetObj.Select acSelectionSetAll, , , Cgroupcode, Cdatacode
        
    Dim TssetObj As AcadSelectionSet
       Set TssetObj = ThisDrawing.SelectionSets.Add("TssetObj")
        
    Dim Tgpcode(0) As Integer
    Dim Tdatavalue(0) As Variant
        Tgpcode(0) = 0
        Tdatavalue(0) = "TEXT"
    Dim Tgroupcode As Variant, Tdatacode As Variant
        Tgroupcode = Tgpcode
        Tdatacode = Tdatavalue
        TssetObj.Select acSelectionSetAll, , , Tgroupcode, Tdatacode
   
  
    Dim i As Integer
    Dim CENT, TENT As AcadEntity
    Dim Ccet, Tpoint As Variant
    Dim Distance, MinDis  As Double
        MinDis = 1000000000
        
        For i = 0 To CssetObj.Count - 1
            Set CENT = CssetObj(i)
               Ccet = CENT.Center
             For j = 0 To TssetObj.Count - 1
                 Set TENT = TssetObj(j)
                     Tpoint = TENT.InsertionPoint
                      Distance = Sqr((Tpoint(0) - Ccet(0)) * (Tpoint(0) - Ccet(0)) + (Tpoint(1) - Ccet(1)) * (Tpoint(1) - Ccet(1)))
                     If MinDis > Distance Then
                        MinDis = Distance
                     End If
             Next j '
                  
                 For k = 0 To TssetObj.Count - 1
                 Set TENT = TssetObj(k)
                     Tpoint = TENT.InsertionPoint
                     Distance = Sqr((Tpoint(0) - Ccet(0)) * (Tpoint(0) - Ccet(0)) + (Tpoint(1) - Ccet(1)) * (Tpoint(1) - Ccet(1)))
                     If Distance = MinDis Then
                               TENT.Alignment = acAlignmentMiddleCenter
                               TENT.TextAlignmentPoint = Ccet
                               TENT.Update
                     End If
             Next k
             MinDis = 1000000000
         Next i
         
             CssetObj.Delete
             TssetObj.Delete
回复

使用道具 举报

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2009-1-20 08:44:00 | 显示全部楼层
好的  谢谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-8 05:59 , Processed in 3.426353 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表