cad.net 修改Point3d字段内容

由于Point3d的字段是设置了set保护,那么我们可以利用不安全操作来进行:

.csproj加入:

<PropertyGroup>
    <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>

结构:
准备一个相同的结构,需要直接暴露字段.
(不使用 set get 减少栈帧,因为我们有一亿..百亿个点...真有那么多点SOA结构似乎更好)

[Serializable]
[DebuggerDisplay("{DebuggerDisplay,nq}")]
[DebuggerTypeProxy(typeof(Point3D))]
public struct Point3D
{
    [DebuggerBrowsable(DebuggerBrowsableState.Never)]
    private string DebuggerDisplay => $"(X:{X},Y:{Y},Z:{Z})";

    public double X;
    public double Y;
    public double Z;
}

测试命令:

[CommandMethod(nameof(Test_Marshal))]
public void Test_Marshal()
{
    var dm = Acap.DocumentManager;
    var doc = dm.MdiActiveDocument;
    var ed = doc.Editor;
   
    Point3d pt = new(100, 50, 0);
    ed.WriteMessage("\n原始:" + pt.ToString());

    // 将Point3d指针转为Point3D指针,以此避开get保护,实现修改内部值
    unsafe
    {
        ((Point3D*)&pt)->X = 12345;//必须强转成这个指针类型,不然它为(Point3d*)
    }
    ed.WriteMessage("\n指针法:" + pt.ToString());
}

(完)

posted @   惊惊  阅读(461)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示