将路径转换为几何形状

2023-11-27

大家好,我试图总结并提出基本问题和我的想法,但到目前为止还行不通:S

基本上我的问题是: 用户将元素添加在一起,我想根据这些数字创建一个新元素,以便可以为用户定义的元素创建一个新路径。假设我有一个正方形和一个三角形。用户将其组合成一座房子。现在我想让房子成为用户的一个元素。为此,我需要元素的路径,如何创建它?

My Idea使用的图形元素基于路径字符串。因此,我希望将它们转换为稍后可以使用的几何元素。我使用提供的代码安德烈·梅内塞斯在下面的答案中,代码复制在这里:

public static Geometry PathMarkupToGeometry(ShieldGearViewModel shieldGearModelRec)
    {
        string pathMarkup = shieldGearModelRec.Gear.Path;
        try
        {
            string xaml =
            "<Path " +
            "xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>" +
            "<Path.Data>" + pathMarkup + "</Path.Data></Path>";
            var path = System.Windows.Markup.XamlReader.Load(xaml) as System.Windows.Shapes.Path;
            // Detach the PathGeometry from the Path
            if (path != null)
            {
                path.Height = shieldGearModelRec.Gear.Height;
                path.Width = shieldGearModelRec.Gear.Width;
                path.Fill = new SolidColorBrush(Colors.Green);
                path.Stretch = Stretch.Fill;
                Geometry geometry = path.Data;
                //Test not working, exception is thrown
                //Rect transRect = new Rect(shieldGearModelRec.Gear.x, shieldGearModelRec.Gear.y, shieldGearModelRec.Gear.Width, shieldGearModelRec.Gear.Height);
                //geometry.Transform.TransformBounds(transRect);
                path.Data = null;
                return geometry;
            }
            return null;
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
        }
        return null;
    }

我这样做是为了得到一个几何图形来遵循示例这个链接描述了。上述问题是我无法访问新几何元素的 x 或 y 位置,那么如何指定这个位置?

对于我认为的职位这个链接可能是一个解决方案,只是还没有发挥作用? :)

完成此操作后,我将其添加到基于之前链接的几何组中,以便我可以获得新元素的路径。但几何组以 0 作为边界。 因此,为了使其工作,我需要为各个几何元素定义 x 和 y,然后这可能会解决 geomtrygroup 问题,或者我必须在之后查看这个问题:) 问题已经存在太久了:|

下面的文字是老问题和想法

我有一个字符串,我想在后面的代码中将其转换为几何形状。所以我在 Stackoverflow 上找到了这个WPF C# 路径:如何在代码中(而不是在 XAML 中)从具有路径数据的字符串获取几何图形

此链接建议您可以使用 parse 和以下代码将字符串转换为路径:

var path = new Path();
path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 400,175 H 280");

但是解析在 Windows Phone 上不可用。我的其他努力尚未解决该问题。我尝试使用 pathGeometry 但似乎无法将字符串设置为路径?

所以我的问题是如何在代码后面将字符串转换为几何形状而不绑定到视图上的元素。

第一步所以我成功地创建了一条路径,如下所示

var pathTesting = new System.Windows.Shapes.Path();
var b = new System.Windows.Data.Binding
{
    Source = DecorationOnShield[i].Gear.Path
};
System.Windows.Data.BindingOperations.SetBinding(pathTesting, System.Windows.Shapes.Path.DataProperty, b);

现在我正在尝试将路径转换为几何形状。

Extra

我的想法是做同样的事情这个链接描述了。其中示例显示:

var blackRectGeometry = new RectangleGeometry();
Rect rct = new Rect();
rct.X = 80;
rct.Y = 167;
rct.Width = 150;
rct.Height = 30;
blackRectGeometry.Rect = rct;

但不是长方形我想用一个拍打的任意形状h,但仍然可以设置信息,例如坐标 and size.

Extra

我正在考虑定义一个用户控件,其中包含一条看起来像这样的路径:

<UserControl x:Class="UndoRedoShield.View.Geometry"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8"
mc:Ignorable="d"
Canvas.Left="{Binding Gear.x}" Canvas.Top="{Binding Gear.y}">


<Path Data="{Binding Gear.Path}" Fill="{Binding Gear.Color}" Stretch="Fill" UseLayoutRounding="False" Height="{Binding Gear.Height}" Width="{Binding Gear.Width}" Opacity="{Binding Gear.Opacity}">
    <Path.RenderTransform>
        <ScaleTransform ScaleX="{Binding Gear.Scale}" ScaleY="{Binding Gear.Scale}"/>
    </Path.RenderTransform>

</Path>

</UserControl>

但在几何方面还无法以任何方式使用它。有人知道使用这种方法吗?任何方法都值得赞赏! :)

额外额外:)

是否可以从 uielements 创建几何形状,以便渲染的用户控件可以转换为几何路径?

Progress

I found 这个链接我可以在其中从路径创建几何图形。路径具有宽度和高度属性。

但我在几何或路径中没有的属性如下:

  1. 画布.左
  2. 帆布.顶部
  3. Canvas.ZIndex(我认为当我将其添加到 GeometryGroup 时这是可能的)

似乎这可以通过 Path.Data 的bounds 属性来完成。但不是 ZIndex。所以这个还是需要用geometryGroup来测试,需要将Geometry添加到GeometryGroup中。


前段时间,在寻找解决方案时,我最终创建了这个函数。也许它会对你有所帮助。

    public static Geometry PathMarkupToGeometry(string pathMarkup)
    {
        try
        {
            string xaml =
            "<Path " +
            "xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>" +
            "<Path.Data>" + pathMarkup + "</Path.Data></Path>";
            var path = XamlReader.Load(xaml) as Path;
            // Detach the PathGeometry from the Path
            if (path != null)
            {
                Geometry geometry = path.Data;
                path.Data = null;
                return geometry;
            }
            return null;
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
        }
        return null;
    }

然后我这样调用这个函数:

     var arrow = new Path
     {
        Data = DesignHelpers.PathMarkupToGeometry("M-1,0 L0,1 L1,0"),
        Fill = new SolidColorBrush(Colors.Black),
        Stretch = Stretch.Fill,
        Height = 12,
        Width = 18,
        HorizontalAlignment = HorizontalAlignment.Center
    };

我不知道这是否完全满足您的需求,但也许它会有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将路径转换为几何形状 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 以不敏感的方式在 bash 中查找路径

    假设一条路径像 home albfan Projects InSaNEWEBproJECT 尽管事实上不使用这样的名称 有没有办法以不敏感的方式检查路径 我遇到了这个解决方案 但如果可能的话 我想找到一个内置或 gnu 程序 functio
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • @cuda.jit 和 @jit(target='gpu') 之间的区别

    我有一个关于使用 Continuum 的 Accelerate 和 numba 包中的 Python CUDA 库的问题 正在使用装饰器 jit with target gpu与 cuda jit 不 它们不一样 尽管 PTX 到汇编器的最
  • 在 GridView Yii2 中排序和过滤数据,其中列不在数据库中

    如果我在 db 中有 2 个字段 概率和影响 并且我需要 GridView 中的一列将这两个字段相乘 我设法将其添加到那里 例如 attribute gt priority format gt raw value gt function m
  • Flutter - 翻卡效果

    我正在尝试制作一张翻转卡 获得效果的最佳方法是什么 我会用一个AnimatedBuilder or AnimatedWidget激活 a 的值Transform小部件 ScaleTransition几乎可以为你做到这一点 但它会在两个方向上
  • 在 Android 2.1 中使用 getRotationMatrix 和 getOrientation

    我已经被这个问题困扰太久了 此代码应输出加速度计的 dx dy dz 以及 dx 的运行总计 它还应该输出方位角 俯仰角和横滚角 我已使用此处提供的信息 但无济于事 此代码无法正确输出俯仰角 方位角或滚转角 它分别为最后三个文本视图输出 0
  • 键盘向上和向下箭头

    我有一个自动完成搜索 通过输入几个字符 它将显示与输入的字符相匹配的所有名称 我使用 DIV 标记在 jsp 中填充这些数据 通过使用鼠标 我可以选择名称 但我想使用键盘上下箭头选择要选择的 DIV 标签中的名称 任何人都可以帮我解决这个问
  • 生成带数字签名的 PDF

    是否可以在 PHP 中生成带有数字签名的 PDF 文件 首选开源解决方案 TCPDF从5 5 001版本 2010 06 23发布 开始可以对生成的PDF文档进行签名 它还可以将透明签名矩形字段放置在任何位图 文本上 因此单击签名字段会弹出
  • MVC .NET 中的 URL 参数编码

    我在 MVC 4 NET 应用程序中有一个控制器 它从 URL 接收字符串作为参数 这来自重定向到控制器的 aspx 页面Route config 如果我在客户端中发送该参数值 fwdgerhb bhrth ftrgbhrt 我在服务器上得
  • 使用 phantomjs 将网页渲染为 pdf 时,如何自动调整 viewportSize 以获取整个页面宽度?

    我可以使用以下参数正确指定页面大小 var page require webpage create page paperSize format Letter orientation Portrait 我面临的挑战是 我无法让我的网页占据纸张
  • 常见 Lisp 类型综合指南

    也许这个问题太笼统 但我会尝试 有没有关于 Common Lisp 类型的综合指南 我对这个问题有点困惑 为什么在中声明非原始类型make array s element type被提升为t 是否有可能对实际声明的类型进行编译时或运行时检查
  • UDP端口开放检查

    检查同一台计算机上的 UDP 端口是否打开的最佳方法是什么 我有端口号7525UDP如果它是打开的 我想绑定它 我正在使用这段代码 while true try socket bind catch Exception ex MessageB
  • 'glCreateShader' 未在此范围内声明?

    为什么我会收到这些错误 error GL VERTEX SHADER was not declared in this scope error glCreateShader was not declared in this scope Co
  • 捆绑适用于 Mac 的 Java 7 .jar

    我创建了一个需要 Java 7 的 jar 我有 Java 7 JDK 和 JRE 并且可以双击运行该 jar 但是 我想将其打包到应用程序中 我尝试过的 使用Apple的Jar Bundler工具 我成功创建了一个应用程序 但是 当我运行
  • 两个 dropdownlist mvc 4 之间的连接

    我有预付产品促销活动 经销商可以有子经销商 经销商可以为每种产品设定价格 他对每种产品都有最大义务 现在我喜欢在我的 mvc c 网站项目中的销售页面有两个 DropDowmList 当我从第一个 ddl 查出产品时 我希望我的另一个 dd
  • 如何使用 Realm Xamarin 获取独立/非托管 RealmObject

    有没有办法 当我从 Realm 读取对象时 它可以成为独立或非托管对象 在 EF 中 这称为无跟踪 当我想在数据对象在持久数据存储上更新之前实现更多业务逻辑时 就会使用此功能 我可能想将 RealmObject 提供给 ViewModel
  • FFMPEG发送RTSP编码流C++

    我正在尝试找出一种方法来获取在 FFMEG 中创建的编码 H264 图像 并使用 FFMPEG 通过 RTSP 发送出去 是否有一些示例代码或教程可以说明如何执行此操作 我尝试在网上搜索 但没有找到任何内容 任何帮助是极大的赞赏 提前致谢
  • 来自工具的 Bokeh 服务器回调

    我对 Python 有点陌生 目前正在使用 Bokeh 进行交互式绘图可视化 我需要在其中显示多个相关图表 为了实现这一点 我使用散景服务器 我一直在阅读文档并且一些例子但我一直无法找到由绘图上的选择触发的 python 回调 在服务器中执
  • 在状态栏上方显示视图?

    我最近看到一个应用程序的图像 它能够在状态栏上方显示视图 并且还能够用视图覆盖它 我知道您可以从与父顶部对齐的视图中获得状态栏正下方的视图 但是如何在状态栏顶部获得视图 Example 禁用系统状态栏 无需 Root 经过整整两天的搜索 S
  • 将 Microsoft DataGrid 等 ActiveX 控件添加到 Excel 工作表时出现“无法插入对象”错误[重复]

    这个问题在这里已经有答案了 我们的 iGrid ActiveX 网格控件的用户之一需要将其直接插入到 MS Excel 工作表中 但他们未能做到这一点 始终生成 无法插入对象 错误 我们还可以在 Win7 64 位和 MS Office 2
  • GNU sed 中的前瞻正则表达式有什么问题?

    这就是我正在做的事情 简化示例 gsed i E s foo bar 1 file txt 我想把bar在每行不以以下开头的行前面foo 这是错误 gsed e expression 1 char 22 Invalid preceding
  • 将路径转换为几何形状

    大家好 我试图总结并提出基本问题和我的想法 但到目前为止还行不通 S 基本上我的问题是 用户将元素添加在一起 我想根据这些数字创建一个新元素 以便可以为用户定义的元素创建一个新路径 假设我有一个正方形和一个三角形 用户将其组合成一座房子 现