So I fiddled with your jig a little, and it works if you add a class level variable for the last angle, and make your update routine like this:
Protected Overrides Function Update() As Boolean
Entity.TransformBy(Matrix3d.Rotation(BaseRo - lastang, Vector3d.ZAxis, BasePt))
lastang = BaseRo
End Function
BTW, "Entity" in my code above is a Friend ReadOnly Property of the class that comes along with inheriting EntityJig, no need to declare your own MyBref.
I assume you either already did figure that out, or eventually would have, but I am posting because when I ran it that way, the block was not displaying properly for some reason. I mean the jig worked as expected, but only a portion of the block was visible on screen.
When I run the same block, with the same code, through my off center rotate jig, It looks normal, so I wondered if you were seeing the same thing?
Here is my jig:
Public Class BlkRotJigOffCen
Inherits EntityJig
Dim NewAng, Radius, OrigRot As Double
Dim CenPt As Autodesk.AutoCAD.Geometry.Point3d
Dim jigopts As New JigPromptAngleOptions()
Protected Overrides Function Sampler(ByVal prompts As Autodesk.AutoCAD.EditorInput.JigPrompts) As Autodesk.AutoCAD.EditorInput.SamplerStatus
Dim PrAngRes As PromptDoubleResult = prompts.AcquireAngle(jigopts)
If NewAng = PrAngRes.Value Then
Return SamplerStatus.NoChange
Else
NewAng = PrAngRes.Value
Return SamplerStatus.OK
End If
End Function
Protected Overrides Function Update() As Boolean
Try
CType(Entity, BlockReference).Rotation = NewAng + OrigRot
CType(Entity, BlockReference).Position = CenPt.Add(New Vector3d(Radius * Cos(NewAng), Radius * Sin(NewAng), 0))
Return True
Catch ex As Exception
Return False
End Try
End Function
Public Sub New(ByVal bref As BlockReference, ByVal Cpt As Point3d, ByVal prompt As String)
MyBase.New(bref)
OrigRot = bref.Rotation
CenPt = Cpt
Radius = Cpt.GetVectorTo(bref.Position).Length
jigopts.UserInputControls = UserInputControls.GovernedByOrthoMode
jigopts.Cursor = CursorType.RubberBand
jigopts.BasePoint = Cpt
jigopts.UseBasePoint = True
jigopts.Message = vbLf & prompt
End Sub
Public Function GetEntity() As Entity
Return Entity
End Function
End Class
Dave O.