Using .NET is good advice – unfortunately 2004 predates that API.
Is “dynamic feedback” actually that important? Sure, it would be nice but withholding that bit of eye candy to avoid SENDCOMMAND seems worth it.
Something like this may give sufficient reference:
Code:
Sub InsertWithReference()
Dim varInsertPt As Variant
Dim varInsertPtTran As Variant
Dim entInsert As AcadBlockReference
Dim dblOr(2) As Double
Dim dblX(2) As Double
Dim dblZ(2) As Double
Dim varZ As Variant
Dim varX As Variant
Dim dblAngle As Double
Dim entRay As AcadRay
dblX(0) = 1#
dblZ(2) = 1#
With ThisDrawing
varZ = .Utility.TranslateCoordinates(dblZ, acUCS, acWorld, 1)
varInsertPt = .Utility.GetPoint(, "Insertion Point: ")
varInsertPtTran = .Utility.TranslateCoordinates(varInsertPt, acWorld, acUCS, 0)
varX = .Utility.TranslateCoordinates(dblX, acOCS, acUCS, 1, varZ)
dblAngle = .Utility.AngleFromXAxis(dblOr, varX)
varX(0) = varInsertPtTran(0) + 1
varX(1) = varInsertPtTran(1)
varX(2) = varInsertPtTran(2)
Set entInsert = .ModelSpace.InsertBlock(varInsertPt, "A", 1#, 1#, 1#, -dblAngle)'adjust block name as needed
Set entRay = .ModelSpace.AddRay(varInsertPt, .Utility.TranslateCoordinates(varX, acUCS, acWorld, 0))
entRay.Highlight True
varX = .Utility.GetPoint(varInsertPtTran, "Adjust angle: ")
varInsertPtTran = .Utility.TranslateCoordinates(varInsertPt, acWorld, acOCS, 0, varZ)
varX = .Utility.TranslateCoordinates(varX, acWorld, acOCS, 0, varZ)
dblAngle = .Utility.AngleFromXAxis(varInsertPtTran, varX)
entInsert.Rotation = dblAngle
entRay.Delete
End With
End Sub
Bookmarks