这是我刚刚在C#中做的一些事情,非常简单,可能会对您有所帮助,您只需选择一个矩形区域,例程就会在其中放置一个文本。HTH
辅助函数:
命令:
这不完全是您所需要的,但可能会有所帮助。我认为
您可以在那里添加零件,以获得所需边缘上的第二个点,然后
计算文本的旋转角度
~'J'~
Option Explicit
Sub AddSomeLabel()
Dim varPt As Variant
Dim oPoly As AcadLWPolyline
Dim oEnt As AcadEntity
With ThisDrawing
.Utility.GetEntity oEnt, varPt, "Select polyline (pick left point on the edge)"
If TypeOf oEnt Is AcadLWPolyline Then
Set oPoly = oEnt
Else
MsgBox "Wrong entity selected"
Exit Sub
End If
Dim txtPt As Variant
txtPt = PseudoCenter(oPoly)
Dim oText As AcadMText
Dim txtStr As String
txtStr = "Blah\PBlah\PBlah"
Dim pointUCS As Variant
pointUCS = .Utility.TranslateCoordinates(txtPt, acUCS, acUCS, False)
Set oText = MakeMText(pointUCS, txtStr)
End With
End Sub
Function MakeMText(txtPt As Variant, strTxt As String) As AcadMText
Dim oMText As AcadMText
Dim oLine As AcadLine
Set oMText = ThisDrawing.ModelSpace.AddMText(txtPt, 0#, strTxt)
oMText.AttachmentPoint = acAttachmentPointMiddleCenter
oMText.InsertionPoint = txtPt
oMText.Update
Set MakeMText = oMText
End Function
Function PseudoCenter(oPoly As AcadLWPolyline) As Variant
Dim minPt As Variant
Dim maxPt As Variant
oPoly.GetBoundingBox minPt, maxPt
Dim centPt(2) As Double
centPt(0) = (minPt(0) + maxPt(0)) / 2
centPt(1) = (minPt(1) + maxPt(1)) / 2
centPt(2) = (minPt(2) + maxPt(2)) / 2
PseudoCenter = centPt
End Function
第一个本能是像Matt建议的那样使用形心,
然而,这在“L”处失败了,因为形心在线外,
Luis的方法总是有效的(如果我能正确阅读的话) 对不起,我没有时间编码它,但这就是我要做的:
我会从多段线中创建一个区域。如果多段线没有关闭,我会将plinetype的系统变量设置为2。然后发送命令pedit,可能使用多个选项。然后将关闭的多段线转换为一个区域并获取形心。只要这些所谓的矩形足够接近一个,形心就可以了。
接下来我会找到该矩形中最长的线并获取它的起点和终点。从wcs中获取它的角度,通过绘制一条线或解析多段线以获取最长的线及其长度。然后使用返回的形心和线/点的角度来放置文本。
页:
1
[2]