Files
RevitArchive/HYDragCurveJigPro/JigFamilyCreator.cs

239 lines
11 KiB
C#
Raw Permalink Normal View History

2026-02-23 14:58:05 +08:00
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;
}
}