Teigha4.0加载显示Dwg文件

news/2024/12/22 20:44:39/

Teigha4.0加载显示Dwg文件

网上显示Dwg的例子不是很好找,最好还是去官网下载例子。
这里的demo大抵参考官网例子完成的。

初始化驱动

在窗体加载事件里面初始化显示驱动,代码怎么看都很奇怪,但人家就是这种写法
需要注意的是加载模块的名称,官网例子是WinOpenGL.txv、3.0版本的是WinGDI.gs、这里加载WinBitmap.txv模块,这几个到底啥含义没有去深究。

           PaintGraphics = Graphics.FromHwnd(panel.Handle);GsModule gsModule = (GsModule)SystemObjects.DynamicLinker.LoadModule("WinBitmap.txv", false, true);Device = gsModule.CreateDevice();Device.Properties.AtPut("WindowHWND", new RxVariant(panel.Handle));Device.Properties.AtPut("WindowHDC", new RxVariant(PaintGraphics.GetHdc()));Device.Properties.AtPut("DoubleBufferEnabled", new RxVariant(true));Device.Properties.AtPut("EnableSoftwareHLR", new RxVariant(true));panel.Resize += Panel_Resize;

加载数据显示

首先打开数据源->创建数据上下文->初始化布局->设置数据显示范围
    OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.RestoreDirectory = true;openFileDialog.Filter = "DWG文件(*.dwg)|**.dwg";if (openFileDialog.ShowDialog() == DialogResult.OK){DwgDatabase = new Database(false, false);DwgDatabase.ReadDwgFile(openFileDialog.FileName, FileOpenMode.OpenForReadAndReadShare, false, "");ContextForDbDatabase contextForDbDatabase = new ContextForDbDatabase(DwgDatabase);contextForDbDatabase.UseGsModel = true;LayoutHelper = LayoutHelperDevice.SetupActiveLayoutViews(Device, contextForDbDatabase);LayoutHelper.UserGiContext = contextForDbDatabase;LayoutHelper.SetLogicalPalette(Device.DarkPalette);Rectangle rectangle = panel.Bounds;rectangle.Offset(-panel.Location.X, -panel.Location.Y);LayoutHelper.OnSize(rectangle);panel.Invalidate();}

释放资源

在窗体关闭时需要释放相关的对象实例
  if (DwgDatabase != null){DwgDatabase.Dispose();Device.Dispose();LayoutHelper.Dispose();PaintGraphics.Dispose();}

TIM截图20200102113919

全部代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Teigha.DatabaseServices;
using Teigha.GraphicsInterface;
using Teigha.GraphicsSystem;
using Teigha.Runtime;namespace WindowsFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}public Database DwgDatabase { get; set; }public Device Device { get; set; }public LayoutHelperDevice LayoutHelper { get; set; }public Graphics PaintGraphics { get; set; }private void Form1_Load(object sender, EventArgs e){CreateDevice();}private void panel_Paint(object sender, PaintEventArgs e){if (LayoutHelper == null){return;}LayoutHelper.Update();}private void Panel_Resize(object sender, EventArgs e){if (LayoutHelper == null){return;}Rectangle rectangle = panel.Bounds;rectangle.Offset(-panel.Location.X, -panel.Location.Y);LayoutHelper.OnSize(rectangle);}private void 打开ToolStripMenuItem_Click(object sender, EventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.RestoreDirectory = true;openFileDialog.Filter = "DWG文件(*.dwg)|**.dwg";if (openFileDialog.ShowDialog() == DialogResult.OK){DwgDatabase = new Database(false, false);DwgDatabase.ReadDwgFile(openFileDialog.FileName, FileOpenMode.OpenForReadAndReadShare, false, "");CreateLayout();}}private void CreateDevice(){PaintGraphics = Graphics.FromHwnd(panel.Handle);GsModule gsModule = (GsModule)SystemObjects.DynamicLinker.LoadModule("WinBitmap.txv", false, true);Device = gsModule.CreateDevice();Device.Properties.AtPut("WindowHWND", new RxVariant(panel.Handle));Device.Properties.AtPut("WindowHDC", new RxVariant(PaintGraphics.GetHdc()));Device.Properties.AtPut("DoubleBufferEnabled", new RxVariant(true));Device.Properties.AtPut("EnableSoftwareHLR", new RxVariant(true));panel.Resize += Panel_Resize;}private void CreateLayout(){ContextForDbDatabase contextForDbDatabase = new ContextForDbDatabase(DwgDatabase);contextForDbDatabase.UseGsModel = true;LayoutHelper = LayoutHelperDevice.SetupActiveLayoutViews(Device, contextForDbDatabase);LayoutHelper.UserGiContext = contextForDbDatabase;LayoutHelper.SetLogicalPalette(Device.DarkPalette);Rectangle rectangle = panel.Bounds;rectangle.Offset(-panel.Location.X, -panel.Location.Y);LayoutHelper.OnSize(rectangle);panel.Invalidate();}private void Form1_FormClosing(object sender, FormClosingEventArgs e){if (DwgDatabase != null){DwgDatabase.Dispose();Device.Dispose();LayoutHelper.Dispose();PaintGraphics.Dispose();}}}
}

http://www.ppmy.cn/news/591740.html

相关文章

php dwg格式,无需AutoCAD,用C#生成DWG文件

是一个类库:Teigha.NET for .DWG 利用它就可以在无需安装AutoCAD软件的情况下,生成、读取DWG文件,适合那些导入导出的场合。 Teigha曾用名OpenDWG 、DWGdirect,支持DWG, DXF, 和BDXF 示例代码: 先创建一个.NET2.0的控制台程序,再引用TD_Mgd_3.03_9.dll【我还不会传附件,需…

DWL文件能改成DWG文件打开吗?

大家都知道CAD生成的图纸文件格式是DWG,但是也有不少朋友看到图纸目录下会有DWL文件。下面我将为大家介绍一下这个情况是怎样发生的。 当我们在使用CAD时候出现了异常后,会发现图纸目录下会有一个与图纸同名的*.dwl文件,很多人因为DWG图纸没有…

DWG文件打开速度太慢怎么办!

之前有设计局的朋友联系我,说他们设计局的机器如何如何落后,只是打开一个DWG文件就要20分钟,连保存一下都要5分钟。我就好奇了,你们的DWG文件到底有多大啊?结果他回答我:“是小文件一般就100多M而已……” …

教你如何识别DWG文件版本

大家是否有遇到过因版本问题遇到图纸打不开的时候?你是不是很想知道,手头的这个DWG文件到底是用autocad哪个版本所创建的啊?不用着急,我有办法。 1:用windows 自带的记事本程序打开dwg文件。 2:很多乱码&am…

html预览dwg文件,如何使用纯javascript autodesk在查看器中脱机显示二维(.dwg)文件

请确保已完全下载所有提取的DWG可见气泡,并且要加载的模型路径正确,因为错误代码5代表 NETWORK_FILE_NOT_FOUND . var options = {env: Local, }; var doc = { rootFolder: Model, path: 29c9e407-f76f-a1c0-0972-dcb5b496fff9_f2d/primaryGraphics.f2d, name: 2D view }; var …

web页面查看dwg文件

用mxdraw控件&#xff0c;似乎只支持ie。但支持中文字体最好&#xff0c;有小小水印&#xff0c;但是我们网页上打开图纸&#xff0c;不都是只是为了瞄一眼嘛&#xff0c;不在乎这点水印。 html调用代码&#xff1a; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Tran…

python dwg文件_Python将dwg文件转换为shapefi

我是python的新手。我要将dwg文件转换为形状文件。我找到了一些密码。当我运行代码时,我得到一个错误。我怎样才能解决这个问题?这里是错误Traceback (most recent call last): File "C:\Users\Merve\Desktop\dwgtoshp\dwg2shp.py", line 91, in arcpy.Iteratedata…

html预览dwg文件,大佬救命!有关dwg文件预览的问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 请问有人做过dwg的文件预览吗,网上的代码有版本限制,用最新版的AutoCAD保存的dwg文件会提示参数无效,有大佬做过这个吗? 异常信息: 未处理System.Exception HResult=-2146233088 Message=参数无效。 Source=WindowsFormsTest…