没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:况鱼杰|2019-09-17 10:29:42.263|阅读 264 次
概述:本系列教程整理了VectorDraw Developer Framework(VDF)最常见问题,教程整理的很齐全,非常适合新手学习,本节教程将会介绍如何在3D视图中检查对象是否隐藏在另一个对象中。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
相关链接:
VectorDraw Developer Framework(VDF)是一个用于应用程序可视化的图形引擎库。有了VDF提供的功能,您可以轻松地创建、编辑、管理、输出、输入和打印2D和3D图形文件。
VectorDraw Developer Framework试用版下载
问:
如何在3D视图中检查对象是否隐藏在另一个对象中?例如,我有两个多面体,一个是z = 100的大面积,另一个是z = 0的面,并且视图是只有一个多面体是可见的,另一个多面体是在大面体后面,并且是完全看不见的在屏幕上。
答:
你需要一些OpenGL代码来检查一个对象是否落后于另一个对象(不可见)。
您需要的代码如下:
vdPolyface purple; // this is the polyface to check if is behind the green polyface
void test()
{ // just create the objects
vdPolyface pf1 = new vdPolyface(doc);
pf1.CreateBox(new gPoint(0, 0), 1, 1, 1, 0);
pf1.PenColor = new vdColor(Color.Purple);
doc.Model.Entities.AddItem(pf1);
purple = pf1; // this is the polyface to check if is behind the green polyface
vdPolyface pf2 = new vdPolyface(doc);
pf2.CreateBox(new gPoint(-2, 2), 4, 4, 4, 0);
pf2.PenColor = new vdColor(Color.Green);
doc.Model.Entities.AddItem(pf2); // this is the green polyface that hides the purple one
doc.RenderMode = vdRender.Mode.Shade;
//doc.CommandAction.View3D("VINW");
doc.CommandAction.View3D("VINE");
}
bool IsObjectVisible = false;
void test1() // this is the method that checks the “visibility” using the OnDrawAfter event
{
IsObjectVisible = false;
doc.OnDrawAfter += new vdDocument.DrawAfterEventHandler(TestObjectVisibility_OnDrawAfter);
doc.RenderMode = vdRender.Mode.Shade;
doc.Redraw(true);
doc.OnDrawAfter -= new vdDocument.DrawAfterEventHandler(TestObjectVisibility_OnDrawAfter);
MessageBox.Show(IsObjectVisible ? "Object is visible" : "Object is not visible");
}
void TestObjectVisibility_OnDrawAfter(object sender, vdRender render)
{
double[] _modelMatrix = new double[16], _projMatrix = new double[16];
int[] _viewport = new int[4];
double pwinx = 0.0, pwiny = 0.0, pwinz = 0.0;
//GET the active world to view and view to pixel matrixes
VectorDraw.Render.OpenGL.OpenGLImports.glGetDoublev(VectorDraw.Render.OpenGL.OpenGLImports.Parameters.GL_PROJECTION_MATRIX, _projMatrix);
VectorDraw.Render.OpenGL.OpenGLImports.glGetDoublev(VectorDraw.Render.OpenGL.OpenGLImports.Parameters.GL_MODELVIEW_MATRIX, _modelMatrix);
VectorDraw.Render.OpenGL.OpenGLImports.glGetIntegerv(VectorDraw.Render.OpenGL.OpenGLImports.Parameters.GL_VIEWPORT, _viewport);
Rectangle winrc = new Rectangle(_viewport[0], _viewport[1], _viewport[2], _viewport[3]);
foreach (gPoint pt in purple.VertexList)
{
VectorDraw.Render.OpenGL.OpenGLImports.gluProject(pt.x, pt.y, pt.z, _modelMatrix, _projMatrix, _viewport, ref pwinx, ref pwiny, ref pwinz);
Point winPt = new Point((int)pwinx, (int)pwiny);
if (!winrc.Contains(winPt)) continue;
//Get the existing depth in previous calculated pixel
double depth = VectorDraw.Render.OpenGL.OpenGLImports.glReadPixelDepth((int)(pwinx), (int)(pwiny));
//the pt is visible if the pwinz is smaller than the existing(it is closest to eye)
double def = pwinz - depth;
if (def <= 0.000001)
{
IsObjectVisible = true;
break;
}
}
}相关资料推荐:
VectorDraw Developer Framework(VDF)示例
如果您对想要购买正版授权VectorDraw Developer Framework(VDF),可以联系咨询相关问题。
关注慧聚IT微信公众号 ☟☟☟,了解产品的最新动态及最新资讯。


本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@ke049m.cn
文章转载自:



注意: Cogent DataHub 软件 v11 包含一些新功能,您的目标操作系统可能不支持这些功能。
本教程主要为大家介绍如何使用DevExpress WinForms数据网格控件进行数据排序的基础知识,欢迎下载最新版组件体验!
在使用Parasoft C/C++test执行BugDetective数据流分析时,可能会遇到用户自定义的资源API,那在这种情况下,若要判断是否存在资源问题,如资源泄露等,则需要手动配置测试配置。
大型SaaS系统的自动化测试常常受制于界面变化快、结构复杂、加载机制多变等因素。从元素识别到脚本管理,SmartBear TestComplete帮助Salesforce建了可靠的自动化测试体系。
相关产品
面向对象的矢量图形引擎库,支持2D和3D图形,用于可视化其应用程序,无限分发授权。
最新文章 MORE
半岛外围网上直营相关的文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@ke049m.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
半岛外围网上直营