248 lines
9.0 KiB
C#
248 lines
9.0 KiB
C#
|
|
|
|||
|
|
using Autodesk.Revit.DB;
|
|||
|
|
using Autodesk.Revit.UI;
|
|||
|
|
using Autodesk.Revit.UI.Selection;
|
|||
|
|
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
|
|||
|
|
namespace HYDragCurveJig
|
|||
|
|
{
|
|||
|
|
public class TestJigControler
|
|||
|
|
{
|
|||
|
|
public TestJigControler(ExternalCommandData commandData)
|
|||
|
|
{
|
|||
|
|
this.externalCommandData_0 = commandData;
|
|||
|
|
this.options_0 = this.externalCommandData_0.Application.Application.Create.NewGeometryOptions();
|
|||
|
|
this.options_0.View = this.externalCommandData_0.Application.ActiveUIDocument.Document.ActiveView;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool Test(ref string message)
|
|||
|
|
{
|
|||
|
|
List<JigEdgeInfo> list = new List<JigEdgeInfo>();
|
|||
|
|
if (!this.method_0(ref list))
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
XYZ xyz = null;
|
|||
|
|
if (!this.method_5(ref xyz))
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
XYZ xyz2 = null;
|
|||
|
|
List<JigTextInfo> list2 = new List<JigTextInfo>();
|
|||
|
|
if (!DragCurveJigInterface.GetInsertPosition(this.externalCommandData_0, list, false, list2, false, xyz, ref xyz2))
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
this.method_6(xyz2);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private bool method_0(ref List<JigEdgeInfo> list_0)
|
|||
|
|
{
|
|||
|
|
Document document = this.externalCommandData_0.Application.ActiveUIDocument.Document;
|
|||
|
|
IList<Reference> list = null;
|
|||
|
|
Selection selection = this.externalCommandData_0.Application.ActiveUIDocument.Selection;
|
|||
|
|
bool flag;
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
list = selection.PickObjects(ObjectType.Element, "select elements");
|
|||
|
|
goto IL_0045;
|
|||
|
|
}
|
|||
|
|
catch (Exception)
|
|||
|
|
{
|
|||
|
|
flag = false;
|
|||
|
|
}
|
|||
|
|
return flag;
|
|||
|
|
IL_0045:
|
|||
|
|
foreach (Reference reference in list)
|
|||
|
|
{
|
|||
|
|
Element element = document.GetElement(reference);
|
|||
|
|
if (element.GetType() == typeof(FamilyInstance))
|
|||
|
|
{
|
|||
|
|
this.method_1(element as FamilyInstance, ref list_0);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
this.method_2(element, ref list_0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void method_1(FamilyInstance familyInstance_0, ref List<JigEdgeInfo> list_0)
|
|||
|
|
{
|
|||
|
|
GeometryElement geometryElement = familyInstance_0.GetOriginalGeometry(this.options_0);
|
|||
|
|
geometryElement = geometryElement.GetTransformed(familyInstance_0.GetTransform());
|
|||
|
|
if (null == geometryElement)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
IEnumerator<GeometryObject> enumerator = geometryElement.GetEnumerator();
|
|||
|
|
List<GeometryObject> geometryObjectArray = geometryElement.OfType<GeometryObject>().ToList();
|
|||
|
|
while (enumerator.MoveNext())
|
|||
|
|
{
|
|||
|
|
GeometryObject geometryObject = enumerator.Current;
|
|||
|
|
geometryObjectArray.Add(geometryObject);
|
|||
|
|
}
|
|||
|
|
new List<XYZ>();
|
|||
|
|
foreach (GeometryObject geometryObject2 in geometryObjectArray)
|
|||
|
|
{
|
|||
|
|
this.method_3(geometryObject2, ref list_0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void method_2(Element element_0, ref List<JigEdgeInfo> list_0)
|
|||
|
|
{
|
|||
|
|
GeometryElement geometryElement = element_0.get_Geometry(this.options_0);
|
|||
|
|
if (null == geometryElement)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
IEnumerator<GeometryObject> enumerator = geometryElement.GetEnumerator();
|
|||
|
|
List<GeometryObject> geometryObjectArray = geometryElement.OfType<GeometryObject>().ToList();
|
|||
|
|
while (enumerator.MoveNext())
|
|||
|
|
{
|
|||
|
|
GeometryObject geometryObject = enumerator.Current;
|
|||
|
|
geometryObjectArray.Add(geometryObject);
|
|||
|
|
}
|
|||
|
|
new List<XYZ>();
|
|||
|
|
foreach (GeometryObject geometryObject2 in geometryObjectArray)
|
|||
|
|
{
|
|||
|
|
this.method_3(geometryObject2, ref list_0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void method_3(GeometryObject geometryObject_0, ref List<JigEdgeInfo> list_0)
|
|||
|
|
{
|
|||
|
|
if (geometryObject_0.GetType() == typeof(Solid))
|
|||
|
|
{
|
|||
|
|
var enumerator = (geometryObject_0 as Solid).Edges.GetEnumerator();
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
while (enumerator.MoveNext())
|
|||
|
|
{
|
|||
|
|
object obj = enumerator.Current;
|
|||
|
|
JigEdgeInfo jigEdgeInfo = new JigEdgeInfo(((Edge)obj).AsCurve());
|
|||
|
|
if (!jigEdgeInfo.IsNull())
|
|||
|
|
{
|
|||
|
|
list_0.Add(jigEdgeInfo);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (geometryObject_0.GetType() == typeof(Arc))
|
|||
|
|
{
|
|||
|
|
JigEdgeInfo jigEdgeInfo2 = new JigEdgeInfo(geometryObject_0 as Arc);
|
|||
|
|
if (jigEdgeInfo2.IsNull())
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
list_0.Add(jigEdgeInfo2);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
else if (geometryObject_0.GetType() == typeof(Line))
|
|||
|
|
{
|
|||
|
|
JigEdgeInfo jigEdgeInfo3 = new JigEdgeInfo(geometryObject_0 as Line);
|
|||
|
|
if (jigEdgeInfo3.IsNull())
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
list_0.Add(jigEdgeInfo3);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private bool method_4(ref List<JigEdgeInfo> list_0)
|
|||
|
|
{
|
|||
|
|
Document document = this.externalCommandData_0.Application.ActiveUIDocument.Document;
|
|||
|
|
IList<Reference> list = null;
|
|||
|
|
Selection selection = this.externalCommandData_0.Application.ActiveUIDocument.Selection;
|
|||
|
|
bool flag;
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
list = selection.PickObjects(ObjectType.Element, new CurveFilter(), "select curves");
|
|||
|
|
goto IL_004A;
|
|||
|
|
}
|
|||
|
|
catch (Exception)
|
|||
|
|
{
|
|||
|
|
flag = false;
|
|||
|
|
}
|
|||
|
|
return flag;
|
|||
|
|
IL_004A:
|
|||
|
|
foreach (Reference reference in list)
|
|||
|
|
{
|
|||
|
|
Element element = document.GetElement(reference);
|
|||
|
|
if (element.GetType() == typeof(ModelLine))
|
|||
|
|
{
|
|||
|
|
JigEdgeInfo jigEdgeInfo = new JigEdgeInfo((element as ModelLine).GeometryCurve as Line);
|
|||
|
|
list_0.Add(jigEdgeInfo);
|
|||
|
|
}
|
|||
|
|
else if (element.GetType() == typeof(ModelArc))
|
|||
|
|
{
|
|||
|
|
JigEdgeInfo jigEdgeInfo2 = new JigEdgeInfo((element as ModelArc).GeometryCurve as Arc);
|
|||
|
|
list_0.Add(jigEdgeInfo2);
|
|||
|
|
}
|
|||
|
|
else if (element.GetType() == typeof(DetailLine))
|
|||
|
|
{
|
|||
|
|
JigEdgeInfo jigEdgeInfo3 = new JigEdgeInfo((element as DetailLine).GeometryCurve as Line);
|
|||
|
|
list_0.Add(jigEdgeInfo3);
|
|||
|
|
}
|
|||
|
|
else if (element.GetType() == typeof(DetailArc))
|
|||
|
|
{
|
|||
|
|
JigEdgeInfo jigEdgeInfo4 = new JigEdgeInfo((element as DetailArc).GeometryCurve as Arc);
|
|||
|
|
list_0.Add(jigEdgeInfo4);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private bool method_5(ref XYZ xyz_0)
|
|||
|
|
{
|
|||
|
|
XYZ xyz = null;
|
|||
|
|
bool flag;
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
xyz = this.externalCommandData_0.Application.ActiveUIDocument.Selection.PickPoint("please pick point on column");
|
|||
|
|
goto IL_002C;
|
|||
|
|
}
|
|||
|
|
catch (Exception)
|
|||
|
|
{
|
|||
|
|
flag = false;
|
|||
|
|
}
|
|||
|
|
return flag;
|
|||
|
|
IL_002C:
|
|||
|
|
xyz_0 = new XYZ(xyz.X, xyz.Y, 0.0);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void method_6(XYZ xyz_0)
|
|||
|
|
{
|
|||
|
|
Document document = this.externalCommandData_0.Application.ActiveUIDocument.Document;
|
|||
|
|
Transaction transaction = new Transaction(document);
|
|||
|
|
transaction.Start("create mark");
|
|||
|
|
CurveArray curveArray = new CurveArray();
|
|||
|
|
double num = 3.0;
|
|||
|
|
XYZ xyz = new XYZ(xyz_0.X - num, xyz_0.Y + num, 0.0);
|
|||
|
|
XYZ xyz2 = new XYZ(xyz_0.X + num, xyz_0.Y - num, 0.0);
|
|||
|
|
Line line = Line.CreateBound(xyz, xyz2);
|
|||
|
|
curveArray.Append(line);
|
|||
|
|
XYZ xyz3 = new XYZ(xyz_0.X - num, xyz_0.Y - num, 0.0);
|
|||
|
|
xyz2 = new XYZ(xyz_0.X + num, xyz_0.Y + num, 0.0);
|
|||
|
|
Line line2 = Line.CreateBound(xyz3, xyz2);
|
|||
|
|
curveArray.Append(line2);
|
|||
|
|
XYZ xyz4 = new XYZ(0.0, 0.0, 0.0);
|
|||
|
|
Plane plane = Plane.CreateByNormalAndOrigin(new XYZ(0.0, 0.0, 1.0), xyz4);
|
|||
|
|
SketchPlane sketchPlane = SketchPlane.Create(document, plane);
|
|||
|
|
document.Create.NewModelCurveArray(curveArray, sketchPlane);
|
|||
|
|
transaction.Commit();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private ExternalCommandData externalCommandData_0;
|
|||
|
|
|
|||
|
|
private Options options_0;
|
|||
|
|
}
|
|||
|
|
}
|