void MyIViewMonitor::_OnViewChanged(ViewportP viewport) { if (m_isSelfFire) { return; } if (MyIViewMonitor::m_toolType == 3){ if (viewport->GetViewNumber() == 2) { Dpoint3d position; Dpoint3d target; Dpoint3d upVector; double angle; DRange2d screenWindow; double frontClipDist; double backClipDist; mdlView_getCameraParameters(&position, &target, &upVector, &angle, &screenWindow, &frontClipDist, &backClipDist, 2); //得到视图3相机参数 if (!mdlView_getDisplayControl(VIEWCONTROL_CAMERA, 0)) mdlView_setDisplayControl(VIEWCONTROL_CAMERA, 0, true); //打开视图1相机 mdlView_setCameraParameters(&position, &target, &upVector, &angle, NULL, &screenWindow, &frontClipDist, &backClipDist, 0); //设置视图1相机 m_isSelfFire = true; mdlView_updateSingle(0);//更新视图1 m_isSelfFire = false; } return; } }
抖动是因为动态旋转过程中,每一帧显示以后后台又会把视图的参数恢复到动态开始时的状态,您可以利用如下代码示例这样控制一下即可:
bool m_isSelfFire; DPoint3d m_position; DPoint3d m_target; DPoint3d m_upVector; double m_angle = DBL_MIN; DRange2d m_screenWindow; double m_frontClipDist; double m_backClipDist; virtual void _OnViewChanged(ViewportP viewport) override { if (m_isSelfFire) return; if (viewport->GetViewNumber() == 2) { static bool isRestore = false; if (isRestore) { isRestore = false; return; } isRestore = true; DPoint3d position,target,upVector; double angle, frontClipDist, backClipDist; DRange2d screenWindow; mdlView_getCameraParameters(&position, &target, &upVector, &angle, &screenWindow, &frontClipDist, &backClipDist, 2); if (DBL_MIN != m_angle) { if (m_position == position && m_target == target && m_upVector == upVector && m_angle == angle && m_screenWindow.low == screenWindow.low && m_screenWindow.high == screenWindow.high && m_frontClipDist == frontClipDist && m_backClipDist == backClipDist) { isRestore = false; return; } } m_position = position;m_target = target;m_upVector = upVector;m_angle = angle;m_screenWindow = screenWindow;m_frontClipDist = frontClipDist;m_backClipDist = backClipDist; if(!mdlView_getDisplayControl(VIEWCONTROL_CAMERA,0)) mdlView_setDisplayControl(VIEWCONTROL_CAMERA, 0, true); mdlView_setCameraParameters(&position, &target, &upVector, &angle, NULL, &screenWindow, &frontClipDist, &backClipDist, 0); m_isSelfFire = true; mdlView_updateSingle(0); m_isSelfFire = false; } return; }
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
Answer Verified By: dong zhen