visio二次开发——图纸解析之线段
多写博客,其实还是蛮好的习惯的,当初大学的时候导师就叫我写,但是就是懒,大学的时候,谁不是魔兽或者LOL呢,是吧,哈哈哈。
好了,接着上一篇visio二次开发——图纸解析,我继续写。
摘要: (转发请注明来源:http://www.cnblogs.com/EminemJK/)
1、创建Doc对象
using Microsoft.Office.Interop.Visio; short openModel=(short)VisOpenSaveArgs.visOpenDocked | (short)VisOpenSaveArgs.visOpenRO; //设置打开模式
InvisibleApp app=new InvisibleApp();
Document visio=app.Document.OpenEx(filePath,openModel);
这样就可以获取到visio的Document对象了,这里我并没有使用ApplicationClass 这个类中的打开方法去打开文件,因为
ApplicationClass app=new ApplicationClass();
Document visio=app.Document.OpenEx(filePath,openModel);
这样子打开visio的话,new的时候前台会创建一个空的visio程序来等待一个文件的打开,体验感觉很不好,即使加上
app.Visible=false;
也会一闪而过,所以,这里使用visio的另一个接口InvisibleApp来后台打开文件,前台是感觉不到的。
2、读取visio图纸中的线段
//存储器件信息的实体类
public Class ShapeInfo
{
public string DeviceName {get;set;} //器件名称
public string Position {get;set;} //位置
public string DeviceDetail{get;set;} //形状数据
public string Label {get;set;} //备注
//其他信息……(根据需要)
} //存储线信息的实体类
public Class ShapeLine
{
public string LConTxt{get,set;} //线文本
public string LShapeDataName{get,set;} //形状数据名称
public string LPosition {get,set;} //线位置
public string LLabel{get,set;} //备注信息
public ShapeInfo FShapeInfo;
public ShapeInfo TShapeInfo; //线段两端所连接的形状元素
//其他信息……(根据需要)
}
//存储器件信息
Dictionary<string, List<ShapeInfo>> visioInfoDic = null;
//存储线段信息
Dictionary<string, List<ShapeLine>> visioLineDic = null; 好了,做好前提工作之后,开干,前面一篇已经说到大体的操作思路,读取线在这个方法内 if(sp.Connects.Count>)
{
ShapeLine spL=new ShapeLine();
spL.LConTxt=sp.Text;
spL.LShapeDataName=sp.Name;
spL.LPosition=getShapeCellPosition(sp); //获取位置,和器件一样。共用
getPointInfo(sp,spL,false); //后面讲解,获取线段两端的器件的信息
spL.LLabel=GetShapeCellProp(sp); //获取形状数据信息,和器件一样。共用
}
先讲共用的方法吧,获取位置,其实在这里,获取位置对于我来说,并没什么用,可能对其他人想要操作visio的才有需要,所以还是讲吧。
/// <summary>
/// 获取图形位置信息
/// </summary>
private static string GetShapLoaclInfo(Shape shape)
{
//依次取出“PinX”、“PinY”、“Width”、“Height”、“LocPinX”、“LocPinY”、“Angle”、“FlipX”、“FlipY”
string shapLocalinfo = "";
for (int j = ; j < ; j++)
{
Cell cex = shape.get_CellsSRC((short)VisSectionIndices.visSectionObject, (short)VisRowIndices.visRowXFormOut,
(short)j);
if (j > )
shapLocalinfo += ",";
shapLocalinfo += cex.ResultIU.ToString();
}
return shapLocalinfo;
}
也行大家发现了,这个
shape.get_CellsSRC((short)VisSectionIndices.visSectionObject, (short)VisRowIndices.visRowXFormOut,(short)j);
里面,几个参数,这是方法【get_CellsSRC】是接下来我们一直用到来获取元素的信息的,这个方法里面参数很有意思,上一篇我有提到
大家【显示ShapeSheet】,都是从这里面来枚举的,【显示ShapeSheet】下面查看可以看到是一个一个表来分类的。
第一个参数:
代表VisSectionIndices对象下的枚举值,也就是【显示ShapeSheet】下面的表名,可以这么理解;
第二个参数:
代表表中的行;
第三个参数:
代表表中的列。
明白这点就行了,枚举值还可以参考微软官网的给的,我们都可以通过类似这种操作来获取。
/// <summary>
/// 获取图形属性
/// </summary>
private static string GetShapeCellProp(Shape shapeTarget)
{
string info = "";
for (int i = ; i < shapeTarget.get_RowCount((short)VisSectionIndices.visSectionProp); i++)
{
Cell cellKey = shapeTarget.get_CellsSRC((short)VisSectionIndices.visSectionProp, (short)i, (short));
Cell cellValue = shapeTarget.get_CellsSRC((short)VisSectionIndices.visSectionProp, (short)i, (short)VisCellIndices.visUserValue);
if (i > )
info += ";";
info += FormulaForString(cellKey.Formula) + ":" + FormulaForString(cellValue.Formula);
}
return info;
}
形状数据例图:
visio二次开发——图纸解析之线段的更多相关文章
- visio二次开发——图纸解析
(转发请注明来源:http://www.cnblogs.com/EminemJK/) visio二次开发的案例或者教程,国内真的非常少,这个项目也是花了不少时间来研究visio的相关知识,困难之所以难 ...
- visio二次开发——图纸解析之形状
今天有空,下班前补齐解析visio图形形状的方法,包含图形背景色.字体颜色.备注信息.形状数据取值. /// <summary> /// 设置形状的选择属性 /// </summar ...
- C#进行Visio二次开发之文件导出及另存Web页面
在我前面很多关于Visio的开发过程中,介绍了各种Visio的C#开发应用场景,包括对Visio的文档.模具文档.形状.属性数据.各种事件等相关的基础处理,以及Visio本身的整体项目应用,虽然时间过 ...
- visio二次开发初始化问题
(转发请注明来源:http://www.cnblogs.com/EminemJK/) 问题: axDrawingControl1初始化失败((System.ComponentModel.ISuppor ...
- (5)微信二次开发 之 XML格式数据解析
1.首先理解一下html html的全名是:HyperText Transfer markup language 超级文本标记语言,html本质上是一门标记(符合)语言,在html里,这些标记是事先定 ...
- java微信开发API解析(二)-获取消息和回复消息
java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...
- ECMALL模板解析机制.MVC架构分析及文件目录说明.二次开发指南手册(转)
ECMALL模板解析语法与机制 http://www.nowamagic.net/architecture/archt_TemplateSyntaxAndAnalysis.php ECMALL模块开发 ...
- 解析大型.NET ERP系统 窗体、查询、报表二次开发
详细介绍Enterprise Solution 二次开发的流程步骤,主要包括数据输入窗体(Entry Form),查询(Query/Enquiry),报表(Report)三个重要的二次开发项目. 数据 ...
- C#开发BIMFACE系列2 二次开发流程
系列目录 [已更新最新开发文章,点击查看详细] BIMFACE 平台是一个对外开放的平台,建筑行业的相关公司.软件公司或者有 BIM 业务需求的公司都可以注册成为开发者并使用其提供的强大功能. ...
随机推荐
- Ubuntu搭建Note.Js 平台
1. 安装nodeJs和npm apt-get install nodejsapt-get install npm 2 .node有一个模块叫n,是专门用来管理node.js的版本的.首先安装n模块: ...
- CSS控制TD内的文本超出指定宽度后不换行而用省略号代替
<style type="text/css"> .lineOverflow { width: 100px; border:#000 solid 1px; text-ov ...
- Windbg跟踪临界区的BUG
最近跟踪了一个程序的界面卡死问题,该卡死偶尔出现,在抓到一次dump后用windbg载入分析,打印出函数调用堆栈后,一眼可以看出是临界区死锁了. 代码: 0:000:x86> kb ChildE ...
- 【原】移动web页面支持弹性滚动的3个方案
有段时间一直折腾移动端页面弹性滚动的各种问题,做了点研究,今天做个小分享~ 传统 pc 端中,子容器高度超出父容器高度,通常使用 overflow:auto 可出现滚动条拖动显示溢出的内容,而移动we ...
- AR(增强现实) 知识篇
增强现实(Augmented Reality,简称AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这种技术估计由1990年 ...
- [备份]破解Xamarin
[转]试用了一阵子Mono For Android,今天到期了,,囊中羞涩,只好破解. 说是要在vs2013的英文界面下运行破解包,不知道是真是假,下载并安装了一个. 然后又下载了破解包.是个名为xa ...
- Mysql数据库主从心得整理
管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...
- 配置Jenkins使用Gitlab的代码库进行构建
1. 首先确认Jenkins上安装了Git plugin, 以及Subversion plugin Manage Jenkins -> Plugin Manager -> Availabl ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 所有的基础数据都可以恢复删除
客户的需求如下: 所有基礎信息需要記錄創建人,創建時間,更改人,更改時間,刪除人,刪除時間.有停用基礎信息功能(停用不是刪除,只是暫時停用).基礎信息可以查出已經刪除的信息(有選項可以選擇),有方法把 ...
- 【跟着子迟品 underscore】JavaScript 数组展开以及重要的内部方法 flatten
Why underscore (觉得这一段眼熟的童鞋可以直接跳到正文了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...