使用Teigha.net读取CAD的常用功能模块
Teigha中实体旋转
代码:
using (var trans = database.TransactionManager.StartTransaction())
{
Entity ent = trans.GetObject(entityId, OpenMode.ForWrite) asEntity;
if (ent != null )
{
Extents3d exts = ent.GeometricExtents;
Point3d poCenter = newPoint3d((exts.MinPoint.X + exts.MaxPoint.X) / 2, (exts.MinPoint.Y + exts.MaxPoint.Y) / 2, 0);
Matrix3d Matr4 = Matrix3d.Rotation((30 * Math.PI / 180),Vector3d.ZAxis, poCenter);
ent.TransformBy(Matr4);
}
trans.Commit();
}
//以实体的外接矩形的中心点为圆心旋转30度。
Teigha中跳转至显示视图跳转到某点,并以此为圆心显示内容
代码:
using (var trans = database.TransactionManager.StartTransaction())
{
Point3d EndPoint=new Point3d(0,0,0);
using (Teigha.GraphicsSystem.View pView = helperDevice.ActiveView)
{
pView.Dolly(EndPoint.X - pView.Position.X, EndPoint.Y - pView.Position.Y, 0);
}
trans.Commit();
}
if (helperDevice != null)
helperDevice.Update();
Invalidate();
Teigha 窗体内容的旋转
代码:
if (helperDevice != null)
{
using (Teigha.GraphicsSystem.View pView = BaseF.helperDevice.ActiveView)
{
//2为指定的角度
pView.Roll(2 * Math.PI / 180);
Invalidate();
}
helperDevice.Update();
helperDevice.Invalidate();
}
Invalidate();
Teigha 直接将块中内容导入其他块中(适用于不同dwg文件的导入)
代码:
Database databa = newDatabase(false, false);
databa.ReadDwgFile(@"C:\Users\admin\Desktop\安装略图.dwg", FileOpenMode.OpenForReadAndAllShare, false, "");
using (var trans = database.TransactionManager.StartTransaction())
{
BlockTable block = database.BlockTableId.GetObject(OpenMode.ForWrite) asBlockTable;
using (var tran = databa.TransactionManager.StartTransaction())
{
BlockTable blockold = databa.BlockTableId.GetObject(OpenMode.ForWrite) asBlockTable;
database.Insert("需要导入的块名称", databa, false);
database.Insert( "需要导入的块名称",“重新创建一个新的名字”, databa, false);
}
trans.Commit();
}
Teigha 获取文档中包含的字体样式(主要用于计算机不包含CAD字体时)
//修改字体后需要刷新内容,最好是来回切换布局!
代码:
List<string> StrList = newList<string>();
using (var trans = BaseF.database.TransactionManager.StartTransaction())
{
using (TextStyleTable txtstyles = (TextStyleTable)trans.GetObject(BaseF.database.TextStyleTableId, OpenMode.ForRead))
{
string exCADlow = “.eot,.eot,.otf,.fon,.font,.ttf,.ttc,.woff,.woff2,.shx”;
foreach (ObjectId item in txtstyles)
{
using (TextStyleTableRecord txtse = (TextStyleTableRecord)trans.GetObject(item, OpenMode.ForRead))
{
if (exCADlow.Contains(Path.GetExtension(txtse.FileName).ToLower()) && Path.GetExtension(txtse.FileName).ToLower() != "")
{
StrList.Add(txtse.FileName);
}
}
}
}
Teigha 实现移动视图的效果
//根据按下和移动时的鼠标坐标移动窗体显示的CAD内容
代码:
///<summary>
///移动视图
///</summary>
///<param name="PoMove"></param>
privatevoid Viewer_UDLR(Point PoMove)
{
double dx = -(PoMove.X - MouseDowns.X);
double dy = -(PoMove.Y - MouseDowns.Y);
MouseDowns = PoMove;
using (DBObject pVpObj = Aux.active_viewport_id(database).GetObject(OpenMode.ForWrite))
{
AbstractViewportData pAVD = newAbstractViewportData(pVpObj);
Teigha.GraphicsSystem.View pView = pAVD.GsView;
Vector3d vec = newVector3d(dx, dy, 0.0);
vec = vec.TransformBy((pView.ScreenMatrix * pView.ProjectionMatrix).Inverse());
pView.Dolly(vec);
pAVD.SetView(pView);
pAVD.Dispose();
pVpObj.Dispose();
Invalidate();
}
}
Teigha 移动实体所在位置
代码:
///<summary>
///移动实体
///</summary>
///<param name="PoMove"></param>
privatevoid MoverEntity_view(Point PoMove)
{
Point3d Podown1 = toEyeToWorld(MouseDowns.X, MouseDowns.Y);
Point3d Pomove1= toEyeToWorld(PoMove.X, PoMove.Y);
double dx = Pomove1.X - Podown1.X;
double dy = Pomove1.Y - Podown1.Y;
MouseDowns = PoMove;
List<ObjectId> Listitem = newList<ObjectId>();
using (var trans = database.TransactionManager.StartTransaction())
{
foreach (ObjectId item in SelectID)
{
if (Listitem.FindIndex(s1 => s1 == item) == -1)
{
Listitem.Add(item);
using (Entity Ent = item.GetObject(OpenMode.ForWrite) asEntity)
{
PoDowns = newPoint3d(PoDowns.X + dx, PoDowns.Y + dy,0);
Point3d Pointnew = newPoint3d(dx, dy, 0);
Matrix3d mat = Matrix3d.Displacement(Pointnew.GetAsVector());
Ent.TransformBy(mat);
}
}
}
trans.Commit();
}
Listitem.Clear();
if (helperDevice != null)
helperDevice.Update();
使用Teigha.net读取CAD的常用功能模块的更多相关文章
- KeilC51常用功能模块使用说明
本文档包括单片机系统中常用到的时钟中断.通讯及键盘扫描等模块(见所附源程序)的说明.这些模块使用前后台系统模型.为达到最大的灵活性, 需要在用户工程中定义config.h文件, 在其中定义各模块可选参 ...
- PHP常用功能模块
错误异常模块 错误处理 1. 系统定义了一些二进制码,用来表示错误报告的级别: 在 /etc/php5/apache2/php.ini中修改php配置文件,其中display_errors默认 ...
- Biopython常用功能模块
Biopython项目是旨在减少计算生物学中代码重复的开源项目之一,由国际开发人员协会创建. 它包含表示生物序列和序列注释的类,并且能够读取和写入各种文件格式(FASTA,FASTQ,GenBank和 ...
- python常用功能模块
路径相关:os.pathlib Windows注册表相关:winreg 系统cpu.内存.线程相关:psutil 文件.文件夹处理:shutil 解析和生成ini文件:ConfigParser:(co ...
- IOS开发-OC学习-常用功能代码片段整理
IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...
- Linux系统Bash的常用功能(9)
了解了基本的Linux文件文件系统的概念后,我们将更深入的了解一下Linux的其他方面的内容,那就是我们所使用的用户接口,也就是大家常听到的 『Shell』 ,『这个shell并不是黑客反弹的shel ...
- Python常用功能函数
Python常用功能函数汇总 1.按行写字符串到文件中 import sys, os, time, json def saveContext(filename,*name): format = '^' ...
- C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
- js实现第一次打开网页弹出指定窗口(常用功能封装很好用)
js实现第一次打开网页弹出指定窗口(常用功能封装很好用) 一.总结 1.常用功能封装:之前封装的cookie的操作函数非常好用,我自己也可以这么搞 二.js实现第一次打开网页弹出指定窗口 练习1:第一 ...
随机推荐
- GitHub 上这几个沙雕项目,够我玩几天
在家里都憋坏了吧?每天睡了吃吃了睡,该找点事做做了,今天推荐几个好(沙)玩(雕)的开源项目,好在家打发时间. 91 吴先生 一个在线的 PornHub 风格 Logo 生成工具 Logoly.Pro ...
- HTML超全笔记
HTML概述 概念:是最基础的网页开发语言 Hyper Text Markup Language 超文本标记语言 超文本: 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本. 标记 ...
- 使用jmeter做接口测试
1.启动jmeter. 我们可以找到Jmeter/bin 目录下的jmeter-server这个脚本,运行即可. 在下图打开的Jmeter 页面中,右键“测试计划” -> “添加” -> ...
- 外网通过frp进行windows远程文件共享
需求 远程访问位于内网中的文件.例如,家里,公司内. 所需技术 frp windows文件共享 具有公网地址的服务器一台 实现过程 windows文件共享,首先自己在局域网内实现.这不是本文重点. 公 ...
- 安装jrebel并激活
1.File-Settings-Plugins搜索jrebel,找到JRebel for IntelliJ ,点击install(我这里已经安装过了,所以显示的是更新) 2.重启idea 3.激活步骤 ...
- java线程池及创建多少线程合适
java线程池 1.以下是ThreadPoolExecutor参数完备构造方法: public ThreadPoolExecutor(int corePoolSize,int maximumPoolS ...
- codeforces 922 B. Magic Forest(枚举、位运算(异或))
题目链接:点击打开链接 Imp is in a magic forest, where xorangles grow (wut?) A xorangle of order n is such a no ...
- Go语言实现:【剑指offer】数组中出现次数超过一半的数字
该题目来源于牛客网<剑指offer>专题. 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...
- yum仓库配置与内网源部署记录
使用yum的好处主要就是在于能够自动解决软件包之间的依赖.这使得维护更加容易.这篇文章主要就是记录部署内网源的操作过程以及yum工具如何使用 因为需要.数据库要从Oracle迁移至MySQL.在部署M ...
- 使用docker19.03.6部署zabbix
可参考官方文档:https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers 1)启动一个空的mysql服务器实 ...