AutoCAD 中的 DirectX 查看器使 AutoCAD 停止正常运行



我正在为嵌入在AutoCAD中的应用程序开发3D零件预览器。

3D通过SlimDX(2.0版本)使用DirectX实现。

我正在使用.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 方法调用以下代码以呈现预览

_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 使用它。 我是否缺少某种可能允许我的应用程序和 AutoCAD 同时使用 DirectX 的发布/释放调用?

前段时间我遇到了类似的问题,但我还没有找到解决方案。您是否尝试过在 DirectX 端启用多线程?

您还可以使用 AutoCAD 图形系统在屏幕外渲染模型:through-the-interface.typepad.com/through_the_interface/2007/04/rendering_autoc.html

相关内容

  • 没有找到相关文章

最新更新