添加项目文件。
This commit is contained in:
238
HYDragCurveJigPro/JigFamilyCreator.cs
Normal file
238
HYDragCurveJigPro/JigFamilyCreator.cs
Normal file
@@ -0,0 +1,238 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user