添加项目文件。
This commit is contained in:
180
IFC_Revit_Interop_VERSION_2018/IFC_Revit_Interop/ViewData.cs
Normal file
180
IFC_Revit_Interop_VERSION_2018/IFC_Revit_Interop/ViewData.cs
Normal file
@@ -0,0 +1,180 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Autodesk.Revit.DB;
|
||||
|
||||
namespace IFC_Revit_Interop
|
||||
{
|
||||
// Token: 0x0200000C RID: 12
|
||||
public class ViewData
|
||||
{
|
||||
// Token: 0x0600004B RID: 75 RVA: 0x00004F14 File Offset: 0x00003114
|
||||
public ViewData()
|
||||
{
|
||||
}
|
||||
|
||||
// Token: 0x0600004C RID: 76 RVA: 0x00004F80 File Offset: 0x00003180
|
||||
public ViewData(View v)
|
||||
{
|
||||
this.ViewId = v.Id.IntegerValue;
|
||||
this.ViewName = v.Name;
|
||||
this.ViewOrigin.Add(v.Origin.X);
|
||||
this.ViewOrigin.Add(v.Origin.Y);
|
||||
this.ViewOrigin.Add(v.Origin.Z);
|
||||
this.Scale = v.Scale;
|
||||
this.ViewDirectionXYZ.Add(v.ViewDirection.X);
|
||||
this.ViewDirectionXYZ.Add(v.ViewDirection.Y);
|
||||
this.ViewDirectionXYZ.Add(v.ViewDirection.Z);
|
||||
this.UpDirectionXYZ.Add(v.UpDirection.X);
|
||||
this.UpDirectionXYZ.Add(v.UpDirection.Y);
|
||||
this.UpDirectionXYZ.Add(v.UpDirection.Z);
|
||||
this.RightDirectionXYZ.Add(v.RightDirection.X);
|
||||
this.RightDirectionXYZ.Add(v.RightDirection.Y);
|
||||
this.RightDirectionXYZ.Add(v.RightDirection.Z);
|
||||
this.CropBoxActive = v.CropBoxActive;
|
||||
if (v.CropBox.Enabled)
|
||||
{
|
||||
this.CropBox["Min"] = new List<double>();
|
||||
this.CropBox["Min"].Add(v.CropBox.Min.X);
|
||||
this.CropBox["Min"].Add(v.CropBox.Min.Y);
|
||||
this.CropBox["Min"].Add(v.CropBox.Min.Z);
|
||||
this.CropBox["Max"] = new List<double>();
|
||||
this.CropBox["Max"].Add(v.CropBox.Max.X);
|
||||
this.CropBox["Max"].Add(v.CropBox.Max.Y);
|
||||
this.CropBox["Max"].Add(v.CropBox.Max.Z);
|
||||
}
|
||||
foreach (Element element in Command_ViewExport.GetAllInViewCollector(v).ToElements())
|
||||
{
|
||||
if (!ViewData.IsElementOutsideCropBox(element, v))
|
||||
{
|
||||
this.Elements.Add(new ElementData(element, this));
|
||||
}
|
||||
}
|
||||
this.GetFilterColorsAndElements(v);
|
||||
}
|
||||
|
||||
// Token: 0x0600004D RID: 77 RVA: 0x000052A0 File Offset: 0x000034A0
|
||||
private static bool IsElementOutsideCropBox(Element e, View v)
|
||||
{
|
||||
bool flag = v.CropBoxActive;
|
||||
if (flag && v.CropBox.Enabled)
|
||||
{
|
||||
BoundingBoxXYZ cropBox = v.CropBox;
|
||||
BoundingBoxXYZ boundingBoxXYZ = e.get_BoundingBox(v);
|
||||
if (boundingBoxXYZ == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
Transform inverse = v.CropBox.Transform.Inverse;
|
||||
boundingBoxXYZ.Max = inverse.OfPoint(boundingBoxXYZ.Max);
|
||||
boundingBoxXYZ.Min = inverse.OfPoint(boundingBoxXYZ.Min);
|
||||
flag = boundingBoxXYZ.Min.X > cropBox.Max.X || boundingBoxXYZ.Max.X < cropBox.Min.X || boundingBoxXYZ.Min.Y > cropBox.Max.Y || boundingBoxXYZ.Max.Y < cropBox.Min.Y || boundingBoxXYZ.Min.Z > cropBox.Max.Z || boundingBoxXYZ.Max.Z < cropBox.Min.Z;
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
// Token: 0x0600004E RID: 78 RVA: 0x000053A8 File Offset: 0x000035A8
|
||||
public void GetFilterColorsAndElements(View view)
|
||||
{
|
||||
HashSet<int> hashSet = new HashSet<int>();
|
||||
foreach (ElementData elementData in this.Elements)
|
||||
{
|
||||
hashSet.Add(elementData.Id);
|
||||
}
|
||||
Document document = view.Document;
|
||||
try
|
||||
{
|
||||
foreach (ElementId elementId in view.GetFilters())
|
||||
{
|
||||
if (view.IsFilterApplied(elementId))
|
||||
{
|
||||
FilterElement filterElement = document.GetElement(elementId) as FilterElement;
|
||||
ICollection<ElementId> collection = null;
|
||||
if (filterElement is ParameterFilterElement)
|
||||
{
|
||||
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(document);
|
||||
ParameterFilterElement parameterFilterElement = filterElement as ParameterFilterElement;
|
||||
ICollection<ElementId> categories = parameterFilterElement.GetCategories();
|
||||
if (categories.Count > 0)
|
||||
{
|
||||
ElementMulticategoryFilter elementMulticategoryFilter = new ElementMulticategoryFilter(categories);
|
||||
filteredElementCollector = filteredElementCollector.WherePasses(elementMulticategoryFilter);
|
||||
}
|
||||
ICollection<FilterRule> rules = parameterFilterElement.GetRules();
|
||||
if (rules.Count > 0)
|
||||
{
|
||||
ElementParameterFilter elementParameterFilter = new ElementParameterFilter(rules.ToList<FilterRule>());
|
||||
filteredElementCollector = filteredElementCollector.WherePasses(elementParameterFilter);
|
||||
}
|
||||
collection = filteredElementCollector.ToElementIds();
|
||||
}
|
||||
else if (filterElement is SelectionFilterElement)
|
||||
{
|
||||
collection = (filterElement as SelectionFilterElement).GetElementIds();
|
||||
}
|
||||
if (collection.Count != 0)
|
||||
{
|
||||
Color projectionFillColor = view.GetFilterOverrides(elementId).ProjectionFillColor;
|
||||
if (projectionFillColor.IsValid)
|
||||
{
|
||||
string name = filterElement.Name;
|
||||
this.FilterColors[name] = new List<int>();
|
||||
this.FilterColors[name].Add((int)projectionFillColor.Red);
|
||||
this.FilterColors[name].Add((int)projectionFillColor.Green);
|
||||
this.FilterColors[name].Add((int)projectionFillColor.Blue);
|
||||
this.FilterCoveredElements[name] = new List<int>();
|
||||
foreach (ElementId elementId2 in collection)
|
||||
{
|
||||
if (hashSet.Contains(elementId2.IntegerValue))
|
||||
{
|
||||
this.FilterCoveredElements[name].Add(elementId2.IntegerValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x0400003A RID: 58
|
||||
public int ViewId;
|
||||
|
||||
// Token: 0x0400003B RID: 59
|
||||
public string ViewName;
|
||||
|
||||
// Token: 0x0400003C RID: 60
|
||||
public List<double> ViewOrigin = new List<double>();
|
||||
|
||||
// Token: 0x0400003D RID: 61
|
||||
public int Scale;
|
||||
|
||||
// Token: 0x0400003E RID: 62
|
||||
public List<double> ViewDirectionXYZ = new List<double>();
|
||||
|
||||
// Token: 0x0400003F RID: 63
|
||||
public List<double> UpDirectionXYZ = new List<double>();
|
||||
|
||||
// Token: 0x04000040 RID: 64
|
||||
public List<double> RightDirectionXYZ = new List<double>();
|
||||
|
||||
// Token: 0x04000041 RID: 65
|
||||
public bool CropBoxActive;
|
||||
|
||||
// Token: 0x04000042 RID: 66
|
||||
public Dictionary<string, List<double>> CropBox = new Dictionary<string, List<double>>();
|
||||
|
||||
// Token: 0x04000043 RID: 67
|
||||
public List<ElementData> Elements = new List<ElementData>();
|
||||
|
||||
// Token: 0x04000044 RID: 68
|
||||
public Dictionary<string, List<int>> FilterColors = new Dictionary<string, List<int>>();
|
||||
|
||||
// Token: 0x04000045 RID: 69
|
||||
public Dictionary<string, List<int>> FilterCoveredElements = new Dictionary<string, List<int>>();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user