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 curveInfoList, List 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 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 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; } }