Больше похоже на чудо, чем на осмысленные действия, но сработал такой код.
ViewP.SetUcsToWorld()
Dim Pt1 As Point2d = ViewP.ViewCenter
Dim Pt2 As Point3d = FstBlkData.CenterPoint 'вычисленные координаты центра в wcs
Dim ViewMoveVector As Vector3d = New Vector3d(Pt2.X - Pt1.X, Pt2.Y - Pt1.Y, 0) 'Вектор перемещения видового экрана
Dim matWCS2DCS As Matrix3d
matWCS2DCS = Matrix3d.PlaneToWorld(ViewP.ViewDirection) 'Получаем матрицу плоскости видового экрана
'matWCS2DCS = Matrix3d.Displacement(ViewMoveVector) * matWCS2DCS 'Обновляем матрицу с вектором перемещения центра вида
matWCS2DCS = Matrix3d.Rotation(FstBlkData.TwistAngle, New Vector3d(0, 0, 1), New Point3d(0, 0, 0)) * matWCS2DCS
Pt2 = FstBlkData.CenterPoint.TransformBy(matWCS2DCS)
ViewP.UpgradeOpen()
ViewP.ViewCenter = New Point2d(Pt2.X, Pt2.Y)
ViewP.ViewTarget = New Point3d(0, 0, 0)
ViewP.ViewDirection = New Vector3d(0, 0, 1)
ViewP.CustomScale = LGeomFactor
ViewP.TwistAngle = FstBlkData.TwistAngle
Путем тестирования разных вариантов с методом Displacement и Rotation класса matrix3d и свойства TwistAngle видового экрана, пришел к данному коду. Не совсем уверен, но могу предположить, что так как в наших чертежах всегда вид сверху, но постоянно "вертится север" видового экрана, то при определении матрицы трансформации wcs2dcs, надо применять только метод Rotation. И обязательно обновлять угол TwistAngle видового экрана. Далеко не понял теорию трансформации, но метод научного копипаста, редактирования и тыка дал такой результат. Проверил на всех трех листах, сработал правильно, но не уверен что не будет багов в других чертежах.
ps/ При первом использовании свойство ViewP.ViewCenter выдает координаты в wcs. А при повторном в этой же сессии запуска кода выдает координаты в dcs. Но почемуто результат работы кода все равно правильный, интересно почему?
Добавлено: Понял почему, потому что он вообще не участвует в вычислениях (точка pt1)