找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: 心梦相随

[下载]:提供坐标标注的VB源代码!

[复制链接]
发表于 2005-5-20 11:08:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
上传的工程有问题,就一个工程文件,其它什么都没有,是不是传错了?
建议重新上传附件。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-5-21 03:16:22 | 显示全部楼层

自己编的小程序

'这个小程序是自己用VB6编的(稍作调整可用于VBA),用来标注坐标(适用于规划、测量学,XY坐标互换),最后将文字与引线合并为一个匿名组。里面有些是全局变量,有的可能忘记修改了,有的没有赋值,用的时候仔细修改一遍才行。
  1.     public acadApp As Object
  2.     public acadDoc As Object
  3.     public utilObj As Object
  4.     Public moSpace As Object
  5.    
  6. Private Sub cmdLeader_Click()
  7.     Dim vattmpPnt1 As Variant  '标注点
  8.     Dim vattmpPnt2 As Variant  '起始点

  9.     Dim strPntXYFormatted(0 To 1) As String '格式化以后的XY坐标,字符串
  10.     Dim blnRightDirection As Boolean
  11.     Dim dblLeaderPLineVertex(0 To 5) As Double '标注引线顶点坐标
  12.     Dim dblOriginPnt(0 To 2) As Double '坐标原点
  13.     Dim dblStartPnt(0 To 2) As Double
  14.     Dim dblEndpnt(0 To 2) As Double
  15.    
  16.     Dim vatPntMin As Variant
  17.     '包围盒左下角坐标,用于确定文字长度,否则引线长度与引线不匹配
  18.     Dim vatPntMax As Variant
  19.     Dim objBlock As Object
  20.     Dim objPLine As Object
  21.     Dim objAtt As Object
  22.    
  23.     Dim blnFoundIt As Boolean
  24.     Dim vatAttVars As Variant

  25.     Dim dbltmpTH As Double '标注文字高度
  26.    
  27.     Dim objPntGroup As Object '组对象
  28.     Dim objtmpArray(0 To 1) As Object '加入到组的所有对象
  29.     dim  strFormat as string  '坐标文本格式

  30.     Const dblconTextRiseRatio As Double = 0.3! '引线上部坐标向上便宜数量
  31.     Const dblconTextFallRatio As Double = -1.3!
  32.     Const strConstLeaderBlock As String = "BLK_Leader"  '图块名称
  33.     '可以不用图块,不过用图块有其优越的地方,特别是以后自己的软件需要对其读写的时候

  34.     On Error Resume Next
  35.     Set acadApp = GetObject(, "AutoCAD.Application.14")
  36.     If Err Then
  37.         Err.Clear
  38.         Set acadApp = CreateObject("AutoCAD.Application.14")
  39.     End If
  40.     Set acadDoc = acadApp.ActiveDocument
  41.     Set utilObj = acadDoc.Utility
  42.     Set moSpace = acadDoc.ModelSpace

  43.     strFormat="###0.00" '坐标格式化样式,可以把123表示为123.00
  44.     Me.Hide
  45.    
  46.     dbltmpTH = MdblTextHeight * (MdblPlotRatio)   'MdblTextHeight是1:1时字高,全局变量,需要另外赋值,
  47.     'MdblPlotRatio为图纸比例,全局变量,需要另外赋值,dbltmpTH为实际字高,也可以根据自己的要求设置
  48.     dblOriginPnt(0) = 0#
  49.     dblOriginPnt(1) = 0#
  50.     dblOriginPnt(2) = 0#
  51.     dblStartPnt(2) = 0#
  52.     dblEndpnt(2) = 0#
  53.    
  54.     blnFoundIt = False
  55.     For Each objBlock In acadDoc.Blocks
  56.         If StrComp(UCase(objBlock.Name), UCase(strConstLeaderBlock), 1) = 0 Then
  57.             blnFoundIt = True
  58.             Exit For
  59.         End If
  60.     Next objBlock '查找有没有图块"BLK_LEADER"
  61.    
  62.     MstrKeyWordList = "X eXit"
  63.     Do While 1
  64.         Call ChangeOSNAP(True)  '打开捕捉模式
  65.         utilObj.InitializeUserInput 1, MstrKeyWordList
  66.         vattmpPnt1 = utilObj.GetPoint(, "Start point (eXit) :")
  67.         
  68.         If Err Then
  69.             Err.Clear
  70.             If StrComp(Err.Description, "User input is a keyword", 1) = 0 Then
  71.                 MstrInputString = utilObj.GetInput
  72.                 If UCase(MstrInputString) = "X" Or MstrInputString = "" Then GoTo theEnd
  73.             Else
  74.                 GoTo theEnd
  75.             End If
  76.         End If
  77.         
  78.         Call ChangeOSNAP(False) '关闭捕捉模式
  79.         utilObj.InitializeUserInput 1, MstrKeyWordList
  80.         vattmpPnt2 = utilObj.GetPoint(vattmpPnt1, "To point (eXit) :")
  81.         If Err Then
  82.             Err.Clear
  83.             If StrComp(Err.Description, "User input is a keyword", 1) = 0 Then
  84.                 MstrInputString = utilObj.GetInput
  85.                 If UCase(MstrInputString) = "X" Or MstrInputString = "" Then GoTo theEnd
  86.             Else
  87.                 GoTo theEnd
  88.             End If
  89.         End If
  90.         
  91.         blnRightDirection = (vattmpPnt2(0) >= vattmpPnt1(0)) '确定引线标注的标注方向
  92.         strPntXYFormatted(1) = "Y=" & Format(Trim(Round((vattmpPnt1(0)), MlngCorBit)), strFormat)
  93.         '标注坐标Y,MlngCorBit:全局变量,另外赋值,保留的小数位数
  94.         strPntXYFormatted(0) = "X=" & Format(Trim(Round((vattmpPnt1(1)), MlngCorBit)), strFormat)
  95.         '标注坐标X

  96.         If Not blnFoundIt Then '图形文件中如果没有“BLK_LEADER”则生成该土块
  97.             Set objBlock = acadDoc.Blocks.Add(dblOriginPnt, strConstLeaderBlock)
  98.             dblStartPnt(0) = dblOriginPnt(0)
  99.             dblStartPnt(1) = dblOriginPnt(1) + dblconTextRiseRatio * dbltmpTH
  100.             Set objAtt = objBlock.AddAttribute(dbltmpTH, acAttributeModePreset, "1", dblStartPnt, _
  101.             "1", strPntXYFormatted(0))
  102.    
  103.             dblStartPnt(1) = dblOriginPnt(1) + dblconTextFallRatio * dbltmpTH
  104.             Set objAtt = objBlock.AddAttribute(dbltmpTH, acAttributeModePreset, "1", dblStartPnt, _
  105.             "1", strPntXYFormatted(1))
  106.             blnFoundIt = True
  107.         End If
  108.         
  109.         dblStartPnt(0) = vattmpPnt1(0)
  110.         dblStartPnt(1) = vattmpPnt1(1)
  111.         Set objBlock = moSpace.InsertBlock(dblStartPnt, strConstLeaderBlock, 1, 1, 0) '插入图块
  112.         
  113.         vatAttVars = objBlock.GetAttributes
  114.         dblStartPnt(0) = vattmpPnt2(0) + 0.1 * dbltmpTH
  115.         dblStartPnt(1) = vattmpPnt2(1) + dblconTextRiseRatio * dbltmpTH
  116.         vatAttVars(0).insertionPoint = dblStartPnt
  117.         vatAttVars(0).TextString = strPntXYFormatted(0)
  118.         vatAttVars(0).Height = dbltmpTH
  119.         '调整Y坐标(属性文字)位置、文字内容、字高。VBA插入图块时属性文字位置、文字内容不会随块变化
  120.         
  121.         dblStartPnt(1) = vattmpPnt2(1) + dblconTextFallRatio * dbltmpTH
  122.         vatAttVars(1).insertionPoint = dblStartPnt
  123.         vatAttVars(1).TextString = strPntXYFormatted(1)
  124.         vatAttVars(1).Height = dbltmpTH
  125.         '调整X坐标(属性文字)位置、文字内容、字高。
  126.         
  127.         Call objBlock.GetBoundingBox(vatPntMin, vatPntMax)  '取包围属性文字矩形框的左下角及右上角坐标
  128.         If Not blnRightDirection Then
  129.             dblEndpnt(0) = dblStartPnt(0) - vatPntMax(0) + vatPntMin(0)
  130.             dblEndpnt(1) = dblStartPnt(1)
  131.             
  132.             dblStartPnt(0) = vattmpPnt2(0) + vatPntMin(0) - vatPntMax(0)
  133.             dblStartPnt(1) = vattmpPnt2(1) + dblconTextRiseRatio * dbltmpTH
  134.             vatAttVars(0).insertionPoint = dblStartPnt
  135.             
  136.             dblStartPnt(1) = vattmpPnt2(1) + dblconTextFallRatio * dbltmpTH
  137.             vatAttVars(1).insertionPoint = dblStartPnt
  138.         End If
  139.         
  140.         dblLeaderPLineVertex(0) = vattmpPnt1(0)
  141.         dblLeaderPLineVertex(1) = vattmpPnt1(1)
  142.         dblLeaderPLineVertex(2) = vattmpPnt2(0)
  143.         dblLeaderPLineVertex(3) = vattmpPnt2(1)
  144.         dblLeaderPLineVertex(4) = IIf(blnRightDirection, vatPntMax(0), dblEndpnt(0) - 0.1 * dbltmpTH)
  145.         dblLeaderPLineVertex(5) = vattmpPnt2(1)
  146.         Set objPLine = moSpace.AddLightWeightPolyline(dblLeaderPLineVertex)
  147.         Set objPntGroup = acadDoc.Groups.Add("*")
  148.         Set objtmpArray(0) = objBlock
  149.         Set objtmpArray(1) = objPLine
  150.         objPntGroup.AppendItems objtmpArray
  151.     Loop
  152. theEnd:
  153.     Me.Show
  154. End Sub

  155. Function ChangeOSNAP(mySwith As Boolean)
  156.     Dim vattmpRetValue As Variant
  157.     vattmpRetValue = acadDoc.GetVariable("OSMODE")
  158.     If vattmpRetValue = 0 Then vattmpRetValue = 167
  159.     If mySwith Then
  160.         vattmpRetValue = IIf((vattmpRetValue <= 4095), vattmpRetValue, vattmpRetValue - 16384)
  161.     Else
  162.         vattmpRetValue = IIf((vattmpRetValue <= 4095), vattmpRetValue + 16384, vattmpRetValue)
  163.     End If
  164.     Call acadDoc.SetVariable("OSMODE", vattmpRetValue)
  165. End Function '切换捕捉模式,如果没有设置,则设置捕捉端点、中点、圆心、交点、垂足
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-29 01:26 , Processed in 0.371252 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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