VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • c#进入MapX二次开发鸡毛蒜皮一

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  1. 为图元设置颜色

  在一些分析中,如电气线路分析中,需要根据不同的状态改变图元的颜色,那么如何改变指定图元的设备颜色呢?下面提供代码解决该问题。

  shape.get_CellsU("LineColor").ResultIU = (double)VisDefaultColors.visDarkGreen;//有电(绿色)

  其中VisDefaultColors是一个枚举,有很多颜色,可以查下SDK,也可以使用其对应的数值来代替

Constant Value Description
visBlack
0
Black
visBlue
4
Blue
visCyan
7
Cyan
visDarkBlue
10
Dark blue
visDarkCyan
13
Dark cyan
visDarkGray
19
Dark gray
visDarkGreen
9
Dark green
visDarkRed
8
Dark red
visDarkYellow
11
Dark yellow
............

  上面的代码是比较简洁的写法,当然也可以使用下面这种方式:

  shape.get_CellsSRC((short)VisSectionIndices.visSectionObject, (short)VisRowIndices.visRowLine,(short)VisCellIndices.visLineColor).FormulaU = 4

  2. 获取图元设备的连接关系

  每个设备Shape都有一个Connects和FromConnects集合,该集合是Connect对象集合,每个Connect有ToSheet和FromSheet属性,分别是指向一个Shape对象,我们如果要获取设备的关联关系,就是需要判断这些Connect的ToSheet和FromSheet属性。

  如下代码:

      string strShapes = ";";
      if (IsSpecialEquipTypeInShape(shape))
      {
        foreach (Visio.Connect connect in shape.Connects)
        {
          strShapes += GetConnectsShapes(shape, connect.ToSheet);   //检查接入的设备
          strShapes += GetConnectsShapes(shape, connect.FromSheet);  //检查接出的设备
        }
  
        foreach (Visio.Connect connect in shape.FromConnects)
        {
          strShapes += GetConnectsShapes(shape, connect.ToSheet);   //检查接入的设备
          strShapes += GetConnectsShapes(shape, connect.FromSheet);  //检查接出的设备
        }
      }
    /**//// <summary>
    /// 获取与当前的图元连接(接入或接出)的所有相关设备
    /// </summary>
    private string GetConnectsShapes(Visio.Shape shape, Visio.Shape toFromSheet)
    {
      string strShapes = string.Empty;
      bool exist = VisioUtility.ShapeCellExist(toFromSheet, "设备类型");
      bool isSpecial = IsSpecialEquipTypeInShape(toFromSheet);
  
      if (toFromSheet != null && exist && isSpecial)
      {
        //Visio图元的连接集合,会存放自己本身的,所以此处需要判断。
        if (shape.ID != toFromSheet.ID)
        {
          strShapes += string.Format("{0};", toFromSheet.ID);
        }
      }
  
      return strShapes;
    }
3. 获取图元的属性集合

 

  我们知道,每个图元Shape甚至Page对象都有很多自定义属性,你可以通过在Visio的开发模式中查看ShapeSheet查看到。而所有这些属性中,每行又代表一个属性的各种定义信息,如Label是什么,Prompt(提示)是什么,Value(值)是什么,Type(类型)是什么,这就有点类似于我们在数据库定义一个字段,需要指定字段的名称,类型等等,那如果我们需要把这些信息保存下来,我们该如何获取呢?下面举例说明:

      Dictionary<string, StencilPropertyInfo> list = new Dictionary<string, StencilPropertyInfo>();
      StencilPropertyInfo propertyInfo;
      Visio.Cell shapeCell;
      short shortSectionProp = (short)VisSectionIndices.visSectionProp;
  
      if (shape != null)
      {
        for (short i = 0; i < shape.get_RowCount(shortSectionProp); i++)
        {
          if (shape.get_CellsSRCExists(shortSectionProp, i, (short)VisCellIndices.visCustPropsLabel, 0) != 0)
          {
            propertyInfo = new StencilPropertyInfo();
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsLabel);
            propertyInfo.Name = VisioUtility.FormulaStringToString(shapeCell.RowNameU);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsPrompt);
            propertyInfo.Prompt = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsFormat);
            propertyInfo.Format = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsValue);
            propertyInfo.Value = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsSortKey);
            propertyInfo.SortKey = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsType);
            propertyInfo.PropType = (PropType)shapeCell.get_ResultInt((short)VisUnitCodes.visNumber, 0);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsInvis);
            if ("True".Equals(VisioUtility.FormulaStringToString(shapeCell.FormulaU), StringComparison.OrdinalIgnoreCase))
            {
              propertyInfo.InVisible = true;
            }
  
            propertyInfo.PropRowID = i;           
  
            if(!list.ContainsKey(propertyInfo.Name))
            {
              list.Add(propertyInfo.Name, propertyInfo);
            }
          }
        }
      }

 

  return list;

  4. 关闭视图中打开的所有模具

  一般来说,一个Visio文档,一般会打开很多模具窗口,用来辅助画图的,我们有时候不小心关闭一些,又有可能打开多几个,那么你是如何记住这些打开的模具文件的呢,我们要如何关闭全部呢,你可以使用TryCatch来关闭每个文件,即使它可能已经关闭了,这种才保证不会出错;我们不太喜欢暴力,还有没有更好的方法呢,让它自己知道那些可以关闭的呢?

    /**//// <summary>
    /// 关闭视图中打开的所有模具
    /// </summary>
    /// <param name="visApp"></param>
    /// <returns></returns>
    public bool CloseAllStencileDocument(Application visApp)
    {
      string[] strs = new string[0];
      Array arr = strs as Array;
      visApp.Documents.GetNames(out arr);
      Document visDoc;
      foreach (object file in arr)
      {
        if (file.ToString().IndexOf(".vss", StringComparison.OrdinalIgnoreCase) > 0)
        {
          visDoc = visApp.Documents[file];
          if (visDoc != null)
          {
            visDoc.Close();
          }
        }
      }
      return true;
    }

  这下明白了多少了呢,要饮水思源哦

 

  我们知道,每个图元Shape甚至Page对象都有很多自定义属性,你可以通过在Visio的开发模式中查看ShapeSheet查看到。而所有这些属性中,每行又代表一个属性的各种定义信息,如Label是什么,Prompt(提示)是什么,Value(值)是什么,Type(类型)是什么,这就有点类似于我们在数据库定义一个字段,需要指定字段的名称,类型等等,那如果我们需要把这些信息保存下来,我们该如何获取呢?下面举例说明:

      Dictionary<string, StencilPropertyInfo> list = new Dictionary<string, StencilPropertyInfo>();
      StencilPropertyInfo propertyInfo;
      Visio.Cell shapeCell;
      short shortSectionProp = (short)VisSectionIndices.visSectionProp;
  
      if (shape != null)
      {
        for (short i = 0; i < shape.get_RowCount(shortSectionProp); i++)
        {
          if (shape.get_CellsSRCExists(shortSectionProp, i, (short)VisCellIndices.visCustPropsLabel, 0) != 0)
          {
            propertyInfo = new StencilPropertyInfo();
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsLabel);
            propertyInfo.Name = VisioUtility.FormulaStringToString(shapeCell.RowNameU);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsPrompt);
            propertyInfo.Prompt = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsFormat);
            propertyInfo.Format = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsValue);
            propertyInfo.Value = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsSortKey);
            propertyInfo.SortKey = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsType);
            propertyInfo.PropType = (PropType)shapeCell.get_ResultInt((short)VisUnitCodes.visNumber, 0);
  
            shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsInvis);
            if ("True".Equals(VisioUtility.FormulaStringToString(shapeCell.FormulaU), StringComparison.OrdinalIgnoreCase))
            {
              propertyInfo.InVisible = true;
            }
  
            propertyInfo.PropRowID = i;           
  
            if(!list.ContainsKey(propertyInfo.Name))
            {
              list.Add(propertyInfo.Name, propertyInfo);
            }
          }
        }
      }



相关教程