static BoundingCube[] subCubes(BoundingCube start) { GeoPoint m = start.GetCenter(); BoundingCube[] res = new BoundingCube[8]; res[0] = new BoundingCube(m.x, start.Xmax, m.y, start.Ymax, m.z, start.Zmax); res[1] = new BoundingCube(start.Xmin, m.x, m.y, start.Ymax, m.z, start.Zmax); res[2] = new BoundingCube(m.x, start.Xmax, start.Ymin, m.y, m.z, start.Zmax); res[3] = new BoundingCube(start.Xmin, m.x, start.Ymin, m.y, m.z, start.Zmax); res[4] = new BoundingCube(m.x, start.Xmax, m.y, start.Ymax, start.Zmin, m.z); res[5] = new BoundingCube(start.Xmin, m.x, m.y, start.Ymax, start.Zmin, m.z); res[6] = new BoundingCube(m.x, start.Xmax, start.Ymin, m.y, start.Zmin, m.z); res[7] = new BoundingCube(start.Xmin, m.x, start.Ymin, m.y, start.Zmin, m.z); return(res); }
public override void OnSetAction() { // base.ActiveObject = block; base.TitleId = "MoveObjects"; copyObject = ConstrDefaults.DefaultCopyObjects; feedBackLine = Line.Construct(); Color backColor = base.Frame.GetColorSetting("Colors.Feedback", Color.DarkGray); feedBackLine.ColorDef = new ColorDef("", backColor); base.SetCursor(SnapPointFinder.DidSnapModes.DidNotSnap, "Move"); vec = new GeoVectorInput("MoveObjects.Vector"); vec.SetGeoVectorEvent += new CADability.Actions.ConstructAction.GeoVectorInput.SetGeoVectorDelegate(Vec_OnSetGeoVector); vec.MouseClickEvent += new MouseClickDelegate(VecOnMouseClick); vec.CalculateGeoVectorEvent += new GeoVectorInput.CalculateGeoVectorDelegate(vecCalculateGeoVector); vec.GetGeoVectorEvent += new GeoVectorInput.GetGeoVectorDelegate(vecGetGeoVector); startPointInput = new GeoPointInput("Objects.StartPoint"); startPointInput.Optional = true; startPointInput.SetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.SetGeoPointDelegate(SetStartPoint); startPointInput.GetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.GetGeoPointDelegate(GetStartPoint); endPointInput = new GeoPointInput("Objects.EndPoint"); endPointInput.Optional = true; endPointInput.SetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.SetGeoPointDelegate(SetEndPoint); endPointInput.GetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.GetGeoPointDelegate(GetEndPoint); BooleanInput copy = new BooleanInput("Modify.CopyObjects", "YesNo.Values"); copy.DefaultBoolean = ConstrDefaults.DefaultCopyObjects; copy.SetBooleanEvent += new CADability.Actions.ConstructAction.BooleanInput.SetBooleanDelegate(SetCopy); base.SetInput(vec, startPointInput, endPointInput, copy); BoundingCube result = BoundingCube.EmptyBoundingCube; foreach (IGeoObject go in originals) { result.MinMax(go.GetBoundingCube()); } GeoPoint blockCenter = result.GetCenter(); block.RefPoint = blockCenter; vec.SetVectorFromPoint(blockCenter); base.OnSetAction(); }
public override void OnSetAction() { base.ActiveObject = block; base.TitleId = "ReflectObjects"; copyObject = ConstrDefaults.DefaultCopyObjects; GeoPointInput reflectPoint = new GeoPointInput("ReflectObjects.Point"); // reflectPoint.GetGeoPointEvent += new GeoPointInput.GetGeoPointDelegate(GetReflectPoint); reflectPoint.SetGeoPointEvent += new GeoPointInput.SetGeoPointDelegate(SetReflectPoint); reflectPoint.Optional = true; reflectLine = new CurveInput("ReflectObjects.Line"); reflectLine.Decomposed = true; // nur Einzelelemente, auch bei Polyline und Pfad reflectLine.MouseOverCurvesEvent += new CurveInput.MouseOverCurvesDelegate(ReflectLine); reflectLine.CurveSelectionChangedEvent += new CurveInput.CurveSelectionChangedDelegate(ReflectLineChanged); PlaneInput reflectPlane = new PlaneInput("ReflectObjects.Plane"); reflectPlane.SetPlaneEvent += new PlaneInput.SetPlaneDelegate(SetReflectPlane); // reflectPlane.GetPlaneEvent += new PlaneInput.GetPlaneDelegate(GetReflectPlane); reflectPlane.Optional = true; BooleanInput copy = new BooleanInput("Modify.CopyObjects", "YesNo.Values"); copy.DefaultBoolean = ConstrDefaults.DefaultCopyObjects; copy.SetBooleanEvent += new CADability.Actions.ConstructAction.BooleanInput.SetBooleanDelegate(SetCopy); base.SetInput(reflectPoint, reflectLine, reflectPlane, copy); BoundingCube result = BoundingCube.EmptyBoundingCube; foreach (IGeoObject go in originals) { result.MinMax(go.GetBoundingCube()); } GeoPoint blockCenter = result.GetCenter(); block.RefPoint = blockCenter; base.BasePoint = blockCenter; reflectModOp = ModOp.ReflectPlane(new Plane(base.BasePoint, base.ActiveDrawingPlane.Normal, base.ActiveDrawingPlane.DirectionY)); reflectModOpStart = reflectModOp; block.Modify(reflectModOp); base.OnSetAction(); }
public VoxelIterator(VoxelTree vt) //byte[] voxels, int index, BoundingCube start) { voxels = vt.voxels; index = 0; double size; current = new BoundingCube(); if (vt.baseCube >= 0) { size = 1 << vt.baseCube; } else { size = 1.0 / (1 << -vt.baseCube); } current.Set(-size, size, -size, size, -size, size); // this BoundingCube contains the whole object for (int i = 0; i < vt.startCube.Length; i++) { GeoPoint m = current.GetCenter(); switch (vt.startCube[i]) { case 0: current = new BoundingCube(m.x, current.Xmax, m.y, current.Ymax, m.z, current.Zmax); break; case 1: current = new BoundingCube(current.Xmin, m.x, m.y, current.Ymax, m.z, current.Zmax); break; case 2: current = new BoundingCube(m.x, current.Xmax, current.Ymin, m.y, m.z, current.Zmax); break; case 3: current = new BoundingCube(current.Xmin, m.x, current.Ymin, m.y, m.z, current.Zmax); break; case 4: current = new BoundingCube(m.x, current.Xmax, m.y, current.Ymax, current.Zmin, m.z); break; case 5: current = new BoundingCube(current.Xmin, m.x, m.y, current.Ymax, current.Zmin, m.z); break; case 6: current = new BoundingCube(m.x, current.Xmax, current.Ymin, m.y, current.Zmin, m.z); break; case 7: current = new BoundingCube(current.Xmin, m.x, current.Ymin, m.y, current.Zmin, m.z); break; } } }
public override void OnSetAction() { base.ActiveObject = block; base.TitleId = "ScaleObjects"; dis = ConstrDefaults.DefaultScaleDistort; copyObject = ConstrDefaults.DefaultCopyObjects; feedBackLine = Line.Construct(); Color backColor = base.Frame.GetColorSetting("Colors.Feedback", Color.DarkGray); feedBackLine.ColorDef = new ColorDef("", backColor); base.SetCursor(SnapPointFinder.DidSnapModes.DidNotSnap, "Size"); clickandPress = false; GeoPointInput fixPoint = new GeoPointInput("Objects.FixPoint", base.BasePoint); fixPoint.Optional = true; fixPoint.DefinesHotSpot = true; fixPoint.HotSpotSource = "Hotspots.png:0"; fixPoint.SetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.SetGeoPointDelegate(SetfixPoint); fixPoint.GetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.GetGeoPointDelegate(GetfixPoint); // dieser Punkt mit dem Fixpunkt dient zur Faktor-Bestimmung, "1" läßt ihn unverändert, "2" verdoppelt seine Entfernung vom Fixpunkt startPointInput = new GeoPointInput("Objects.StartPoint"); startPointInput.Optional = true; startPointInput.SetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.SetGeoPointDelegate(SetStartPoint); startPointInput.GetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.GetGeoPointDelegate(GetStartPoint); endPointInput = new GeoPointInput("Objects.EndPoint"); endPointInput.Optional = true; endPointInput.SetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.SetGeoPointDelegate(SetEndPoint); endPointInput.GetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.GetGeoPointDelegate(GetEndPoint); fac = new DoubleInput("ScaleObjects.Factor", faktor); fac.ReadOnly = dis; fac.Optional = dis; fac.SetDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.SetDoubleDelegate(SetFactor); fac.GetDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.GetDoubleDelegate(GetFactor); fac.CalculateDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.CalculateDoubleDelegate(CalculateFactor); fac.MouseClickEvent += new MouseClickDelegate(facOnMouseClick); // Verzerrung BooleanInput distort = new BooleanInput("ScaleObjects.Distort", "ScaleObjects.Distort.Values"); distort.DefaultBoolean = ConstrDefaults.DefaultScaleDistort; distort.SetBooleanEvent += new CADability.Actions.ConstructAction.BooleanInput.SetBooleanDelegate(SetDistort); fac1 = new DoubleInput("ScaleObjects.FactorX"); fac1.ReadOnly = !dis; fac1.Optional = !dis; fac1.SetDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.SetDoubleDelegate(SetFactor1); fac1.GetDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.GetDoubleDelegate(GetFactor1); fac1.CalculateDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.CalculateDoubleDelegate(CalculateFactor); fac1.MouseClickEvent += new MouseClickDelegate(facOnMouseClick); fac2 = new DoubleInput("ScaleObjects.FactorY"); fac2.ReadOnly = !dis; fac2.Optional = !dis; // fac2.Optional = true; fac2.SetDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.SetDoubleDelegate(SetFactor2); fac2.GetDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.GetDoubleDelegate(GetFactor2); fac2.CalculateDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.CalculateDoubleDelegate(CalculateFactor2); fac3 = new DoubleInput("ScaleObjects.FactorZ"); fac3.ReadOnly = !dis; fac3.Optional = !dis; // fac2.Optional = true; fac3.SetDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.SetDoubleDelegate(SetFactor3); fac3.GetDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.GetDoubleDelegate(GetFactor3); fac3.CalculateDoubleEvent += new CADability.Actions.ConstructAction.DoubleInput.CalculateDoubleDelegate(CalculateFactor3); BooleanInput copy = new BooleanInput("Modify.CopyObjects", "YesNo.Values"); copy.DefaultBoolean = ConstrDefaults.DefaultCopyObjects; copy.SetBooleanEvent += new CADability.Actions.ConstructAction.BooleanInput.SetBooleanDelegate(SetCopy); // erstmal wird das umgebende Rechteck bestimmt cube = BoundingCube.EmptyBoundingCube; foreach (IGeoObject go in originals) { cube.MinMax(go.GetBoundingCube()); } GeoPoint blockCenter = cube.GetCenter(); block.RefPoint = blockCenter; // im Basepoint steht der Fixpunkt der Skalierung base.BasePoint = blockCenter; base.SetInput(fixPoint, fac, startPointInput, endPointInput, distort, fac1, fac2, fac3, copy); base.OnSetAction(); }
public override void OnSetAction() { // base.ActiveObject = block; base.TitleId = "RotateObjects"; copyObject = ConstrDefaults.DefaultCopyObjects; axisVector = base.ActiveDrawingPlane.Normal; feedBackEllipse = Ellipse.Construct(); feedBackEllipse.SetEllipseCenterAxis(GeoPoint.Origin, GeoVector.XAxis, GeoVector.YAxis); // damit nicht alles 0 Color backColor = base.Frame.GetColorSetting("Colors.Feedback", Color.DarkGray); feedBackEllipse.ColorDef = new ColorDef("", backColor); base.FeedBack.Add(feedBackEllipse); base.SetCursor(SnapPointFinder.DidSnapModes.DidNotSnap, "RotateSmall"); //--> diese Inputs werden gebraucht GeoPointInput refPointInput = new GeoPointInput("Objects.RefPoint"); refPointInput.Optional = true; refPointInput.SetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.SetGeoPointDelegate(SetRefPoint); refPointInput.GetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.GetGeoPointDelegate(GetRefPoint); refPointInput.DefinesHotSpot = true; refPointInput.HotSpotSource = "Hotspots.png:0"; rotAngleInput = new AngleInput("RotateObjects.Angle"); rotAngleInput.SetAngleEvent += new CADability.Actions.ConstructAction.AngleInput.SetAngleDelegate(OnSetRotationAngle); rotAngleInput.GetAngleEvent += new CADability.Actions.ConstructAction.AngleInput.GetAngleDelegate(OnGetRotationAngle); rotAngleInput.CalculateAngleEvent += new CADability.Actions.ConstructAction.AngleInput.CalculateAngleDelegate(OnCalculateRotationAngle); rotAngleInput.MouseClickEvent += new MouseClickDelegate(OnMouseClickRotationAngle); startPointInput = new GeoPointInput("Objects.StartPoint"); startPointInput.Optional = true; startPointInput.SetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.SetGeoPointDelegate(OnSetStartPoint); startPointInput.GetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.GetGeoPointDelegate(OnGetStartPoint); endPointInput = new GeoPointInput("Objects.EndPoint"); endPointInput.Optional = true; endPointInput.SetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.SetGeoPointDelegate(OnSetEndPoint); endPointInput.GetGeoPointEvent += new CADability.Actions.ConstructAction.GeoPointInput.GetGeoPointDelegate(OnGetEndPoint); rotateLineInput = new CurveInput("Constr.Rotate.AxisLine"); rotateLineInput.Decomposed = true; // nur Einzelelemente, auch bei Polyline und Pfad rotateLineInput.MouseOverCurvesEvent += new CurveInput.MouseOverCurvesDelegate(RotateLine); rotateLineInput.CurveSelectionChangedEvent += new CurveInput.CurveSelectionChangedDelegate(RotateLineChanged); rotateLineInput.Optional = true; srcPlane = new PlaneInput("Constr.Rotate.SourcePlane"); srcPlane.SetPlaneEvent += SrcPlane_OnSetPlane; srcPlane.GetPlaneEvent += SrcPlane_OnGetPlane; srcPlane.Optional = true; trgPlane = new PlaneInput("Constr.Rotate.TargetPlane"); trgPlane.SetPlaneEvent += TrgPlane_OnSetPlane; trgPlane.GetPlaneEvent += TrgPlane_OnGetPlane; trgPlane.Optional = true; offset = new MultipleChoiceInput("Constr.Rotate.Offset", "Constr.Rotate.Offset.Values"); offset.Optional = true; offsetVal = 0; offset.GetChoiceEvent += OnGetOffset; offset.SetChoiceEvent += OnSetOffset; BooleanInput copy = new BooleanInput("Modify.CopyObjects", "YesNo.Values"); copy.DefaultBoolean = ConstrDefaults.DefaultCopyObjects; copy.SetBooleanEvent += new CADability.Actions.ConstructAction.BooleanInput.SetBooleanDelegate(SetCopy); base.SetInput(refPointInput, rotAngleInput, startPointInput, endPointInput, rotateLineInput, srcPlane, trgPlane, offset, copy); BoundingCube result = BoundingCube.EmptyBoundingCube; foreach (IGeoObject go in originals) { result.MinMax(go.GetBoundingCube()); } GeoPoint blockCenter = result.GetCenter(); block.RefPoint = blockCenter; refPoint = blockCenter; base.BasePoint = blockCenter; // für die Winkelberechnung base.OnSetAction(); rotateLineInput.SetContextMenu("MenuId.Axis", this); // kann man erst hier machen, zuvor gibts die Property noch nicht }