/// <summary>
/// Sorts excel input database into a list of DataSet objects
/// </summary>
/// <param name="DrawingData">Array returned by ExtractSheetData(DataSet)</param>
/// <returns>List of DataSet objects</returns>
private List<DataSet> SortDataSets(object[,] DrawingData, string Method)
{
List
<DataSet
> DeviceData
= new List
<DataSet
>(); for (int i = 2; i <= DrawingData.GetUpperBound(0); i++)
{
if (Method == "Discreet")
{
if (DrawingData.GetValue(i, TagNameOS) != null)
{
DataSet DS
= new DataSet
(); string[] WireTags
= new string[8]; DS.Channel = DrawingData.GetValue(i, ChannelOS).ToString();
DS.TagName = DrawingData.GetValue(i, TagNameOS).ToString();
if (DrawingData.GetValue(i, TagNumberOS) != null)
DS.TagNumber = DrawingData.GetValue(i, TagNumberOS).ToString();
if (DrawingData.GetValue(i, DescripOS) != null)
DS.Descriptor1 = DrawingData.GetValue(i, DescripOS).ToString();
if (DrawingData.GetValue(i, DescripOS + 1) != null)
DS.Descriptor2 = DrawingData.GetValue(i, DescripOS + 1).ToString();
if (DrawingData.GetValue(i, DescripOS + 2) != null)
DS.Descriptor3 = DrawingData.GetValue(i, DescripOS + 2).ToString();
if (DrawingData.GetValue(i, DescripOS + 3) != null)
DS.Descriptor4 = DrawingData.GetValue(i, DescripOS + 3).ToString();
if (DrawingData.GetValue(i, AreaOS) != null)
DS.Area = DrawingData.GetValue(i, AreaOS).ToString();
if (DrawingData.GetValue(i, TermTypeOS) != null)
{
DS.TermType = DrawingData.GetValue(i, TermTypeOS).ToString();
if (DrawingData.GetValue(i, Term1OS) != null)
DS.Term1Tag1 = DrawingData.GetValue(i, Term1OS).ToString();
if (DrawingData.GetValue(i, Term1OS + 1) != null)
DS.Term1Tag2 = DrawingData.GetValue(i, Term1OS + 1).ToString();
if (DrawingData.GetValue(i, Term2OS) != null)
DS.Term2Tag1 = DrawingData.GetValue(i, Term2OS).ToString();
if (DrawingData.GetValue(i, Term2OS + 1) != null)
DS.Term2Tag2 = DrawingData.GetValue(i, Term2OS + 1).ToString();
}
if (DrawingData.GetValue(i, WTYPE12) != null)
DS.WType12 = DrawingData.GetValue(i, WTYPE12).ToString();
if (DrawingData.GetValue(i, WTYPE34) != null)
DS.WType34 = DrawingData.GetValue(i, WTYPE34).ToString();
if (DrawingData.GetValue(i, TermNOS) != null)
DS.TermNType = DrawingData.GetValue(i, TermNOS).ToString();
if (DrawingData.GetValue(i, TermNOS + 1) != null)
DS.TermNTag1 = DrawingData.GetValue(i, TermNOS + 1).ToString();
if (DrawingData.GetValue(i, TermNOS + 2) != null)
DS.TermNTag2 = DrawingData.GetValue(i, TermNOS + 2).ToString();
if (DrawingData.GetValue(i, TermNOS) != null)
DS.TermFType = DrawingData.GetValue(i, TermFOS).ToString();
if (DrawingData.GetValue(i, TermNOS + 1) != null)
DS.TermFTag1 = DrawingData.GetValue(i, TermNOS + 1).ToString();
if (DrawingData.GetValue(i, TermNOS + 2) != null)
DS.TermFTag2 = DrawingData.GetValue(i, TermNOS + 2).ToString();
for (int j = 0; j < 8; j++)
if (DrawingData.GetValue(i, WireTagsOS + j) != null)
WireTags[j] = DrawingData.GetValue(i, WireTagsOS + j).ToString();
DS.WireTags = WireTags;
DeviceData.Add(DS);
}
}
if (Method == "Tagging")
{
if (DrawingData.GetValue(i, TagNameOS) != null)
{
DataSet DS
= new DataSet
(); DS.Channel = DrawingData.GetValue(i, ChannelOS).ToString();
DS.TagName = DrawingData.GetValue(i, TagNameOS).ToString();//TagName holds text alignment
DS.TagNumber = DrawingData.GetValue(i, TagNameOS + 1).ToString();//TagNumber holds text height
if (DrawingData.GetValue(i, TagNameOS + 2) != null)
DS.Descriptor1 = DrawingData.GetValue(i, TagNameOS + 2).ToString();
else DS.Descriptor1 = null;
if (DrawingData.GetValue(i, TagNameOS + 3) != null)
DS.Descriptor2 = DrawingData.GetValue(i, TagNameOS + 3).ToString();
else DS.Descriptor2 = null;
if (DrawingData.GetValue(i, TagNameOS + 4) != null)
DS.Descriptor3 = DrawingData.GetValue(i, TagNameOS + 4).ToString();
else DS.Descriptor3 = null;
if (DrawingData.GetValue(i, TagNameOS + 5) != null)
DS.Descriptor4 = DrawingData.GetValue(i, TagNameOS + 5).ToString();
else DS.Descriptor4 = null;
if (DrawingData.GetValue(i, TagNameOS + 6) != null) // TermType holds text style
DS.TermType = DrawingData.GetValue(i, TagNameOS + 6).ToString();
else DS.TermType = null;
if (DrawingData.GetValue(i, TagNameOS + 7) != null) // HomeRun holds text direction
DS.HomeRun = DrawingData.GetValue(i, TagNameOS + 7).ToString();
else DS.HomeRun = null;
DeviceData.Add(DS);
}
}
}
return DeviceData;
}
/// <summary>
/// Sorts master dictionary data into individual dictionaries
/// </summary>
/// <param name="DictionaryData">Array returned by ExtractSheetData(Dictionary)</param>
/// <returns>Array of dictionary objects</returns>
private object[] SortToDictionaries(object[,] DictionaryData)
{
Dictionary
<string, BlockSet
> BlockDictionary
= new Dictionary
<string, BlockSet
>(); Dictionary
<string, AreaSet
> AreaDictionary
= new Dictionary
<string, AreaSet
>(); Dictionary
<string, LayerSet
> LayerDictionary
= new Dictionary
<string, LayerSet
>(); Dictionary
<string,
double> TextDictionary
= new Dictionary
<string,
double>(); Dictionary
<string, AttributeSet
> AttributeDictionary
= new Dictionary
<string, AttributeSet
>(); object[] Dictionaries
= new object[5]; for (int i = 1; i <= DictionaryData.GetUpperBound(0); i++)
{
switch (DictionaryData[i, 1] as string)
{
case "B":
BlockSet bs
= new BlockSet
(); bs.GraphName = DictionaryData[i, GraphNmOs].ToString();
bs.InsertPt = (double)DictionaryData[i, InsPtOs];
bs.Width = (double)DictionaryData[i, WidthOs];
bs.Scale = (double)DictionaryData[i, ScaleOS];
bs.ExData = DictionaryData[i, ExData] as string;
BlockDictionary.Add(DictionaryData[i, ProgNmOs].ToString(), bs);
break;
case "L":
LayerSet ls
= new LayerSet
(); ls.GraphName = DictionaryData[i, GraphNmOs].ToString();
LayerDictionary.Add(DictionaryData[i, ProgNmOs].ToString(), ls);
break;
case "A":
AreaSet AreaSet
= new AreaSet
(); AreaSet.JunctionBoxes = DictionaryData[i, JBOS].ToString();
AreaDictionary.Add(DictionaryData[i, ProgNmOs].ToString(), AreaSet);
break;
case "T":
TextDictionary.Add(DictionaryData[i, ProgNmOs].ToString(),
(double)DictionaryData[i, TextSizeOS]);
break;
case "AT":
AttributeSet AttSet
= new AttributeSet
(); if (DictionaryData[i,ProgNmOs+1]!=null)
AttSet.Attribute1 = DictionaryData[i, ProgNmOs + 1].ToString();
if (DictionaryData[i, ProgNmOs + 2] != null)
AttSet.Attribute2 = DictionaryData[i, ProgNmOs + 2].ToString();
if (DictionaryData[i, ProgNmOs + 3] != null)
AttSet.Attribute3 = DictionaryData[i, ProgNmOs + 3].ToString();
if (DictionaryData[i, ProgNmOs + 4] != null)
AttSet.Attribute4 = DictionaryData[i, ProgNmOs + 4].ToString();
if (DictionaryData[i, ProgNmOs + 5] != null)
AttSet.Attribute5 = DictionaryData[i, ProgNmOs + 5].ToString();
AttributeDictionary.Add(
DictionaryData[i, ProgNmOs].ToString(), AttSet);
break;
default:
break;
}
}
Dictionaries[0] = BlockDictionary;
Dictionaries[1] = LayerDictionary;
Dictionaries[2] = AreaDictionary;
Dictionaries[3] = TextDictionary;
Dictionaries[4] = AttributeDictionary;
return Dictionaries;
}
/// <summary>
/// Sets text attachment points depending on the dwg layout direction
/// </summary>
/// <param name="UnitXVector"></param>
/// <returns></returns>
private AttachmentPoint[] GetMtextAttachment(double UnitXVector)
{
AttachmentPoint
[] attPts
= new AttachmentPoint
[8]; if (UnitXVector > 0)
{
attPts[0] = AttachmentPoint.MiddleLeft;
attPts[1] = AttachmentPoint.MiddleLeft;
attPts[4] = AttachmentPoint.MiddleLeft;
attPts[5] = AttachmentPoint.MiddleLeft;
attPts[2] = AttachmentPoint.MiddleRight;
attPts[3] = AttachmentPoint.MiddleRight;
attPts[6] = AttachmentPoint.MiddleRight;
attPts[7] = AttachmentPoint.MiddleRight;
}
else
{
attPts[0] = AttachmentPoint.MiddleRight;
attPts[1] = AttachmentPoint.MiddleRight;
attPts[4] = AttachmentPoint.MiddleRight;
attPts[5] = AttachmentPoint.MiddleRight;
attPts[2] = AttachmentPoint.MiddleLeft;
attPts[3] = AttachmentPoint.MiddleLeft;
attPts[6] = AttachmentPoint.MiddleLeft;
attPts[7] = AttachmentPoint.MiddleLeft;
}
return attPts;
}
/// <summary>
/// Calculates MText insertion points for a drawing line
/// </summary>
/// <param name="UnitXVector">DWG flow direction</param>
/// <param name="StdWidth">Terminal Width</param>
/// <param name="TextHeight">Text Height</param>
/// <param name="Neutral">Neutral Terminal Position</param>
/// <param name="Fuse">Fuse Terminal Position</param>
/// <returns>Array of points</returns>
private Point3d[] GetMtextInserts(
double UnitXVector,
double StdWidth,
double TextHeight,
Point3d Neutral,
Point3d Fuse)
{
StdWidth = (StdWidth / 2) + 2;
Point3d CenterPt
= new Point3d
( (Fuse.X + Neutral.X) / 2,
(Fuse.Y + Neutral.Y) / 2,
(Fuse.Z + Neutral.Z) / 2);
Point3d
[] insPts
= new Point3d
[8]; insPts
[0] = new Point3d
(Neutral
.X + 2 * UnitXVector,
Neutral.Y + TextHeight, Neutral.Z);
insPts
[1] = new Point3d
(Neutral
.X + 2 * UnitXVector,
Neutral.Y - TextHeight, Neutral.Z);
insPts
[2] = new Point3d
(CenterPt
.X - StdWidth
* UnitXVector,
CenterPt.Y + TextHeight, CenterPt.Z);
insPts
[3] = new Point3d
(CenterPt
.X - StdWidth
* UnitXVector,
CenterPt.Y - TextHeight, CenterPt.Z);
insPts
[4] = new Point3d
(CenterPt
.X + StdWidth
* UnitXVector,
CenterPt.Y + TextHeight, CenterPt.Z);
insPts
[5] = new Point3d
(CenterPt
.X + StdWidth
* UnitXVector,
CenterPt.Y - TextHeight, CenterPt.Z);
insPts
[6] = new Point3d
(Fuse
.X - 2 * UnitXVector,
Fuse.Y + TextHeight, Fuse.Z);
insPts
[7] = new Point3d
(Fuse
.X - 2 * UnitXVector,
Fuse.Y - TextHeight, Fuse.Z);
return insPts;
}
}
}