TroutKing 发表于 2022-7-6 12:07:35

文本对齐点问题

Visual Basic问题
使用AutoCAD 2009
 
大家好,
 
也许我应该试着重新措辞我之前的问题,因为我没有得到任何回应。我想我的问题有点复杂。这里是一个简化的版本,我想帮助理解。
 
当我遍历放置在标题栏中的属性时:
 
1.如何识别已放置在图形中的属性的文本对齐点?(“attObj.TextAlignmentPoint”不返回可以比较的值)
2.如何识别已放置在图形中的属性的插入点?(“attObj.InsertionPoint”不返回可以比较的值)
 
有人能帮我吗?
 
非常感谢。
迈克

SteveK 发表于 2022-7-6 12:23:23

我没有在autocad中使用vb,只有lisp,但也许我可以猜测,当你说它不返回值时,你可以比较,你的意思是它作为一个变体出现??如果没有,那么我就卡住了,否则你需要找到一个从变量->列表或类似的转换函数。或者,如果您不需要知道这一点,您可以在进一步的代码中使用变体。对不起,如果这对你没有帮助的话。vb有一些描述函数的恰当方法吗?

fixo 发表于 2022-7-6 12:34:43

嗨,迈克!
 
看看这个简单的例子
希望有意义
 

Sub getAttProps()
   Dim BlockRef As AcadBlockReference
   Dim varPt As Variant
   Dim subEnt As Object
   Dim oAttRef As AcadAttributeReference
   Dim insPt As Variant
   Dim algnPt As Variant
   Dim align As Integer
   Dim tmax, cxdata
   ThisDrawing.Utility.GetSubEntity subEnt, varPt, tmax, cxdata, vbLf & "Select a block subentity"

   If TypeOf subEnt Is AcadAttributeReference Then
       Set oAttRef = subEnt
       insPt = oAttRef.InsertionPoint
       algnPt = oAttRef.TextAlignmentPoint
       align = oAttRef.Alignment
       MsgBox "Alignment: " & align & vbCr & _
            "Insertion Point: " & CStr(Round(insPt(0), 2)) & "," & CStr(Round(insPt(1), 2)) & "," & CStr(Round(insPt(2), 2)) & vbCr & _
            "TextAlignmentPoint Point: " & CStr(Round(algnPt(0), 2)) & "," & CStr(Round(algnPt(1), 2)) & "," & CStr(Round(algnPt(2), 2))
   End If
End Sub

 
~'J'~

SteveK 发表于 2022-7-6 12:48:30

**唷**我希望重炮能很快到达眨眼:

fixo 发表于 2022-7-6 13:04:19

 
拜托
你让我笑了
助教
 
~'J'~

TroutKing 发表于 2022-7-6 13:17:35

大家好,
 
非常感谢你的帮助。昨晚办公室一片漆黑,我搔了搔头,在键盘上敲了几个小时,想出了一个对我有用的办法(见下文)。
 
我想我可以研究一下你提供的Fixo代码,希望能清理一下我目前为止的工作。
 
这就是我想到的:

For Each oLayout In adoc.Layouts
   For Each oEnt In oLayout.Block
       If TypeOf oEnt Is AcadBlockReference Then
       Set blkRefObj = oEnt
         If StrComp(blkRefObj.Name, OriginalTitleblock, vbTextCompare) = 0 Then
         attArr = blkRefObj.GetAttributes
               For k = 0 To UBound(attArr)
               Set attObj = attArr(k)

               ka = Left(attObj.TextAlignmentPoint(0), 11)
               kb = Left(attObj.TextAlignmentPoint(1), 10)
               kc = attObj.TextAlignmentPoint(2)
               kx = Left(attObj.InsertionPoint(0), 11)
               ky = Left(attObj.InsertionPoint(1), 10)
               kz = attObj.InsertionPoint(2)
               k_TextAlignmentPoint = ka & "," & kb & "," & kc
               k_InsertionPoint = kx & "," & ky & "," & kz

                   If StrComp(k_TextAlignmentPoint, OriginalTextAlignmentPoint_1, vbTextCompare) = 0 Then
                     a1 = attObj.TextString

 
再次非常感谢您的帮助!
迈克
页: [1]
查看完整版本: 文本对齐点问题