Я работаю над предварительным просмотром 3D-части для приложения, встроенного в AutoCAD.Средство просмотра DirectX в AutoCAD упрощает работу AutoCAD
3D реализован с использованием DirectX через SlimDX (версия 2.0).
Я использую .NET Framework 3.5
Следующий код инициализирует DirectX Устройство
foreach (var item in ObjectTable.Objects)
item.Dispose();
_presentParameters = new PresentParameters()
{
BackBufferFormat = Format.Unknown,
SwapEffect = SwapEffect.Discard,
BackBufferWidth = 1500,
BackBufferHeight = 1500,
EnableAutoDepthStencil = true,
AutoDepthStencilFormat = Format.D16,
PresentationInterval = PresentInterval.Immediate
};
_device = new Device(new Direct3D(), 0, DeviceType.Hardware, preview3DTarget.Handle, CreateFlags.HardwareVertexProcessing, _presentParameters);
_device.SetRenderState(RenderState.ZEnable, true);
_device.SetRenderState(RenderState.Lighting, false);
_device.SetRenderState(RenderState.CullMode, Cull.None);
Следующий код вызывается из управления OnPaint метод Отрендерьте Preview
_device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
_device.BeginScene();
float ratio = (float)preview3DTarget.ClientSize.Width/preview3DTarget.ClientSize.Height;
_device.SetTransform(TransformState.Projection, Matrix.OrthoLH(200, 200, 0.0f, 200.0f));
_device.SetTransform(TransformState.World, Matrix.Translation(-center.X, -center.Y, -center.Z));
_device.SetTransform(TransformState.View, Matrix.RotationYawPitchRoll(Math.radians(0),
Math.radians(0), 0.0f) *
Matrix.Translation(0f, 0f, 100));
for (int i = 0; i < this.vertices.Count; i += 4)
{
_device.DrawPrimitives(PrimitiveType.TriangleStrip, i, 2);
}
for (int i = 0; i < this.points.Count; i += 5)
{
_device.DrawPrimitives(PrimitiveType.LineStrip, i + this.vertices.Count, 4);
}
_device.EndScene();
_device.Present();
Весь этот код работает правильно, однако после при первом просмотре предварительного просмотра AutoCAD перестает нормально функционировать. Объекты в пространстве модели AutoCAD не могут быть выбраны. Если вызывается REGEN, экран становится четким и ничего не перерисовывается. Если создается новый объект, он появляется, но, как и существующие объекты, не может быть выбран.
Я предполагаю, что мое приложение каким-то образом перехватило управление движком DirectX и прекратило использование AutoCAD. Есть ли какой-то вызов release/удаления, который у меня отсутствует, что может позволить моему приложению и AutoCAD использовать DirectX одновременно?