Пример #1
0
        public async Task GeometryCombineMode(GeometryCombineMode mode)
        {
            var target = new Border
            {
                Width      = 200,
                Height     = 200,
                Background = Brushes.White,
                Child      = new Path
                {
                    Data = new CombinedGeometry
                    {
                        GeometryCombineMode = mode,
                        Geometry1           = new RectangleGeometry(new Rect(25, 25, 100, 100)),
                        Geometry2           = new EllipseGeometry
                        {
                            Center  = new Point(125, 125),
                            RadiusX = 50,
                            RadiusY = 50,
                        }
                    },
                    Fill            = Brushes.Blue,
                    Stroke          = Brushes.Red,
                    StrokeThickness = 1,
                }
            };

            var testName = $"{nameof(GeometryCombineMode)}_{mode}";

            await RenderToFile(target, testName);

            CompareImages(testName);
        }
Пример #2
0
 public CombinedGeometry(GeometryCombineMode mode, Geometry geometry1, Geometry geometry2, Transform transform)
 {
   _mode = mode;
   _geometry1 = geometry1;
   _geometry2 = geometry2;
   _transform = transform;
 }
Пример #3
0
 public CombinedGeometry(Geometry geometry1, Geometry geometry2, GeometryCombineMode mode) : this(NoesisGUI_PINVOKE.new_CombinedGeometry__SWIG_1(Geometry.getCPtr(geometry1), Geometry.getCPtr(geometry2), (int)mode), true)
 {
     if (NoesisGUI_PINVOKE.SWIGPendingException.Pending)
     {
         throw NoesisGUI_PINVOKE.SWIGPendingException.Retrieve();
     }
 }
Пример #4
0
 public CombinedGeometry(GeometryCombineMode mode, Geometry geometry1, Geometry geometry2, Transform transform)
 {
     _mode      = mode;
     _geometry1 = geometry1;
     _geometry2 = geometry2;
     _transform = transform;
 }
        /// <summary>
        ///     Returns whether or not an enumeration instance a valid value.
        ///     This method is designed to be used with ValidateValueCallback, and thus
        ///     matches it's prototype.
        /// </summary>
        /// <param name="valueObject">
        ///     Enumeration value to validate.
        /// </param>
        /// <returns> 'true' if the enumeration contains a valid value, 'false' otherwise. </returns>
        public static bool IsGeometryCombineModeValid(object valueObject)
        {
            GeometryCombineMode value = (GeometryCombineMode)valueObject;

            return((value == GeometryCombineMode.Union) ||
                   (value == GeometryCombineMode.Intersect) ||
                   (value == GeometryCombineMode.Xor) ||
                   (value == GeometryCombineMode.Exclude));
        }
 /// <summary>
 /// Constructor from combine mode and 2 operands
 /// </summary>
 /// <param name="geometryCombineMode">
 /// Combine mode - Union, Intersect, Exclude or Xor
 /// </param>
 /// <param name="geometry1">
 /// First geometry to combine
 /// </param>
 /// <param name="geometry2">
 /// Second geometry to combine
 /// </param>
 public CombinedGeometry(
     GeometryCombineMode geometryCombineMode,
     Geometry geometry1,
     Geometry geometry2
     )
 {
     GeometryCombineMode = geometryCombineMode;
     Geometry1           = geometry1;
     Geometry2           = geometry2;
 }
Пример #7
0
        //方法3
        //GeometryのCombineを使う方法
        //整数のRectでも組み合わせる順番によって、小数点以下(誤差)が発生したりしなかったりする、という欠点があるけど
        //領域の重なった部分の処理は柔軟なGeometryCombineModeが使える
        private Geometry CombineGeometry3(List <Geometry> geometries, GeometryCombineMode mode = GeometryCombineMode.Union)
        {
            PathGeometry pg = Geometry.Combine(geometries[0], geometries[1], mode, null);

            for (int i = 2; i < geometries.Count; i++)
            {
                pg = Geometry.Combine(pg, geometries[i], mode, null);
            }
            return(pg);
        }
Пример #8
0
 /// <summary>
 /// Returns the result of a Boolean combination of two Geometry objects.
 /// </summary>
 /// <param name="geometry1">The first Geometry object</param>
 /// <param name="geometry2">The second Geometry object</param>
 /// <param name="mode">The mode in which the objects will be combined</param>
 /// <param name="transform">A transformation to apply to the result, or null</param>
 /// <param name="tolerance">The computational error tolerance</param>
 /// <param name="type">The way the error tolerance will be interpreted - relative or absolute</param>
 public static PathGeometry Combine(
     Geometry geometry1,
     Geometry geometry2,
     GeometryCombineMode mode,
     Transform transform,
     double tolerance,
     ToleranceType type)
 {
     return(PathGeometry.InternalCombine(geometry1, geometry2, mode, transform, tolerance, type));
 }
Пример #9
0
 /// <summary>
 /// Constructor from combine mode and 2 operands
 /// </summary>
 /// <param name="geometryCombineMode">
 /// Combine mode - Union, Intersect, Exclude or Xor
 /// </param>
 /// <param name="geometry1">
 /// First geometry to combine
 /// </param>
 /// <param name="geometry2">
 /// Second geometry to combine
 /// </param>
 internal CombinedGeometry(
     GeometryCombineMode geometryCombineMode,
     Geometry geometry1,
     Geometry geometry2
     )
 {
     this.geometryCombineMode = geometryCombineMode;
     Geometry1 = geometry1;
     Geometry2 = geometry2;
 }
Пример #10
0
 /// <summary>
 /// Constructor from combine mode and 2 operands
 /// </summary>
 /// <param name="geometryCombineMode"> 
 /// Combine mode - Union, Intersect, Exclude or Xor
 /// </param>
 /// <param name="geometry1"> 
 /// First geometry to combine
 /// </param>
 /// <param name="geometry2"> 
 /// Second geometry to combine
 /// </param>
 public CombinedGeometry(
     GeometryCombineMode geometryCombineMode,
     Geometry geometry1,
     Geometry geometry2
 )
 {
     GeometryCombineMode = geometryCombineMode;
     Geometry1 = geometry1;
     Geometry2 = geometry2;
 }
Пример #11
0
        private static Geometry Combine(Geometry origin, List <Geometry> geometries, GeometryCombineMode combineMode)
        {
            Geometry output = origin;

            foreach (Geometry g in geometries)
            {
                output = Geometry.Combine(output, g, combineMode, null);
            }

            return(output);
        }
Пример #12
0
 public CombinedGeometry(
     GeometryCombineMode combineMode,
     Geometry?geometry1,
     Geometry?geometry2,
     Transform?transform)
 {
     Geometry1           = geometry1;
     Geometry2           = geometry2;
     GeometryCombineMode = combineMode;
     Transform           = transform;
 }
 /// <summary>
 /// Constructor from combine mode, 2 operands and a transformation
 /// </summary>
 /// <param name="geometryCombineMode">
 /// Combine mode - Union, Intersect, Exclude or Xor
 /// </param>
 /// <param name="geometry1">
 /// First geometry to combine
 /// </param>
 /// <param name="geometry2">
 /// Second geometry to combine
 /// </param>
 /// <param name="transform">
 /// Transformation to apply to the result
 /// </param>
 public CombinedGeometry(
     GeometryCombineMode geometryCombineMode,
     Geometry geometry1,
     Geometry geometry2,
     Transform transform)
 {
     GeometryCombineMode = geometryCombineMode;
     Geometry1           = geometry1;
     Geometry2           = geometry2;
     Transform           = transform;
 }
Пример #14
0
 /// <summary>
 /// Returns the result of a Boolean combination of two Geometry objects.
 /// </summary>
 /// <param name="geometry1">The first Geometry object</param>
 /// <param name="geometry2">The second Geometry object</param>
 /// <param name="mode">The mode in which the objects will be combined</param>
 /// <param name="transform">A transformation to apply to the result, or null</param>
 public static PathGeometry Combine(
     Geometry geometry1,
     Geometry geometry2,
     GeometryCombineMode mode,
     Transform transform)
 {
     return(PathGeometry.InternalCombine(
                geometry1,
                geometry2,
                mode,
                transform,
                Geometry.StandardFlatteningTolerance,
                ToleranceType.Absolute));
 }
        public CombinedGeometryImpl(GeometryCombineMode combineMode, Geometry g1, Geometry g2)
        {
            var path1 = ((GeometryImpl)g1.PlatformImpl).EffectivePath;
            var path2 = ((GeometryImpl)g2.PlatformImpl).EffectivePath;
            var op    = combineMode switch
            {
                GeometryCombineMode.Intersect => SKPathOp.Intersect,
                GeometryCombineMode.Xor => SKPathOp.Xor,
                GeometryCombineMode.Exclude => SKPathOp.Difference,
                _ => SKPathOp.Union,
            };

            var path = path1.Op(path2, op);

            EffectivePath = path;
            Bounds        = path.Bounds.ToAvaloniaRect();
        }
Пример #16
0
        public static void CombineGeometries(DrawingGroup drawingGroup, GeometryCombineMode combineMode, ref CombinedGeometry combinedGeometry)
        {
            if (combinedGeometry == null)
            {
                combinedGeometry = new CombinedGeometry();
            }

            DrawingCollection drawingCollection = drawingGroup.Children;

            foreach (Drawing drawing in drawingCollection)
            {
                if (drawing is DrawingGroup)
                {
                    CombineGeometries((DrawingGroup)drawing, combineMode, ref combinedGeometry);
                }
                else if (drawing is GeometryDrawing)
                {
                    GeometryDrawing geoDrawing = drawing as GeometryDrawing;
                    combinedGeometry = new CombinedGeometry(combineMode, combinedGeometry, geoDrawing.Geometry);
                }
            }
        }
Пример #17
0
        internal static PathGeometry InternalCombine(
            Geometry geometry1,
            Geometry geometry2,
            GeometryCombineMode mode,
            Transform transform,
            double tolerance,
            ToleranceType type)
        {
            PathGeometry resultGeometry = null;

            unsafe
            {
                MilMatrix3x2D matrix = CompositionResourceManager.TransformToMilMatrix3x2D(transform);

                PathGeometryData data1 = geometry1.GetPathGeometryData();
                PathGeometryData data2 = geometry2.GetPathGeometryData();

                fixed (byte* pPathData1 = data1.SerializedData)
                {
                    Debug.Assert(pPathData1 != (byte*)0);

                    fixed (byte* pPathData2 = data2.SerializedData)
                    {
                        Debug.Assert(pPathData2 != (byte*)0);

                        FillRule fillRule = FillRule.Nonzero;

                        FigureList list = new FigureList();
                        int hr = UnsafeNativeMethods.MilCoreApi.MilUtility_PathGeometryCombine(
                            &matrix,
                            &data1.Matrix,
                            data1.FillRule,
                            pPathData1,
                            data1.Size,
                            &data2.Matrix,
                            data2.FillRule,
                            pPathData2,
                            data2.Size,
                            tolerance,
                            type == ToleranceType.Relative,
                            new AddFigureToListDelegate(list.AddFigureToList),
                            mode,
                            out fillRule);

                        if (hr == (int)MILErrors.WGXERR_BADNUMBER)
                        {
                            // When we encounter NaNs in the renderer, we absorb the error and draw
                            // nothing. To be consistent, we return an empty geometry.
                            resultGeometry = new PathGeometry();
                        }
                        else
                        {
                            HRESULT.Check(hr);

                            resultGeometry = new PathGeometry(list.Figures, fillRule, null);
                        }
                    }
                }
            }

            return resultGeometry;
        }
Пример #18
0
 public void CombineWithGeometry(ISimplifiedGeometrySink geometrySink, IGeometry inputGeometry, GeometryCombineMode combineMode, Matrix3x2Float?inputGeometryTransform, float?flatteningTolerance)
 {
     base.innerRefT.CombineWithGeometry(geometrySink, inputGeometry, combineMode, inputGeometryTransform, flatteningTolerance);
 }
Пример #19
0
 public IGeometryImpl CreateCombinedGeometry(GeometryCombineMode combineMode, Geometry g1, Geometry g2)
 {
     return(new CombinedGeometryImpl(combineMode, g1, g2));
 }
 public static PathGeometry Combine(Geometry geometry1, Geometry geometry2, GeometryCombineMode mode, Transform transform, double tolerance, ToleranceType type)
 {
   return default(PathGeometry);
 }
 public CombinedGeometry(GeometryCombineMode geometryCombineMode, Geometry geometry1, Geometry geometry2, Transform transform)
 {
 }
Пример #22
0
 /// <summary>
 /// Constructor from combine mode, 2 operands and a transformation
 /// </summary>
 /// <param name="geometryCombineMode"> 
 /// Combine mode - Union, Intersect, Exclude or Xor
 /// </param>
 /// <param name="geometry1"> 
 /// First geometry to combine
 /// </param>
 /// <param name="geometry2"> 
 /// Second geometry to combine
 /// </param>
 /// <param name="transform"> 
 /// Transformation to apply to the result
 /// </param>
 public CombinedGeometry(
     GeometryCombineMode geometryCombineMode,
     Geometry geometry1,
     Geometry geometry2,
     Transform transform)
 {
     GeometryCombineMode = geometryCombineMode;
     Geometry1 = geometry1;
     Geometry2 = geometry2;
     Transform = transform;
 }
Пример #23
0
 public static PathGeometry Combine(Geometry geometry1, Geometry geometry2, GeometryCombineMode combineMode, Transform transform, double flatteningTolerance, ToleranceType tolerance)
 {
     throw new NotImplementedException();
 }
 public static PathGeometry Combine(Geometry geometry1, Geometry geometry2, GeometryCombineMode mode, Transform transform, double tolerance, ToleranceType type)
 {
     return(default(PathGeometry));
 }
 public static PathGeometry Combine(Geometry geometry1, Geometry geometry2, GeometryCombineMode mode, Transform transform)
 {
     return(default(PathGeometry));
 }
Пример #26
0
		public static PathGeometry Combine (Geometry geometry1, Geometry geometry2, GeometryCombineMode combineMode, Transform transform)
		{
			throw new NotImplementedException ();
		}
Пример #27
0
        public static GeometryCombineMode Unbox_GeometryCombineMode(IntPtr val)
        {
            GeometryCombineMode ret = (GeometryCombineMode)NoesisGUI_PINVOKE.Unbox_GeometryCombineMode(val);

            return(ret);
        }
Пример #28
0
        public static IntPtr Box_GeometryCombineMode(GeometryCombineMode val)
        {
            IntPtr ret = NoesisGUI_PINVOKE.Box_GeometryCombineMode((int)val);

            return(ret);
        }
Пример #29
0
 public IGeometryImpl CreateCombinedGeometry(GeometryCombineMode combineMode, Geometry g1, Geometry g2)
 {
     return(Mock.Of <IGeometryImpl>());
 }
Пример #30
0
 public IGeometryImpl CreateCombinedGeometry(GeometryCombineMode combineMode, Geometry g1, Geometry g2) => new CombinedGeometryImpl(combineMode, g1, g2);
Пример #31
0
 public static PathGeometry Combine(Geometry geometry1, Geometry geometry2, GeometryCombineMode combineMode, Transform transform)
 {
     throw new NotImplementedException();
 }
Пример #32
0
 /// <summary>
 /// Returns the result of a Boolean combination of two Geometry objects.
 /// </summary>
 /// <param name="geometry1">The first Geometry object</param>
 /// <param name="geometry2">The second Geometry object</param>
 /// <param name="mode">The mode in which the objects will be combined</param>
 /// <param name="transform">A transformation to apply to the result, or null</param>
 public static PathGeometry Combine(
     Geometry geometry1,
     Geometry geometry2,
     GeometryCombineMode mode,
     Transform transform)
 {
     return PathGeometry.InternalCombine(
         geometry1, 
         geometry2, 
         mode, 
         transform, 
         Geometry.StandardFlatteningTolerance, 
         ToleranceType.Absolute);
 }
Пример #33
0
        internal static PathGeometry InternalCombine(
            Geometry geometry1,
            Geometry geometry2,
            GeometryCombineMode mode,
            Transform transform,
            double tolerance,
            ToleranceType type)
        {
            PathGeometry resultGeometry = null;

            unsafe
            {
                MilMatrix3x2D matrix = CompositionResourceManager.TransformToMilMatrix3x2D(transform);

                PathGeometryData data1 = geometry1.GetPathGeometryData();
                PathGeometryData data2 = geometry2.GetPathGeometryData();

                fixed(byte *pPathData1 = data1.SerializedData)
                {
                    Debug.Assert(pPathData1 != (byte *)0);

                    fixed(byte *pPathData2 = data2.SerializedData)
                    {
                        Debug.Assert(pPathData2 != (byte *)0);

                        FillRule fillRule = FillRule.Nonzero;

                        FigureList list = new FigureList();
                        int        hr   = UnsafeNativeMethods.MilCoreApi.MilUtility_PathGeometryCombine(
                            &matrix,
                            &data1.Matrix,
                            data1.FillRule,
                            pPathData1,
                            data1.Size,
                            &data2.Matrix,
                            data2.FillRule,
                            pPathData2,
                            data2.Size,
                            tolerance,
                            type == ToleranceType.Relative,
                            new AddFigureToListDelegate(list.AddFigureToList),
                            mode,
                            out fillRule);

                        if (hr == (int)MILErrors.WGXERR_BADNUMBER)
                        {
                            // When we encounter NaNs in the renderer, we absorb the error and draw
                            // nothing. To be consistent, we return an empty geometry.
                            resultGeometry = new PathGeometry();
                        }
                        else
                        {
                            HRESULT.Check(hr);

                            resultGeometry = new PathGeometry(list.Figures, fillRule, null);
                        }
                    }
                }
            }

            return(resultGeometry);
        }
Пример #34
0
 /// <summary>
 /// Returns the result of a Boolean combination of two Geometry objects.
 /// </summary>
 /// <param name="geometry1">The first Geometry object</param>
 /// <param name="geometry2">The second Geometry object</param>
 /// <param name="mode">The mode in which the objects will be combined</param>
 /// <param name="transform">A transformation to apply to the result, or null</param>
 /// <param name="tolerance">The computational error tolerance</param>
 /// <param name="type">The way the error tolerance will be interpreted - relative or absolute</param>
 public static PathGeometry Combine(
     Geometry geometry1,
     Geometry geometry2,
     GeometryCombineMode mode,
     Transform transform,
     double tolerance,
     ToleranceType type)
 {
     return PathGeometry.InternalCombine(geometry1, geometry2, mode, transform, tolerance, type);
 }
 public CombinedGeometry(GeometryCombineMode geometryCombineMode, Geometry geometry1, Geometry geometry2)
 {
 }
Пример #36
0
 public CombinedGeometry(Geometry geometry1, Geometry geometry2, GeometryCombineMode mode) : this(NoesisGUI_PINVOKE.new_CombinedGeometry__SWIG_1(Geometry.getCPtr(geometry1), Geometry.getCPtr(geometry2), (int)mode), true)
 {
 }
Пример #37
0
 public CombinedGeometry(GeometryCombineMode combineMode, Geometry?geometry1, Geometry?geometry2)
 {
     Geometry1           = geometry1;
     Geometry2           = geometry2;
     GeometryCombineMode = combineMode;
 }
Пример #38
0
 public BooleanCombineCommand(SceneViewModel viewModel, string undoDescription, GeometryCombineMode geometryCombineMode)
     : base(viewModel, undoDescription)
 {
     this.geometryCombineMode = geometryCombineMode;
 }
 public static PathGeometry Combine(Geometry geometry1, Geometry geometry2, GeometryCombineMode mode, Transform transform)
 {
   return default(PathGeometry);
 }
 public CombinedGeometry(GeometryCombineMode geometryCombineMode, Geometry geometry1, Geometry geometry2)
 {
 }
 internal unsafe static extern int MilUtility_PathGeometryCombine( 
     MilMatrix3x2D* pMatrix, 
     MilMatrix3x2D* pMatrix1,
     FillRule fillRule1, 
     byte* pPathData1,
     UInt32 nSize1,
     MilMatrix3x2D* pMatrix2,
     FillRule fillRule2, 
     byte* pPathData2,
     UInt32 nSize2, 
     double rTolerance, 
     bool fRelative,
     Delegate addFigureCallback, 
     GeometryCombineMode combineMode,
     out FillRule resultFillRule);
Пример #42
0
 public CombinedGeometry(GeometryCombineMode mode, Geometry geometry1, Geometry geometry2)
 {
   _mode = mode;
   _geometry1 = geometry1;
   _geometry2 = geometry2;
 }
 public IGeometryImpl CreateCombinedGeometry(GeometryCombineMode combineMode, Geometry g1, Geometry g2) => throw new NotImplementedException();
Пример #44
0
		public static PathGeometry Combine (Geometry geometry1, Geometry geometry2, GeometryCombineMode combineMode, Transform transform, double flatteningTolerance, ToleranceType tolerance)
		{
			throw new NotImplementedException ();
		}