private void StartPoint(GeoPoint p) { if (!Precision.IsEqual(p, arcCenter)) { arcStartPoint = p; if (arcCenterInput.Fixed) { try { arcPlane = new Plane(arcCenter, arcCenter - arcStartPoint, base.ActiveDrawingPlane.Normal ^ ((GeoVector)(arcCenter - arcStartPoint))); arcPlane.Align(base.ActiveDrawingPlane, false); } catch (PlaneException) { arcPlane = new Plane(arcCenter, arcCenter - arcStartPoint, ((GeoVector)(arcCenter - arcStartPoint)) ^ base.ActiveDrawingPlane.DirectionX); arcPlane.Align(base.ActiveDrawingPlane, false, true); }; arcRad = Geometry.Dist(arcCenter, arcStartPoint); if (arcCenterInput.Fixed & arcEndPointInput.Fixed) { try { arcPlane = new Plane(arcCenter, arcStartPoint, arcEndPoint); arcPlane.Align(base.ActiveDrawingPlane, false, true); } catch (PlaneException) { arcPlane = base.ActiveDrawingPlane; }; } double endAbs = arc.SweepParameter + arc.StartParameter; startAng = new Angle(arc.Plane.Project(arcStartPoint), arc.Plane.Project(arcCenter)); // endAng = new SweepAngle(endAbs - startAng); arc.SetArcPlaneCenterRadiusAngles(arcPlane, arcCenter, arcRad, startAng, endAng); } } }
private void Center(GeoPoint p) { arcCenter = p; gPoint1.Location = p; arcPlane = base.ActiveDrawingPlane; if (arcStartPointInput.Fixed) { arcRad = Geometry.Dist(arcCenter, arcStartPoint); startAng = new Angle(arc.Plane.Project(arcStartPoint), arc.Plane.Project(arcCenter)); } if (arcEndPointInput.Fixed) { endAng = new SweepAngle(startAng, new Angle(arc.Plane.Project(arcEndPoint), arc.Plane.Project(arcCenter)), ConstrDefaults.DefaultArcDirection); } if (arcStartPointInput.Fixed & arcEndPointInput.Fixed) { try { arcPlane = new Plane(arcCenter, arcStartPoint, arcEndPoint); arcPlane.Align(base.ActiveDrawingPlane, false, true); } catch (PlaneException) { arcPlane = base.ActiveDrawingPlane; } } arc.SetArcPlaneCenterRadiusAngles(arcPlane, arcCenter, arcRad, startAng, endAng); }
public void It_Returns_A_Plane_Aligned_To_A_Given_Vector() { // Arrange Plane plane = BasePlaneByPoints; // Act Plane alignedPlane = plane.Align(Vector3.XAxis); // Assert alignedPlane.XAxis.EpsilonEquals(Vector3.XAxis, GSharkMath.MaxTolerance).Should().BeTrue(); alignedPlane.YAxis.EpsilonEquals(new Vector3(0.0, -1.0, 0.0), GSharkMath.MaxTolerance).Should().BeTrue(); alignedPlane.ZAxis.EpsilonEquals(new Vector3(0.0, 0.0, -1.0), GSharkMath.MaxTolerance).Should().BeTrue(); }
private void EndPoint(GeoPoint p) { arcEndPoint = p; // arc.SweepParameter = new SweepAngle(arc.StartParameter,new Angle(arc.Plane.Project(arcEndPoint),arc.Plane.Project(arcCenter)),ConstrDefaults.DefaultArcDirection); arcPlane = base.ActiveDrawingPlane; if (arcCenterInput.Fixed & arcStartPointInput.Fixed) { if (!Precision.IsEqual(arcEndPoint, arcCenter) & !Precision.IsEqual(arcEndPoint, arcStartPoint) & !Precision.IsEqual(arcCenter, arcStartPoint)) { try { arcPlane = new Plane(arcCenter, arcStartPoint, arcEndPoint); arcPlane.Align(base.ActiveDrawingPlane, false, true); } catch (PlaneException) { arcPlane = base.ActiveDrawingPlane; }; } } endAng = new SweepAngle(arc.StartParameter, new Angle(arc.Plane.Project(arcEndPoint), arc.Plane.Project(arcCenter)), arcDir); arc.SetArcPlaneCenterRadiusAngles(arcPlane, arcCenter, arcRad, startAng, endAng); }
private bool extrudeOrg() { if (selectedObjectsList == null) { return(false); } IGeoObject iGeoObjectSel; blk = Block.Construct(); // zur Darstellung if (base.ActiveObject != null) { blk.CopyAttributes(base.ActiveObject); } // der block wird das neue aktive Objekt, er muss die Attribute tragen, weil sie später // wieder von ihm verlangt werden Boolean success = false; // hat er wenigstens eins gefunden int extrudeModeTemp = extrudeMode; // Merker, da extrudeMode evtl. umgeschaltet wird for (int i = 0; i < selectedObjectsList.Count; i++) // läuft über alle selektierten Objekte. Evtl nur eins bei Konstruktion { extrudeMode = extrudeModeTemp; iGeoObjectSel = selectedObjectsList[i]; // zur Vereinfachung geoObjectOrgList[i] = iGeoObjectSel; // zum Weglöschen des Originals in onDone ownerList[i] = iGeoObjectSel.Owner; // owner merken für löschen pathCreatedFromModelList[i] = null; shapeList[i] = null; Path p = null; if (iGeoObjectSel is ICurve) { p = CADability.GeoObject.Path.CreateFromModel(iGeoObjectSel as ICurve, Frame.ActiveView.Model, Frame.ActiveView.Projection, true); if (p == null) { // also nur Einzelelement if (iGeoObjectSel is Path) { // schon fertig p = iGeoObjectSel.Clone() as Path; } else { // Pfad aus Einzelobjekt machen: p = Path.Construct(); p.Set(new ICurve[] { iGeoObjectSel.Clone() as ICurve }); } } else { // CreateFromModel hat was zusammengesetzt geoObjectOrgList[i] = null; // zum nicht Weglöschen des Originals in onDone pathCreatedFromModelList[i] = p; // kopie merken für onDone p = p.Clone() as Path; p.Flatten(); } } if (p != null) { // Objekt hat keine Ebene und Objektebene eingestellt: Höheneingabe sperren // heightInput.ReadOnly = ((p.GetPlanarState() != PlanarState.Planar) && planeMode); if (planeMode) { if (p.GetPlanarState() != PlanarState.Planar) { heightInput.ReadOnly = true; // heightOffsetInput.ReadOnly = true; // VectorOrHeight = true; extrudeMode = 2; optionalOrg(); } else { Plane pl = p.GetPlane(); pl.Align(base.ActiveDrawingPlane, false, true); // planeVector = pl.Normal; vector = height * pl.Normal; vectorOffset = heightOffset * pl.Normal; } } if (!vectorOffset.IsNullVector()) { ModOp m = ModOp.Translate(vectorOffset); p.Modify(m); } IGeoObject shape; if (pipePath == null) { shape = Make3D.MakePrism(p, vector, Frame.Project, true); } else { shape = Make3D.MakePipe(p, pipePath, Frame.Project); } if (shape != null) { // shape.CopyAttributes(iGeoObjectSel as IGeoObject); shape.CopyAttributes(blk); // die Attribute müssen vom Block übernommen werden shapeList[i] = shape; // fertiger Körper in shapeList blk.Add(shape); // zum Darstellen base.FeedBack.AddSelected(p); // zum Markieren des Ursprungsobjekts success = true; } } // VectorOrHeight = VectorOrHeightTemp; } extrudeMode = extrudeModeTemp; if (success) { base.ActiveObject = blk; // darstellen base.ShowActiveObject = true; return(true); } else { optionalOrg(); heightInput.ReadOnly = false; base.ShowActiveObject = false; base.FeedBack.ClearSelected(); return(false); } }