详细解读AnyCAD应用——修改指定点,线,面的坐标实现物体移动

简介: 详细解读AnyCAD应用——修改指定点,线,面的坐标实现物体移动

课题需求: 三维模型位置随实物位置改变而动态改变的功能,通过顶点位置坐标的改变,修改模型在显示中的位置。

功能验证:目前,可通过选中顶点手动输入坐标的方式,模拟验证此功能。

首先,点击“文件”工具栏,选择导入实体,导入一个step文件,这是一种常用的三维实体模型格式。

void OnOpenModel()

{

var dlg = new Microsoft.Win32.OpenFileDialog

{

DefaultExt = ".stp",

Filter = "Models (.igs;.iges;.stp;.step;.brep;.stl)|.igs;.iges;.stp;.step;.brep;.stl"

};

if (dlg.ShowDialog() != true)

return;

SceneNode? node = null;

ProgressView pv = new ProgressView(() =>

{

var shape = ShapeIO.Open(dlg.FileName);

if (shape == null)

return;

node = BrepSceneNode.Create(shape, null, null, 0, false);

});

pv.ShowDialog();

if (node == null)

return;

mRenderView.ShowSceneNode(node);

mRenderView.ZoomAll();

}

然后,在导入的三维模型中选中某一点,即可在“操作对象”属性栏中看到该点在世界坐标系中的实际位置。

var item = itr.Current();

msg += $"\nNodeId: {item.GetNodeId()}";

msg += $"\nUserId: {item.GetUserId()}";

msg += $"\nShapeId: {item.GetShapeIndex()}";

msg += $"\nPrimitiveId: {item.GetPrimitiveIndex()}";

msg += $"\nType: {item.GetShapeType().ToString()}";

msg += $"\nTopoShapeId: {item.GetTopoShapeId().ToString()}";

var pt = item.GetPosition();

msg += $"\nPosition: {pt.x} {pt.y}//代码效果参考:http://www.ezhiqi.com/zx/art_6884.html {pt.z}";

如果需要修改该点的位置,可以点击“自定义位置调整”工具栏,在“目标位置”属性栏中输入目标坐标,或者使用鼠标拖动该点,即可将目标顶点移动到所需位置。并且,您可通过点击软件右上角位置方块,观察三维模型各个位置的动态变化。

选择顶点

ViewStateGuard.SetPickFilter(EnumShapeFilter.VertexEdgeFace);

对应的XAML代码

对应的坐标变量

GPnt _SourcePoint = new GPnt();

【ExpandXYZ】

public GPnt SourcePoint

{

get => _SourcePoint;

set

{

_SourcePoint.SetXYZ(value.XYZ());

OnPropertyChanged(nameof(SourcePoint));

OnPropertyChanged(nameof(SourcePointX));

OnPropertyChanged(nameof(SourcePointY));

OnPropertyChanged(nameof(SourcePointZ));

}

}

GPnt _TargetPoint = new GPnt();

【ExpandXYZ】

public GPnt TargetPoint

{

get => _TargetPoint;

set

{

_TargetPoint.SetXYZ(value.XYZ());

OnPropertyChanged(nameof(TargetPoint));

OnPropertyChanged(nameof(TargetPointX));

OnPropertyChanged(nameof(TargetPointY));

OnPropertyChanged(nameof(TargetPointZ));

UpdateObject();

}

}

应用变换

void UpdateObject()

{

if (_SourceObject == null)

{

return;

}

var vec = new GVec(_SourcePoint, _TargetPoint);

var trf = Matrix4.makeTranslation(Vector3.From(vec));

_SourceObject.SetTransform(trf);

_SourceObject.RequestUpdate();

ViewContext.RequestUpdate(EnumUpdateFlags.Scene);

}

此功能仅改变三维模型的三维坐标,不改变模型本身的形状。

相关文章
|
C# Windows
WPF技术之图形系列Polygon控件
WPF Polygon是Windows Presentation Foundation (WPF)框架中的一个标记元素,用于绘制多边形形状。它可以通过设置多个点的坐标来定义多边形的形状,可以绘制任意复杂度的多边形。
1263 0
|
2月前
|
机器学习/深度学习 监控 数据可视化
YOLOv8+PyQt5睡岗状态智能检测平台搭建 | 睡觉行为自动监控系统【开箱即用】
在本项目中,我们利用YOLOv8模型进行睡觉和睡岗状态检测。项目的核心功能是通过训练YOLOv8来识别不同的状态(如“睡觉”和“睡岗”)。同时,系统还提供了完整的PyQt5界面,用户可以在界面上查看实时检测结果,并且系统支持开箱即用,可以直接进行部署。
|
人工智能 自然语言处理 IDE
通义灵码让AI帮你实现自动化编程
通义灵码是由阿里云与通义实验室联合开发的智能编码辅助工具,具备行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答及异常报错排查等功能。该工具支持200多种编程语言,兼容主流IDE,如Visual Studio Code、Visual Studio和JetBrains IDEs。通义灵码在Gartner发布的AI代码助手魔力象限中表现出色,成为唯一进入挑战者象限的中国科技公司。目前,通义灵码下载量已超过470万,每日辅助生成代码超3000万次,被开发者广泛采用。
|
API UED
逆向海淘代购集运系统方案:lete淘宝代购集运系统丨1688代采系统
**淘宝代购集运系统**整合多平台商品资源,提供代购、仓储、国际运输一站式服务。通过API接口实现商品实时同步,支持多种支付方式与国际物流,确保用户跨地域便利购物。系统涵盖订单管理、多语言支持、客服及营销功能,通过技术创新提升用户体验和满意度。关键点包括市场定位、支付物流体系构建、用户体验优化和API集成,助力海外用户轻松购买中国商品。
|
12月前
|
API C# 开发者
基于Material Design风格开源、免费的WinForms UI控件库
基于Material Design风格开源、免费的WinForms UI控件库!
283 0
|
存储 开发工具 数据库
什么是 Git 存储库?
【8月更文挑战第14天】
607 3
|
设计模式 前端开发 C#
Helix Toolkit:为.NET开发者带来的3D视觉盛宴
Helix Toolkit:为.NET开发者带来的3D视觉盛宴
963 0
|
网络协议
阿里云服务器搭建DNS解析服务步骤
在阿里云搭建DNS解析服务,首先注册阿里云账号并购买适合的云服务器。获取服务器公网IP后,配置服务器并安装DNS软件如Bind9。接着设置DNS解析,包括定义顶级和子域名的指向。最后,通过ping测试或浏览器访问验证DNS解析功能是否正常。
1320 19
|
开发框架 JavaScript 前端开发
微软官方开源免费的Blazor UI组件库 - Fluent UI Blazor
微软官方开源免费的Blazor UI组件库 - Fluent UI Blazor
472 1
|
Java 数据库连接 数据库
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
1683 0