1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
| public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { var uiDoc = commandData.Application.ActiveUIDocument;
var doc = uiDoc.Document;
var pathStart = new XYZ(0, 0, 0); var pathEnd = new XYZ(0, 0, 10);
var bottomProfilePoints = new List<XYZ> { new XYZ(-2, -2, 0), new XYZ(2, -2, 0), new XYZ(2, 2, 0), new XYZ(-2, 2, 0) };
var topProfilePoints = new List<XYZ> { new XYZ(-3, -3, 10), new XYZ(3, -3, 10), new XYZ(3, 3, 10), new XYZ(-3, 3, 10) };
var bottomProfile = CreateClosedCurveLoop(bottomProfilePoints); var topProfile = CreateClosedCurveLoop(topProfilePoints);
var path = Line.CreateBound(pathStart, pathEnd);
using (Transaction transaction = new Transaction(doc, "Create Sweep Form")) { transaction.Start();
var refStart = doc.FamilyCreate.NewReferencePoint(pathStart); AdaptiveComponentFamilyUtils.MakeAdaptivePoint(doc, refStart.Id, AdaptivePointType.PlacementPoint); var refEnd = doc.FamilyCreate.NewReferencePoint(pathEnd); AdaptiveComponentFamilyUtils.MakeAdaptivePoint(doc, refEnd.Id, AdaptivePointType.PlacementPoint);
AdaptiveComponentFamilyUtils.SetPlacementNumber(doc, refStart.Id, 1); AdaptiveComponentFamilyUtils.SetPlacementNumber(doc, refEnd.Id, 2);
var refPoints = new ReferencePointArray(); refPoints.Append(refStart); refPoints.Append(refEnd); var refCurve = doc.FamilyCreate.NewCurveByPoints(refPoints);
var bottomSketchPlane = SketchPlane.Create(doc, Plane.CreateByNormalAndOrigin(XYZ.BasisZ, pathStart)); var topSketchPlane = SketchPlane.Create(doc, Plane.CreateByNormalAndOrigin(XYZ.BasisZ, pathEnd)); var pathSketchPlane = SketchPlane.Create(doc, Plane.CreateByThreePoints(pathStart, pathEnd, pathStart + new XYZ(-1, 0, 0)));
var refArrArray = new ReferenceArrayArray(); refArrArray.Append(CreateReferenceArrayFromCurveLoop(doc, bottomProfile, bottomSketchPlane)); refArrArray.Append(CreateReferenceArrayFromCurveLoop(doc, topProfile, topSketchPlane));
var pathRefArray = new ReferenceArray(); var pathModelCurve = doc.FamilyCreate.NewModelCurve(path, pathSketchPlane); pathRefArray.Append(refCurve.GeometryCurve.Reference);
var form = doc.FamilyCreate.NewSweptBlendForm(true, pathRefArray, refArrArray);
transaction.Commit(); }
return Result.Succeeded; }
CurveArray CreateClosedCurveLoop(List<XYZ> points) { var curveArray = new CurveArray(); for (int i = 0; i < points.Count; i++) { var startPoint = points[i]; var endPoint = points[(i + 1) % points.Count]; curveArray.Append(Line.CreateBound(startPoint, endPoint)); } return curveArray; }
ReferenceArray CreateReferenceArrayFromCurveLoop(Document doc, CurveArray curveLoop, SketchPlane sketchPlane) { var refArray = new ReferenceArray(); foreach (Curve curve in curveLoop) { var modelCurve = doc.FamilyCreate.NewModelCurve(curve, sketchPlane); refArray.Append(modelCurve.GeometryCurve.Reference); } return refArray; }
|