课题需求: 三维模型位置随实物位置改变而动态改变的功能,通过顶点位置坐标的改变,修改模型在显示中的位置。
【资料图】
功能验证:目前,可通过选中顶点手动输入坐标的方式,模拟验证此功能。
首先,点击“文件”工具栏,选择导入实体,导入一个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} {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); }
此功能仅改变三维模型的三维坐标,不改变模型本身的形状。
上一篇:寄存行李英语怎么说_寄存行李
下一篇:最后一页
-
研究发现,我们的大脑犹如一台做预测的机器据西班牙《万象》月刊网站8月12日报道,我们大脑工作的方式有点像手机或谷歌的自动填充功能:不断尝试猜测下一个单词。每当我们听播客、读
-
花8000多元买的商品,白等两个月却没收到货?亚马逊回应“花8000多元买的商品,白等了两个月却没收到货。”近日,消费者赵先生向《中国消费者报》投诉,称他通过亚马逊购物APP下了两笔订单,在等待两个月后订单均被强制取消。
-
广东省消委会发布二手车买卖合同示范文本为配合广东省推进“阳光二手车”工作,促进二手车流通行业健康发展,推动经营主体树立诚信经营理念,规范二手车交易行为,切实保护消费者的合法权益。
-
国家卫健委:家庭医生签约服务“最后一公里”有望打通3月15日,国家卫生健康委、财政部等六部门共同提出的《关于推进家庭医生签约服务高质量发展的指导意见》(以下简称《意见》)发布。
-
2022年1~2月房企拿地榜出炉:冠军碧桂园近日,中指研究院公布了2022年1~2月房企拿地(金额)TOP100榜单。令业内惊讶的是,除了品牌房企名次“乾坤大挪移”,榜单内还冒出了许多“名不见经传”的新面孔。
X 关闭
X 关闭