WPF中两个形状的共享区域

huangapple go评论47阅读模式
英文:

shared area of two shapes in wpf

问题

我正在制作一个 Venn 图应用程序,但不知道如何进行第一步。有两个椭圆,我想要给两个椭圆的重叠区域上色。

绿色区域是我指的重叠区域。

英文:

I'm making an app that is a venn diagram and I don't know how to do the first step. There are to ellipses and I want to color the shared area of two ellipses.

WPF中两个形状的共享区域

The green area is the shared area I meant.

答案1

得分: 1

你可以使用组合几何图形的交集模式来查找重叠的部分:

<Grid>
    <Grid.Background>
        <VisualBrush Stretch="None">
            <VisualBrush.Visual>
                <Canvas>
                    <Path Fill="Yellow">
                        <Path.Data>
                            <EllipseGeometry Center="150,50" RadiusX="75" RadiusY="75" />
                        </Path.Data>
                    </Path>
                    <Path Fill="Yellow">
                        <Path.Data>
                            <EllipseGeometry Center="50,50" RadiusX="75" RadiusY="75" />
                        </Path.Data>
                    </Path>
                    <Path Fill="Green">
                        <Path.Data>
                            <CombinedGeometry GeometryCombineMode="Intersect">
                                <CombinedGeometry.Geometry1>
                                    <EllipseGeometry Center="150,50" RadiusX="75" RadiusY="75"/>
                                </CombinedGeometry.Geometry1>
                                <CombinedGeometry.Geometry2>
                                    <EllipseGeometry Center="50,50" RadiusX="75" RadiusY="75"/>
                                </CombinedGeometry.Geometry2>
                            </CombinedGeometry>
                        </Path.Data>
                    </Path>
                </Canvas>
            </VisualBrush.Visual>
        </VisualBrush>
    </Grid.Background>
</Grid>

使用行和列在网格中定位文本块,放置在背景形状的顶部。

或者将所有内容放在 Canvas 中,而不是使用 VisualBrush。

使用 Canvas.Left 和 Canvas.Top 将一些文本块放置在椭圆形的顶部。

英文:

You can use intersect mode on a combinedgeometry to find the parts overlap:

    &lt;Grid&gt;
    &lt;Grid.Background&gt;
        &lt;VisualBrush Stretch=&quot;None&quot;&gt;
            &lt;VisualBrush.Visual&gt;
                &lt;Canvas&gt;
                    &lt;Path Fill=&quot;Yellow&quot;&gt;
                        &lt;Path.Data&gt;
                            &lt;EllipseGeometry Center=&quot;150,50&quot; RadiusX=&quot;75&quot; RadiusY=&quot;75&quot; /&gt;
                        &lt;/Path.Data&gt;
                    &lt;/Path&gt;
                    &lt;Path Fill=&quot;Yellow&quot;&gt;
                        &lt;Path.Data&gt;
                            &lt;EllipseGeometry Center=&quot;50,50&quot; RadiusX=&quot;75&quot; RadiusY=&quot;75&quot; /&gt;
                        &lt;/Path.Data&gt;
                    &lt;/Path&gt;
                    &lt;Path   Fill=&quot;Green&quot;&gt;
                        &lt;Path.Data&gt;
                            &lt;CombinedGeometry GeometryCombineMode=&quot;Intersect&quot;&gt;
                                &lt;CombinedGeometry.Geometry1&gt;
                                    &lt;EllipseGeometry Center=&quot;150,50&quot; RadiusX=&quot;75&quot; RadiusY=&quot;75&quot;/&gt;
                                &lt;/CombinedGeometry.Geometry1&gt;
                                &lt;CombinedGeometry.Geometry2&gt;
                                    &lt;EllipseGeometry Center=&quot;50,50&quot; RadiusX=&quot;75&quot; RadiusY=&quot;75&quot;/&gt;
                                &lt;/CombinedGeometry.Geometry2&gt;
                            &lt;/CombinedGeometry&gt;
                        &lt;/Path.Data&gt;
                    &lt;/Path&gt;
                &lt;/Canvas&gt;
            &lt;/VisualBrush.Visual&gt;
        &lt;/VisualBrush&gt;
    &lt;/Grid.Background&gt;

Position textblocks in the grid on top of the background shapes using rows and columns.

Or just put everything in a canvas rather than using a visualbrush.

Use Canvas.Left and Canvas.Top to position some textblocks on top of the ellipses.

huangapple
  • 本文由 发表于 2023年2月19日 23:30:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/75501223.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定