239 lines
11 KiB
C#
239 lines
11 KiB
C#
|
|
using Autodesk.Revit.Creation;
|
|||
|
|
using Autodesk.Revit.DB;
|
|||
|
|
using Autodesk.Revit.UI;
|
|||
|
|
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
|
|||
|
|
namespace HYDragCurveJig
|
|||
|
|
{
|
|||
|
|
public class JigFamilyCreator
|
|||
|
|
{
|
|||
|
|
public string SymbolName => this.string_0;
|
|||
|
|
|
|||
|
|
public JigFamilyCreator(ExternalCommandData commandData, Autodesk.Revit.DB.Document familyDocument)
|
|||
|
|
{
|
|||
|
|
this.externalCommandData_0 = commandData;
|
|||
|
|
this.iaAoGpqKy = familyDocument;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public Result CreateJIGFamily(List<JigEdgeInfo> curveInfoList, List<JigTextInfo> textInfoList, XYZ ptBase, ref string message)
|
|||
|
|
{
|
|||
|
|
Result result = Result.Failed;
|
|||
|
|
View view = null;
|
|||
|
|
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(this.iaAoGpqKy);
|
|||
|
|
filteredElementCollector.OfClass(typeof(ViewSheet));
|
|||
|
|
FilteredElementIterator elementIterator = filteredElementCollector.GetElementIterator();
|
|||
|
|
elementIterator.Reset();
|
|||
|
|
while (elementIterator.MoveNext())
|
|||
|
|
{
|
|||
|
|
Element element = elementIterator.Current;
|
|||
|
|
ViewSheet viewSheet = element as ViewSheet;
|
|||
|
|
if (viewSheet != null && viewSheet.Name.CompareTo("图纸") == 0)
|
|||
|
|
{
|
|||
|
|
view = viewSheet;
|
|||
|
|
if (view == null)
|
|||
|
|
{
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
Transaction transaction = new Transaction(this.iaAoGpqKy);
|
|||
|
|
transaction.Start("create family");
|
|||
|
|
Transform transform = Transform.CreateTranslation(-ptBase);
|
|||
|
|
Transform identity = Transform.Identity;
|
|||
|
|
int scale = this.externalCommandData_0.Application.ActiveUIDocument.ActiveView.Scale;
|
|||
|
|
Transform transform2 = identity.ScaleBasis(1.0 / (double)scale);
|
|||
|
|
transform2 = transform2.Multiply(transform);
|
|||
|
|
this.method_0(curveInfoList, transform2, view);
|
|||
|
|
this.method_1(textInfoList, transform2, view);
|
|||
|
|
this.AddSymbols(ref this.string_0, ref message);
|
|||
|
|
transaction.Commit();
|
|||
|
|
return Result.Succeeded;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void method_0(List<JigEdgeInfo> list_0, Transform transform_0, View view_0)
|
|||
|
|
{
|
|||
|
|
CurveArray curveArray = new CurveArray();
|
|||
|
|
Application create = this.externalCommandData_0.Application.Application.Create;
|
|||
|
|
foreach (JigEdgeInfo jigEdgeInfo in list_0)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
XYZ xyz = this.method_3(jigEdgeInfo.StartPoint);
|
|||
|
|
XYZ xyz2 = this.method_3(jigEdgeInfo.EndPoint);
|
|||
|
|
if (!xyz.IsAlmostEqualTo(xyz2))
|
|||
|
|
{
|
|||
|
|
XYZ xyz3 = JigGeometry.TransformPoint(xyz, transform_0);
|
|||
|
|
XYZ xyz4 = JigGeometry.TransformPoint(xyz2, transform_0);
|
|||
|
|
if (jigEdgeInfo.IsArc)
|
|||
|
|
{
|
|||
|
|
XYZ xyz5 = null;
|
|||
|
|
double num = 0.0;
|
|||
|
|
double num2 = 0.0;
|
|||
|
|
double num3 = 0.0;
|
|||
|
|
JigGeometry.GetArcInfoWithBulge(xyz3, xyz4, jigEdgeInfo.Bulge, ref xyz5, ref num, ref num2, ref num3);
|
|||
|
|
double num4 = JigGeometry.BetweenTheAngles(num2, num3, true) / 2.0;
|
|||
|
|
XYZ xyz6 = xyz3 - xyz5;
|
|||
|
|
XYZ xyz7 = xyz5 + JigGeometry.RotateTo(xyz6, num4, XYZ.BasisZ);
|
|||
|
|
Arc arc = Arc.Create(xyz3, xyz4, xyz7);
|
|||
|
|
curveArray.Append(arc);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Line line = Line.CreateBound(xyz3, xyz4);
|
|||
|
|
curveArray.Append(line);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
ex.ToString();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (curveArray.Size > 0)
|
|||
|
|
{
|
|||
|
|
this.iaAoGpqKy.FamilyCreate.NewDetailCurveArray(view_0, curveArray);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void method_1(List<JigTextInfo> list_0, Transform transform_0, View view_0)
|
|||
|
|
{
|
|||
|
|
foreach (JigTextInfo jigTextInfo in list_0)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
XYZ xyz = JigGeometry.TransformPoint(jigTextInfo.Origin, transform_0);
|
|||
|
|
XYZ baseVec = jigTextInfo.BaseVec;
|
|||
|
|
TextAlignFlags textAlign = jigTextInfo.TextAlign;
|
|||
|
|
string strText = jigTextInfo.StrText;
|
|||
|
|
double num = jigTextInfo.theTextNoteType.get_Parameter((BuiltInParameter)(-1006301)).AsDouble() * 100.0 * (double)view_0.Scale / 100.0;
|
|||
|
|
double num2 = jigTextInfo.theTextNoteType.get_Parameter((BuiltInParameter)(-1006327)).AsDouble();
|
|||
|
|
double num3 = num * num2;
|
|||
|
|
double num4 = (double)(jigTextInfo.StrText.Length * 2) * num3;
|
|||
|
|
GetTextNode(this.iaAoGpqKy, view_0, xyz, baseVec, XYZ.BasisZ, num4, textAlign, strText).TextNoteType = this.method_2(jigTextInfo.theTextNoteType);
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
ex.ToString();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public static TextNote GetTextNode(Autodesk.Revit.DB.Document doc, View view, XYZ origin, XYZ baseVec, XYZ upVec, double lineWidth, TextAlignFlags textAlign, string strText)
|
|||
|
|
{
|
|||
|
|
TextNoteType textNoteType = null;
|
|||
|
|
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
|
|||
|
|
filteredElementCollector.OfClass(typeof(TextNoteType));
|
|||
|
|
FilteredElementIterator elementIterator = filteredElementCollector.GetElementIterator();
|
|||
|
|
elementIterator.Reset();
|
|||
|
|
while (elementIterator.MoveNext())
|
|||
|
|
{
|
|||
|
|
Element element = elementIterator.Current;
|
|||
|
|
TextNoteType textNoteType2 = element as TextNoteType;
|
|||
|
|
if (textNoteType2 != null)
|
|||
|
|
{
|
|||
|
|
textNoteType = textNoteType2;
|
|||
|
|
XYZ rightDirection = view.RightDirection;
|
|||
|
|
XYZ viewDirection = view.ViewDirection;
|
|||
|
|
double num = rightDirection.AngleOnPlaneTo(baseVec, viewDirection);
|
|||
|
|
TextNoteOptions textNoteOptions = new TextNoteOptions();
|
|||
|
|
textNoteOptions.Rotation = num;
|
|||
|
|
if ((textAlign) == TextAlignFlags.TEF_ALIGN_LEFT)
|
|||
|
|
{
|
|||
|
|
textNoteOptions.HorizontalAlignment = 0;
|
|||
|
|
}
|
|||
|
|
else if ((textAlign) == TextAlignFlags.TEF_ALIGN_RIGHT)
|
|||
|
|
{
|
|||
|
|
textNoteOptions.HorizontalAlignment = HorizontalTextAlignment.Right;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
textNoteOptions.HorizontalAlignment = HorizontalTextAlignment.Center;
|
|||
|
|
}
|
|||
|
|
textNoteOptions.TypeId = textNoteType.Id;
|
|||
|
|
return TextNote.Create(doc, view.Id, origin, lineWidth, strText, textNoteOptions);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
private TextNoteType method_2(TextNoteType textNoteType_1)
|
|||
|
|
{
|
|||
|
|
string text = "3 mm";
|
|||
|
|
string text2 = textNoteType_1.Name + "_ViewScale";
|
|||
|
|
TextNoteType textNoteType = null;
|
|||
|
|
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(this.iaAoGpqKy);
|
|||
|
|
filteredElementCollector.OfClass(typeof(TextNoteType));
|
|||
|
|
FilteredElementIterator elementIterator = filteredElementCollector.GetElementIterator();
|
|||
|
|
elementIterator.Reset();
|
|||
|
|
while (elementIterator.MoveNext())
|
|||
|
|
{
|
|||
|
|
Element element = elementIterator.Current;
|
|||
|
|
TextNoteType textNoteType2 = element as TextNoteType;
|
|||
|
|
if (textNoteType2 != null)
|
|||
|
|
{
|
|||
|
|
if (textNoteType2.Name.CompareTo(text2) == 0)
|
|||
|
|
{
|
|||
|
|
textNoteType = textNoteType2;
|
|||
|
|
if (textNoteType == null)
|
|||
|
|
{
|
|||
|
|
textNoteType = this.textNoteType_0.Duplicate(text2) as TextNoteType;
|
|||
|
|
double num = textNoteType_1.get_Parameter((BuiltInParameter)(-1006301)).AsDouble();
|
|||
|
|
textNoteType.get_Parameter((BuiltInParameter)(-1006301)).Set(num);
|
|||
|
|
string text3 = textNoteType_1.get_Parameter((BuiltInParameter)(-1006300)).AsString();
|
|||
|
|
textNoteType.get_Parameter((BuiltInParameter)(-1006300)).Set(text3);
|
|||
|
|
double num2 = textNoteType_1.get_Parameter((BuiltInParameter)(-1006327)).AsDouble();
|
|||
|
|
textNoteType.get_Parameter((BuiltInParameter)(-1006327)).Set(num2);
|
|||
|
|
double num3 = textNoteType_1.get_Parameter((BuiltInParameter)(-1006326)).AsDouble();
|
|||
|
|
textNoteType.get_Parameter((BuiltInParameter)(-1006326)).Set(num3);
|
|||
|
|
}
|
|||
|
|
return textNoteType;
|
|||
|
|
}
|
|||
|
|
if (this.textNoteType_0 == null && textNoteType2.Name.CompareTo(text) == 0)
|
|||
|
|
{
|
|||
|
|
this.textNoteType_0 = textNoteType2;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return textNoteType;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private XYZ method_3(XYZ xyz_0)
|
|||
|
|
{
|
|||
|
|
return new XYZ(xyz_0.X, xyz_0.Y, 0.0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public Result AddSymbols(ref string symbolName, ref string message)
|
|||
|
|
{
|
|||
|
|
string text = "type1";
|
|||
|
|
DisplayUnit displayUnitSystem = this.iaAoGpqKy.DisplayUnitSystem;
|
|||
|
|
Result result;
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
FamilyManager familyManager = this.iaAoGpqKy.FamilyManager;
|
|||
|
|
FamilyType familyType = familyManager.NewType(text);
|
|||
|
|
familyManager.CurrentType = familyType;
|
|||
|
|
goto IL_003F;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
message = ex.Message;
|
|||
|
|
result = Result.Failed;
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
IL_003F:
|
|||
|
|
symbolName = text;
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private ExternalCommandData externalCommandData_0;
|
|||
|
|
|
|||
|
|
private Autodesk.Revit.DB.Document iaAoGpqKy;
|
|||
|
|
|
|||
|
|
private TextNoteType textNoteType_0;
|
|||
|
|
|
|||
|
|
private string string_0 = string.Empty;
|
|||
|
|
}
|
|||
|
|
}
|