public override ISwBody[] CreateGeometry(ISwApplication app, ISwDocument model, ShaftChamferData data, bool isPreview, out AlignDimensionDelegate <ShaftChamferData> alignDim) { var dir = data.Edge.AdjacentEntities.OfType <ISwPlanarFace>().First().Definition.Plane.Normal * -1; var centerPt = data.Edge.Definition.Center; var largeRad = data.Edge.Definition.Diameter / 2; if (data.Radius >= largeRad) { throw new Exception($"Specified radius must not exceed {Math.Round(largeRad * 1000, 2)} mm"); } var x = largeRad - data.Radius; var height = x / Math.Tan(data.Angle); var coneBody = (ISwBody)(app.MemoryGeometryBuilder.CreateSolidCone(centerPt, dir, data.Radius * 2, largeRad * 2, height).Bodies.First()); var cylBody = (ISwBody)(app.MemoryGeometryBuilder.CreateSolidCylinder(centerPt, dir, largeRad * 2, height).Bodies.First()); var targBody = data.Body; if (isPreview) { targBody = targBody.ToTempBody(); } var result = targBody.Substract(cylBody.Substract(coneBody).First()).First(); alignDim = new AlignDimensionDelegate <ShaftChamferData>((p, d) => { switch (p) { case nameof(data.Radius): this.AlignRadialDimension(d, centerPt, dir); break; case nameof(data.Angle): Vector refVec; var yVec = new Vector(0, 1, 0); if (dir.IsSame(yVec)) { refVec = new Vector(1, 0, 0); } else { refVec = yVec.Cross(dir); } var refPt = centerPt.Move(refVec, largeRad); var anglCenterPt = refPt.Move(dir, height); this.AlignAngularDimension(d, anglCenterPt, refPt, dir.Cross(refVec)); break; } }); return(new ISwBody[] { result }); }
public override CustomFeatureRebuildResult OnRebuild(ISwApplication app, ISwDocument model, ISwMacroFeature <MySimpleMacroFeatureParameters> feature, MySimpleMacroFeatureParameters parameters, out AlignDimensionDelegate <MySimpleMacroFeatureParameters> alignDim) { alignDim = null; return(new CustomFeatureRebuildResult() { Result = true }); }
public override ISwBody[] CreateGeometry(ISwApplication app, ISwDocument model, BoxData data, bool isPreview, out AlignDimensionDelegate <BoxData> alignDim) { alignDim = null; var box = (ISwBody)app.MemoryGeometryBuilder.CreateSolidBox( new Point(0, 0, 0), new Vector(0, 0, 1), new Vector(1, 0, 0).CreateAnyPerpendicular(), data.Width, data.Height, data.Length).Bodies.First(); return(new ISwBody[] { box }); }
public override CustomFeatureRebuildResult OnRebuild(ISwApplication app, ISwDocument model, ISwMacroFeature <DimensionWatcherData> feature, DimensionWatcherData parameters, out AlignDimensionDelegate <DimensionWatcherData> alignDim) { alignDim = null; var res = parameters.Dimension != null; return(new CustomFeatureRebuildResult() { Result = parameters.Dimension != null, ErrorMessage = !res ? "Dimension not found" : "" }); }
public override ISwBody[] CreateGeometry(ISwApplication app, ISwDocument model, BoxData data, bool isPreview, out AlignDimensionDelegate <BoxData> alignDim) { var baseCenter = new Point(0, 0, 0); var dir = new Vector(0, 1, 0); var box = (ISwBody)(app.MemoryGeometryBuilder.CreateSolidBox(baseCenter, dir, dir.CreateAnyPerpendicular(), data.Width, data.Length, data.Height).Bodies.First()); alignDim = (n, d) => { switch (n) { case nameof(BoxData.Width): this.AlignLinearDimension(d, baseCenter .Move(new Vector(-1, 0, 0), data.Width / 2) .Move(new Vector(0, 0, -1), data.Length / 2), new Vector(1, 0, 0)); break; case nameof(BoxData.Length): this.AlignLinearDimension(d, baseCenter .Move(new Vector(1, 0, 0), data.Width / 2) .Move(new Vector(0, 0, 1), data.Length / 2), new Vector(0, 0, -1)); break; case nameof(BoxData.Height): this.AlignLinearDimension(d, baseCenter .Move(new Vector(1, 0, 0), data.Width / 2) .Move(new Vector(0, 0, -1), data.Length / 2), new Vector(0, 1, 0)); break; } }; return(new ISwBody[] { box }); }
public override ISwBody[] CreateGeometry(ISwApplication app, ISwDocument model, CabinetSizeData data, bool isPreview, out AlignDimensionDelegate <CabinetSizeData> alignDim) { alignDim = new AlignDimensionDelegate <CabinetSizeData>((p, d) => { switch (p) { case nameof(CabinetSizeData.Width): this.AlignLinearDimension(d, new Point(0, 0, 0), new Vector(1, 0, 0)); break; case nameof(CabinetSizeData.Height): this.AlignLinearDimension(d, new Point(0, 0, 0), new Vector(0, 1, 0)); break; case nameof(CabinetSizeData.Depth): this.AlignLinearDimension(d, new Point(0, 0, 0), new Vector(0, 0, -1)); break; } }); return(new ISwBody[0]); }
public override ISwBody[] CreateGeometry(ISwApplication app, ISwDocument model, SweepSketchData data, bool isPreview, out AlignDimensionDelegate <SweepSketchData> alignDim) { m_App = app; var cutListLengthTrackingId = app.Sw.RegisterTrackingDefinition(CUT_LIST_LENGTH_TRACKING_DEF_NAME); var result = new List <ISwBody>(); Point firstCenterPt = null; Vector firstDir = null; int index = 0; var lengths = new List <double>(); var setLengthPrp = !isPreview && data.AddLengthPropety && (model as ISwPart).Part.IsWeldment(); foreach (var sketch in data.Sketches) { foreach (var seg in sketch.Entities.OfType <ISwSketchSegment>().Where(s => !s.Segment.ConstructionGeometry)) { var path = seg.Definition; var startPt = path.StartPoint.Coordinate; if (firstCenterPt == null) { firstCenterPt = startPt; } var uParam = path.Curves.First().ReverseEvaluate(startPt.X, startPt.Y, startPt.Z); var evalData = path.Curves.First().Evaluate2(uParam, 2) as double[]; var normalAtPoint = new Vector(evalData[3], evalData[4], evalData[5]); if (firstDir == null) { firstDir = normalAtPoint; } var profile = app.MemoryGeometryBuilder.CreateCircle(startPt, normalAtPoint, data.Radius * 2); var region = app.MemoryGeometryBuilder.CreatePlanarSheet(profile).Bodies.First(); var sweep = app.MemoryGeometryBuilder.CreateSolidSweep(path, region); var body = sweep.Bodies.OfType <ISwBody>().First(); if (setLengthPrp) { body.Body.SetTrackingID(cutListLengthTrackingId, index++); lengths.Add(path.Length); } result.Add(body); } } alignDim = (name, dim) => { switch (name) { case nameof(SweepSketchData.Radius): this.AlignRadialDimension(dim, firstCenterPt, firstDir); break; } }; if (setLengthPrp) { model.Tags.Put(CUT_LIST_LENGTH_TRACKING_DEF_NAME, lengths); (model as ISwPart).CutListRebuild += OnCutListRebuild; } return(result.ToArray()); }
public override CustomFeatureRebuildResult OnRebuild(ISwApplication app, ISwDocument model, ISwMacroFeature feature, MacroFeatureEditBodiesParams parameters, out AlignDimensionDelegate <MacroFeatureEditBodiesParams> alignDim) { alignDim = null; return(new CustomFeatureRebuildResult()); }
public override CustomFeatureRebuildResult OnRebuild(ISwApplication app, ISwDocument model, ISwMacroFeature feature, PmpMacroFeatData parameters, out AlignDimensionDelegate <PmpMacroFeatData> alignDim) { alignDim = (n, d) => { switch (n) { case nameof(PmpMacroFeatData.Number): this.AlignLinearDimension(d, new Point(0, 0, 0), new Vector(0, 1, 0)); break; case nameof(PmpMacroFeatData.Angle): this.AlignAngularDimension(d, new Point(0, 0, 0), new Point(-0.1, 0, 0), new Vector(0, 1, 0)); break; } }; var sweepArc = app.MemoryGeometryBuilder.WireBuilder.PreCreateArc(); sweepArc.Center = new Point(0, 0, 0); sweepArc.Axis = new Vector(0, 0, 1); sweepArc.Diameter = 0.01; sweepArc.Commit(); var sweepLine = app.MemoryGeometryBuilder.WireBuilder.PreCreateLine(); sweepLine.StartCoordinate = new Point(0, 0, 0); sweepLine.EndCoordinate = new Point(1, 1, 1); sweepLine.Commit(); var sweep = (ISwTempSweep)app.MemoryGeometryBuilder.SolidBuilder.PreCreateSweep(); sweep.Profiles = new ISwTempRegion[] { app.MemoryGeometryBuilder.CreatePlanarSheet(sweepArc).Bodies.OfType <ISwTempPlanarSheetBody>().First() }; sweep.Path = sweepLine; sweep.Commit(); parameters.Number = parameters.Number + 1; return(new CustomFeatureBodyRebuildResult() { Bodies = sweep.Bodies }); }
public IXBody[] CreateGeometry(IXCustomFeatureDefinition def, TData data, bool isPreview, out AlignDimensionDelegate <TData> alignDim) { return(m_GeomCreator.Invoke(def, data, isPreview, out alignDim)); }
public override CustomFeatureRebuildResult OnRebuild(ISwApplication app, ISwDocument model, ISwMacroFeature <DimensionMacroFeatureParams> feature, DimensionMacroFeatureParams parameters, out AlignDimensionDelegate <DimensionMacroFeatureParams> alignDim) { var resBodies = GetBodies(); //generating bodies alignDim = (name, dim) => { switch (name) { case nameof(DimensionMacroFeatureParams.FirstDimension): this.AlignLinearDimension(dim, new Point(0, 0, 0), new Vector(1, 0, 0)); break; case nameof(DimensionMacroFeatureParams.SecondDimension): this.AlignRadialDimension(dim, new Point(0, 0, 0), new Vector(0, 0, 1)); break; } }; return(new CustomFeatureBodyRebuildResult() { Bodies = resBodies }); //returning custom rebuild result }
public override CustomFeatureRebuildResult OnRebuild(ISwApplication app, ISwDocument model, ISwMacroFeature <MacroFeatureParams> feature, MacroFeatureParams parameters, out AlignDimensionDelegate <MacroFeatureParams> alignDim) { var txt = parameters.TextParameter; var inputBody = parameters.InputBody; alignDim = null; return(new CustomFeatureRebuildResult()); }
public override ISwBody[] CreateGeometry(ISwApplication app, ISwDocument model, CoordinateSystemData data, bool isPreview, out AlignDimensionDelegate <CoordinateSystemData> alignDim) { alignDim = null; const double SCALE = 0.1; var origin = new Point(data.X, data.Y, data.Z); var x = new Vector(1, 0, 0); var y = new Vector(0, 1, 0); var z = new Vector(0, 0, 1); var rotation = TransformMatrix.Identity .Multiply(TransformMatrix.CreateFromRotationAroundAxis(x, data.RotationX, origin)) .Multiply(TransformMatrix.CreateFromRotationAroundAxis(y, data.RotationY, origin)) .Multiply(TransformMatrix.CreateFromRotationAroundAxis(z, data.RotationZ, origin)); x = x.Transform(rotation); y = y.Transform(rotation); z = z.Transform(rotation); var xLine = (ISwLineCurve)app.MemoryGeometryBuilder.CreateLine(origin, origin.Move(x, SCALE / 3)); var yLine = (ISwLineCurve)app.MemoryGeometryBuilder.CreateLine(origin, origin.Move(y, SCALE / 2)); var zLine = (ISwLineCurve)app.MemoryGeometryBuilder.CreateLine(origin, origin.Move(z, SCALE)); var xBody = (ISwBody)xLine.CreateBody(); var yBody = (ISwBody)yLine.CreateBody(); var zBody = (ISwBody)zLine.CreateBody(); if (!isPreview) { m_TrackingId = app.Sw.RegisterTrackingDefinition("_CoordinateSystemEx_Bodies_"); if (xBody.Body.SetTrackingID(m_TrackingId, X_BODY_TRACKING_ID) != (int)swTrackingIDError_e.swTrackingIDError_NoError) { throw new Exception("Failed to track body"); } if (yBody.Body.SetTrackingID(m_TrackingId, Y_BODY_TRACKING_ID) != (int)swTrackingIDError_e.swTrackingIDError_NoError) { throw new Exception("Failed to track body"); } if (zBody.Body.SetTrackingID(m_TrackingId, Z_BODY_TRACKING_ID) != (int)swTrackingIDError_e.swTrackingIDError_NoError) { throw new Exception("Failed to track body"); } } return(new ISwBody[] { xBody, yBody, zBody }); }