xml version="1.0" encoding="utf-8" standalone="yes"12bet++博客-首页原创精华区http://www.fometaux.com/专注于12bet技术zh-cnSat, 23 Mar 2019 08:26:29 GMTSat, 23 Mar 2019 08:26:29 GMT6012bet++博客-首页原创精华区http://www.fometaux.com/eryar/archive/2019/02/21/intana_circle.htmleryareryarThu, 21 Feb 2019 14:05:00 GMThttp://www.fometaux.com/eryar/archive/2019/02/21/intana_circle.htmlhttp://www.fometaux.com/eryar/comments/216252.htmlhttp://www.fometaux.com/eryar/archive/2019/02/21/intana_circle.html#Feedback0http://www.fometaux.com/eryar/comments/commentRss/216252.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216252.html解析几何求交之圆与二次曲面

eryar@163.com

 

Abstract. OpenCASCADE provides the analytic intersection between a conic and a quadric in the package IntAna.

Key Words. Analytic geometry, intersection, coninc, quadric

1. Introduction

OpenCASCADE中的包IntAna提供了解析几何曲线(二次曲线)与解析曲面(二次曲面)求交、解析曲面与解析曲面求交的功能。其中IntAna分别是Intersection Analytic的前三个字母缩写,表示解析几何求交。

我们学过了《线性代数》中的二次型,其中二次型在解析几何中的一个应用就是二次曲线和二次曲面方程的化简及其性质的分析。

本文主要结合源码分析圆与二次曲面求交的实现,其他二次曲线与二次曲面求交的可以依此类推。

2. Quadratic form

在解析几何中,为了便于研究二次曲线

的几何性质,我们可以选择适当的坐标旋转变换

把方程化成标准形式:

根据标准形式中的系数来分析这个二次曲线是什么曲线,即圆、椭圆、抛物线、双曲线。

OpenCASCADE中解析几何的二次曲面有以下几种类型:

l gp_Pln:平面可看作二次曲面的特例

l gp_Sphere:解析球面

l gp_Cylinder:解析柱面

l gp_Cone:解析锥面

这些解析曲面都可以统一使用二次多项式来表示,即这个二次多项式的系数确定了一个二次曲面。OpenCASCADE中相应的类是IntAna_Quaric

3. Math Trigonometric Function Roots

OpenCASCADE中类IntAna_IntConicQuad中提供了二次曲线与二次曲面求交功能,其中计算圆与二次曲面相交的函数是:

  //! Creates the intersection between a circle and a quadric.

  Standard_EXPORT IntAna_IntConicQuad(const gp_Circ& C, const IntAna_Quadric& Q);

其实现原码中注释如下:

 

根据其注释,可知其计算过程如下:将圆的方程在其局部坐标系中用参数形式表示,

将二次曲面方程的系数也变换到圆的坐标系中,因为圆的参数方程中为0,所以将圆的参数方程代入二次曲面的方程后,和z相关的项的系数都可以简化了。

得到一个三角函数的方程后,这时就要引入基础模块中的数学工具集来解决问题了。

math_TrigonometricFunctionRoots主要用于对如下形式的三角函数方程进行求解:

4. Conclusion

对于圆与二次曲面求交的实现来看,也可以不用变换二次曲面的坐标系,直接将圆的参数方程代入曲面的二次方程中:

最终化简也可得到一个三角函数方程,但是计算量与变换曲面坐标系对比来看会更大。

从上面的源码分析可知,在OpenCASCADE中对于解析曲线与曲面求交使用二次多项式系数来表示的。通过将二次曲线用参数形式的方程来表示,并代入二次曲面的方程,化简后直接使用math包中的工具(多项式方程求解和三角函数求解工具)对方程进行求解。

5. References

1. 同济大学应用数学系. 线性代数(第四版). 高等教育出版社

2. 丘维声. 解析几何. 北京大学出版社

 


为了方便大家在移动端也能看到我的博文和讨论交流,现已注册微信公众号,欢迎大家扫描下方二维码关注。
Shing Liu(eryar@163.com)




eryar 2019-02-21 22:05 发表评论
]]>
12bet++博客-首页原创精华区http://www.fometaux.com/eryar/archive/2019/01/29/intana_intconicquad.htmleryareryarTue, 29 Jan 2019 14:06:00 GMThttp://www.fometaux.com/eryar/archive/2019/01/29/intana_intconicquad.htmlhttp://www.fometaux.com/eryar/comments/216225.htmlhttp://www.fometaux.com/eryar/archive/2019/01/29/intana_intconicquad.html#Feedback0http://www.fometaux.com/eryar/comments/commentRss/216225.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216225.html解析几何求交之直线与二次曲面

eryar@163.com

 

Abstract. OpenCASCADE provides the analytic intersection between a conic and a quadric in the package IntAna.

Key Words. Analytic geometry, intersection, coninc, quadric 

1. Introduction

OpenCASCADE中的包IntAna提供了解析几何曲线(二次曲线)与解析曲面(二次曲面)求交、解析曲面与解析曲面求交的功能。其中IntAna分别是Intersection Analytic的前三个字母缩写,表示解析几何求交。

我们学过了《线性代数》中的二次型,其中二次型在解析几何中的一个应用就是二次曲线和二次曲面方程的化简及其性质的分析。

本文主要结合源码分析直线与二次曲面求解的实现来抛砖引玉,后期将二次曲线与二次曲面求交的各种情况做全面分析。

2. Quadratic form

在解析几何中,为了便于研究二次曲线

的几何性质,我们可以选择适当的坐标旋转变换

把方程化成标准形式:

根据标准形式中的系数来分析这个二次曲线是什么曲线,即圆、椭圆、抛物线、双曲线。

OpenCASCADE中解析几何的二次曲面有以下几种类型:

l gp_Pln:平面可看作二次曲面的特例

l gp_Sphere:解析球面

l gp_Cylinder:解析柱面

l gp_Cone:解析锥面

这些解析曲面都可以统一使用二次多项式来表示,即这个二次多项式的系数确定了一个二次曲面。OpenCASCADE中相应的类是IntAna_Quaric

 

 3. Math Direct Polynomial Roots

OpenCASCADE中类IntAna_IntConicQuad中提供了二次曲线与二次曲面求交功能,其中计算直线与二次曲面相交的函数是:

  //! Creates the intersection between a line and a quadric.

  Standard_EXPORT IntAna_IntConicQuad(const gp_Lin& L, const IntAna_Quadric& Q);

其实现原码中注释如下:

 

根据其注释,可知其计算过程如下:将直线方程用参数形式表示,

将参数表示的直线方程代入二次曲面方程,化简可得一个二次多项式,对二次多项式进行求解即得直线与二次曲面的交点。

得到一个二次多项式的方程后,这时就要引入基础模块中的数据工具集来解决问题了。

 

math_DirectPolynomialRoots可以用来对4次及以下的多项式方程进行求解。对于化简后的直线与二次曲面方程是一个二次多项式方程,则使用这个类直接进行求解。

4. Conclusion

从上面的源码分析可知,在OpenCASCADE中对于解析曲线与曲面求交使用二次多项式系数来表示的。通过将方程化简后直接使用math包中的工具对方程进行求解。

使用OpenCASCADE熟练会发现他们的编码风格也是有一定的套路的,即一个类会提供几个构造函数,将不同参数进行输入。有的在构造函数中调用初始化函数Init()来对算法需要的其他输入数据进行初始化,有的则直接在构造函数中调用的计算函数Perform()。如果构造函数中没有调用计算函数Perform(),则需要手动调用Perform()。算法的成功通过函数IsDone()来检测。根据检测判断是否取出计算值。

春节就要到了,祝大家在新的一年里心想事成,万事如意!

5. References

1. 同济大学应用数学系. 线性代数(第四版). 高等教育出版社

2. 丘维声. 解析几何. 北京大学出版社



eryar 2019-01-29 22:06 发表评论
]]>
12bet++博客-首页原创精华区http://www.fometaux.com/eryar/archive/2019/01/19/rvmtranslator70_ifc.htmleryareryarSat, 19 Jan 2019 06:11:00 GMThttp://www.fometaux.com/eryar/archive/2019/01/19/rvmtranslator70_ifc.htmlhttp://www.fometaux.com/eryar/comments/216214.htmlhttp://www.fometaux.com/eryar/archive/2019/01/19/rvmtranslator70_ifc.html#Feedback0http://www.fometaux.com/eryar/comments/commentRss/216214.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216214.htmlRvmTranslator7.0-IFC

eryar@163.com

 

RvmTranslator can translate the RVM file exported by AVEVA Plant(PDMS)/AVEVA Marine to STEP, IGES, STL, DXF, 3D PDF, OBJ, 3DXML, IFC,.etc. So it can be used for exchanging model data between other CAD software, such as Autodesk AutoCAD, Plant3d, 3ds Max, CATIA, Solidworks, Pro/E, Unity3d, .etc.

I am pleased to announce a new release of RvmTranslator7.0.

RvmTranslatoer7.0 is a major release, which includes the following new features: translate PDMS rvm to IFC file.

RvmTranslator可以将AVEVA PDMS/Plant/Marine中导出的RVM文件进行可视化,以及将RVM转换成常见的三维文件格式。如STEPIGESSTLDXF, OBJ, 3DPDF, 3DXML, IFC等,便于与其他CAD系统进行数据交换,如Autodesk AutoCAD, Plant3d, 3ds Max, CATIA, Solidworks, Pro/E, Unity3d, Bentley等。

RvmTranslator7.0增加了一个新的文件转换IFCIFC目前是国际通用的BIM标准,现在很多BIM软件都采用其作为数据交换的标准。为了使PDMS中的模型可以导入BIM软件,开发了此功能。程序转换了PDMS中几何模型及树形结构。 

 

 

IFC(IndustryFoundationClasses)

 IFC是由国际协同工作联盟IAI(InternationalAllianceForInteroperability)应用面向对象技术所建立的信息标准。IAI的发展起源于19948月,由美国12家公司以AutoCAD13ARX系统为基础,研究不同应用软件在协同工作的可能性,结果发觉不但可行更有可观的经济效益。于1995年克服了核心的问题后,发表了简称IFC的信息交换格式,199510月,他们在北美成立IAI组织。并发现这已是全球工业的问题,随后他们将此思想推广到其他国家,很快的其他国家也相继成立了IAI分部。并在1996年于伦敦召开了第一次的IAI国际会议。目前成员涵盖24个国家及8个附属或注册的团体,如澳洲、法国、德国、日本、韩国、北欧、新加坡及英国等,其组成单位共计131个,包含建筑业主、承包商、政府官员、学术单位、资产管理、软件厂商、建设公司等。

IAI主要目标为提供AECFM厂商,获得相同单一建筑信息的沟通模型(SingleBuildingInformationModel,BIM)IAI认为BIM能有效减少成本及提高效率,故称为buildingSMART(以聪明的方式建筑)IAI希望把所有的建筑信息透过一套标准将其整合在一起,像是把门、墙等实际对象以及一些空间、结构过程等抽象概念以电子信息方式有系统的呈现出来。这些信息让各种不同软件的间可以互相传递与分享,例如美语是国际间的共同语言一般,IFC便是一种由共同语言,在建筑生命周期中扮演共享智能对象的角色。

IFC是一种开放性质信息格式,作为信息的交换以及共享使用,在技术上采用BIM概念及面向对象等来进行信息内容的处理,目的在于让在此领域内BIM系统的各种不同应用软件,因IFC信息格式的标准化及一致性,而有一个信息交换的标准格式可以遵循,使不同软体间的信息可相互交换,毋须再各自建立信息,避免信息传递时发生错漏造成财务和时间上的损失,国际间各大软件公司(例AutodeskBentleyGraphisoftTEKLANECFujitsu等),都已陆续开发以BIM概念结合IFC标准的软件。 

Download RvmTrnaslator

https://yun.baidu.com/pcloud/album/info?uk=3808749571&album_id=3634993082542187183



eryar 2019-01-19 14:11 发表评论
]]>
12bet++博客-首页原创精华区http://www.fometaux.com/eryar/archive/2019/01/17/std_string_crash.htmleryareryarThu, 17 Jan 2019 13:50:00 GMThttp://www.fometaux.com/eryar/archive/2019/01/17/std_string_crash.htmlhttp://www.fometaux.com/eryar/comments/216209.htmlhttp://www.fometaux.com/eryar/archive/2019/01/17/std_string_crash.html#Feedback0http://www.fometaux.com/eryar/comments/commentRss/216209.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216209.html今天在Qt中开发程序时,遇到一个QString::toStdString()的内存问题,用法如下:

void test(const QString& theFileName)
{
    std::string aFileName = theFileName.toStdString();
    std::ofstream aFile(aFileName);
    aFile << aFileName;
}

在函数还没执行完就崩溃了,跟踪发现是std::string的问题。最后发现是因为引用的库的Runtime Library不同导致的,一个是MDd,一个是MTd,后来改成一致即可。



eryar 2019-01-17 21:50 发表评论
]]>
12bet++博客-首页原创精华区http://www.fometaux.com/eryar/archive/2019/01/15/consolas.htmleryareryarTue, 15 Jan 2019 08:53:00 GMThttp://www.fometaux.com/eryar/archive/2019/01/15/consolas.htmlhttp://www.fometaux.com/eryar/comments/216204.htmlhttp://www.fometaux.com/eryar/archive/2019/01/15/consolas.html#Feedback0http://www.fometaux.com/eryar/comments/commentRss/216204.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216204.html

概述

这套字型使用了微软的ClearType 字型平滑技术,并随同Windows Vista、Office 2007及Microsoft Visual Studio中发行,或可在微软的网站下载。在Windows Vista的6套新字型中,Consolas近似于前版Windows中 的2款内建字型:Lucida Console与Courier New,主要为程序代码的显示字型而设计的,特别之处是它的“0”字加入了一斜撇,以方便与字母“O”分辨。 在Consolas之前,程序代码的显示字型大多为Courier New或其他等宽字型,字型的柔边(反锯齿)效果则依个人喜好选择开启或关闭,然而Consolas是专为柔边效果而设计的字型,特别是为了搭配微软的ClearType技术,如果不开启ClearType,Consolas的显示效果会打大折扣。另外,ClearType技术还需要搭配液晶显示器才会有最佳表现。

应用

传统上,程式编写员在Windows环境底下,一般都会使用Courier New或其他近似的等宽字体来显示程序代码。通常用来编写程序代码的程序都会让编程员选择用来显示程序代码的字体。由于Courier New的字型比较肥大,使每个画面或页面所能显示的程序代码大为减少。Consolas除了能够在较少的空间显示更多的内容,它的清晰字型亦使编程员能够更快捷的分辨每一个文字。

这个字体用来编码很清晰,舒服,主要是数字0和字母0可以容易的区别出来,这里做个备忘,方便在编码环境中设置这个字体。

eryar 2019-01-15 16:53 发表评论
]]>
12bet++博客-首页原创精华区http://www.fometaux.com/eryar/archive/2019/01/06/brepmesh.htmleryareryarSun, 06 Jan 2019 02:49:00 GMThttp://www.fometaux.com/eryar/archive/2019/01/06/brepmesh.htmlhttp://www.fometaux.com/eryar/comments/216169.htmlhttp://www.fometaux.com/eryar/archive/2019/01/06/brepmesh.html#Feedback0http://www.fometaux.com/eryar/comments/commentRss/216169.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216169.html

Mesh BRep Shapes

eryar@163.com

Abstract. 当对OpenCASCADEBRep表示法的数据结构有了一定的理解后,建议可以自己实现一个显示数据生成的功能,即网格剖分功能。

Key Words. BRep, Mesh, Triangulation

1. Introduction

OpenCASCADE中网格剖分功能是很重要的一个模块,他可用于生成模型的可视化数据,还可用于HLR消隐,对于离散求交算法也是基于网格数据。OpenCASCADE开源版本中的模块TKMesh可以用来生成网格的显示数据,主要的类为BRepMesh_IncrementalMesh

在使用BRepMesh_IncrementalMesh的过程中发现其剖分精度高,且精度不便于控制。如对一个球进行网格剖分,想得到一个粗糙的效果,即一个多边形,使用BRepMesh_IncrementalMesh是不容易得到的。

如上图所示为同一个球的不同的剖分精度得到的模型。为了能精确控制网格剖分精度,以便后期使用LOD等优化算法,自己实现一个网格剖分功能。

网格剖分的主要思路就是遍历每个TopoDS_FaceTopoDS_Wire,根据Wire找到边界或面上的孔洞。将Wire对应到二维参数空间,并对二维参数空间中的边界先进行一次三角网格剖分。对于平面来说,只需要这一步就可以满足可视化的要求。对于其他曲面来说,就需要在二维参数空间中额外插入一些点,以使最终生成的网格满足剖分精度要求。最后将二维参数空间的三角剖分映射到三维空间。

2. Mesh Boundary Region

因为使用BRepBuilderAPI_MakeFace可以通过Add(TopoDS_Wire)来添加面上的开孔,所以一个TopoDS_Face会有大于1个的TopoDS_Wire。找出外边界和内孔Wire后可进行一次三角剖分,如下图所示:

 

如上图所示,对于平面而言,直接对边界及内孔进行一次三角剖分即可以得到满意的网格数据。对于曲面而言,这显然是不满足精度要求的。

 

如上图所示为球面的第一次对边界进行三角剖分得到的效果。因为在一个参数上的边是退化Degenerated边,所以退化边的参数空间上没有均分。将参数空间的三角剖分映射到三维空间后,得到的是一条线,其实是两个非退化边。

 

3. Deflection Control

对于曲面来说,如果直对边界进行一次三角剖分,是达不到精度要求。为了使曲面网格剖分效果更好,就需要对按边界剖分后的网格进行插入点继续剖分。对于上面球面的参数空间区域,根据精度要求插入点剖分后的结果如下图所示:

 

得到的三维效果如下图所示:

 

4. Demo

下面给出几个自己实现网格剖分的结果与OpenCASCADETKMesh作个对比:

 

上图为自己实现网格剖分算法对椭球面的网格剖分结果

 

上图为TKMesh网格剖分算法对椭球面的网格剖分结果

 

上图为自己实现网格剖分算法对椭圆环面的网格剖分结果

 

上图为TKMesh网格剖分算法对椭圆环面的网格剖分结果

通过上面的对比可以发现,在大致相同的显示效果情况下,OpenCASCADE产生了更多的顶点和三角形数据。自己实现的网格剖分产生的网格质量相对可控且性能高。 

5. Conclusion

OpenCASCADE中开源的网格剖分库TKMesh可以实现模型的可视化数据生成功能,但是对于网格剖分的精度可控性差。为了对模型的网格精度进行更好地控制,自己实现一套网格剖分功能,且性能要优于TKMesh。在程序的编写过程中,可以加深BREP数据结构中一些概念的理解。有兴趣的读者在熟悉BREP数据结构后,也可以尝试下网格剖分功能的实现。


为了方便大家在移动端也能看到我的博文和讨论交流,现已注册微信公众号,欢迎大家扫描下方二维码关注。
Shing Liu(eryar@163.com)


eryar 2019-01-06 10:49 发表评论
]]>
12bet++博客-首页原创精华区http://www.fometaux.com/eryar/archive/2018/12/31/incementalmesh.htmleryareryarMon, 31 Dec 2018 14:45:00 GMThttp://www.fometaux.com/eryar/archive/2018/12/31/incementalmesh.htmlhttp://www.fometaux.com/eryar/comments/216159.htmlhttp://www.fometaux.com/eryar/archive/2018/12/31/incementalmesh.html#Feedback0http://www.fometaux.com/eryar/comments/commentRss/216159.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216159.htmlOpenCASCADE Incremental Mesh

eryar@163.com

 

Abstract. OpenCASCADE IncrementalMesh is used to build the mesh of a shape with respect of their correctly triangulated parts. The blog focus on the deflection control of the algorithm.

 

Key Words. Mesh, Visualization

 

1. Introduction

Mesh是生成三维模型显示数据的关键算法。OpenCASCADETKMesh提供了网格剖分算法,用于生成BREP体的显示数据。原来的一些文章对网格剖分的算法及其用法进行过说明,本文主要对网格剖分的核心部分进行深入挖掘,理解其剖分精度控制原理。感兴趣的读者可以结合源码,学习其实现方法。当理解其算法原理后,也可以自己实现一套结合实际需求的高性能网格剖分库。

网格剖分的主要流程如下:

 

遍历TopoDS_ShapeTopoDS_Face,对于每个TopoDS_Face,遍历其TopoDS_Wire,对于每个TopoDS_Wire遍历其TopoDS_Edge,在根据EdgeFace得到PCurve。因为TopoDS_Wire是闭合的,所以WirePCurve是在参数空间闭合区域。对PCurve围成的参数区域进行三角剖分,将三角剖分的结果映射到三维空间,最终生成每个Face的网格剖分。这个流程很好理解,但是如何对网格剖分的质量进行控制呢?即用相对少的三角网格来更好地表示三维模型呢?

 

2. Mesh Deflection Control

OpenCASCADEBRep体进行三角剖分网格化的类是BRepMesh_IncrementalMesh,此类有两个主要的选项来控制三角网格化:线性偏差Linear deflection和角度偏差Angular deflection

三角网格剖分第一步是将所有的边Edge进行离散,即根据一定的精度生成多段线;

 

线性偏差限制离散的多段线与曲线之间的距离;角度偏差限制每段线段端部切线的夹角。

第二步是对面进行三角剖分。线性偏差也限制离散的三角形中点到曲线的距离。

 

应用程序应该提供适当的偏差参数以达到生成满意的三角网格。角度偏差Angular deflection比较简单且允许使用一个默认值(12~20度)。线性偏差Linear deflection有绝对的含义,需要由程序来给定正确的值。给一个很小的线性偏差值会导致网格剖分过密,消耗大量内存及影响显示效率;但是值太大得到的网格效果就是显示失真。所以对于LOD的网格来说,需要根据模型尺寸来设置相应的线性偏差值。

上面对网格剖分的参数设置进行了介绍,下面对网格剖分的实现原理进行说明。因为曲线曲面是三维的,而对曲面进行剖分的底层三角剖功能是个二维三角剖分库,所以网格剖分总的思路是对曲线在二维参数空间进行剖分,将参数空间剖分的结果通过曲面参数方程映射回到三维空间。通过对pcurve围成的参数空间闭合区域进行二维三角剖分,即可对三维曲面进行剖分。类BRepMesh_FastDiscretFace是对每个TopoDS_Face进行离散,其中函数control()是用来控制生成网格的质量的。

 

最多迭代次数是11次。在每一次迭代过程中,检查生成的所有三角形在参数空间中心点处与曲面的距离是否满足线性偏差,如果不满足,则插入新的点以便下次迭代。

 

从上面的代码可以看出其实现思路与其类名Incremental还是很贴切的,即增量法。

 

 

3. Conclusion

OpenCASCADE的网格剖分中网格质量控制是相对重要的核心功能。在理解其原理后,可以自己实现一个更清晰的网格剖分库。

 

2018年就过结束了,这一年收获颇丰,其中最大的收获就是有了自己的小宝宝。

 

分享创建价值。虽然OpenCASCADE不是完美的,但是她是目前世界上唯一一款功能相对完善的开放的几何造型库。OpenCASCADE的开放分享,给她带来生机。当他人因为我的blog的分享的文章或代码联系我时,他们的一声感谢,我都会觉得很高兴。

 

2019年马上就要到来,希望大家在新的一年里,创造、创新,突破自我,更上一层楼!


为了方便大家在移动端也能看到我的博文和讨论交流,现已注册微信公众号,欢迎大家扫描下方二维码关注。
Shing Liu(eryar@163.com)


eryar 2018-12-31 22:45 发表评论
]]>
12bet++博客-首页原创精华区http://www.fometaux.com/eryar/archive/2018/12/09/rvm2catia.htmleryareryarSun, 09 Dec 2018 08:35:00 GMThttp://www.fometaux.com/eryar/archive/2018/12/09/rvm2catia.htmlhttp://www.fometaux.com/eryar/comments/216114.htmlhttp://www.fometaux.com/eryar/archive/2018/12/09/rvm2catia.html#Feedback0http://www.fometaux.com/eryar/comments/commentRss/216114.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216114.htmlRvmTranslator6.6 - RVM to CATIA

eryar@163.com

 

RvmTranslator can translate the RVM file exported by AVEVA Plant(PDMS)/AVEVA Marine to STEP, IGES, STL, DXF, 3D PDF, OBJ, 3DXML, .etc. So it can be used for exchanging model data between other CAD software, such as Autodesk AutoCAD, Plant3d, 3ds Max, CATIA, Solidworks, Pro/E, Unity3d, .etc.

I am pleased to announce a new release of RvmTranslator6.6.

 

RvmTranslatoer6.6 is a minor release, which includes the following new features:

 

RvmTranslator可以将AVEVA PDMS/Plant/Marine中导出的RVM文件进行可视化,以及将RVM转换成常见的三维文件格式。如STEPIGESSTLDXF, OBJ, 3DPDF, 3DXML等,便于与其他CAD系统进行数据交换,如Autodesk AutoCAD, Plant3d, 3ds Max, CATIA, Solidworks, Pro/E, Unity3d, Bentley等。

 

RvmTranslator6.6主要增加导出带设计结构的STEP文件,此文件在导入CATIA后的结构与模型与PDMS中一致,如下图所示:

 

Download RvmTranslator

https://yun.baidu.com/pcloud/album/info?uk=3808749571&album_id=3634993082542187183

  



eryar 2018-12-09 16:35 发表评论
]]>
12bet++博客-首页原创精华区http://www.fometaux.com/sunicdavy/archive/2018/11/30/216103.html战魂小筑战魂小筑Fri, 30 Nov 2018 10:01:00 GMThttp://www.fometaux.com/sunicdavy/archive/2018/11/30/216103.htmlhttp://www.fometaux.com/sunicdavy/comments/216103.htmlhttp://www.fometaux.com/sunicdavy/archive/2018/11/30/216103.html#Feedback0http://www.fometaux.com/sunicdavy/comments/commentRss/216103.htmlhttp://www.fometaux.com/sunicdavy/services/trackbacks/216103.html近期在游戏demo中试验ECS, 深入研究Unity官方的ECS框架和第三方Entitas框架, 分享下使用ECS的心得。


Unity在2018版中加入了ECS系统, 但处于小白鼠阶段。默认不是Unity的一部分, 需要手动下载代码并导入Packages(新特性)。官方提供海豚例子, 但除此之外例子和资料非常少。所以完全无法,也不敢在demo中贸然引入这种系统,所以放弃官方ECS系统。


第三方的Entitas(https://github.com/sschmid/Entitas-CSharp)ECS框架从2015年就开始在各地演讲中介绍。整体框架基于代码生成, 能解决一部分的代码爆炸问题, 而且性能也要好一些。例子,介绍非常丰富,例子虽然基于不同版本的Entitas,特性支持和最新版差不太多, 只是写法有细微差异, 对于理解来说无碍。


经过1~2天的改造, 终于将demo从传统Unity写法改造为ECS标准写法,新增了46个文件, 而传统逻辑一共只有16个文件,大概对比下ECS的特点和差异。


Entitas的ECS系统

1. 本来在一个对象中添加一个类字段的过程,ECS需要添加一个类代表Component,并且代码生成。

这个字段一般用于描述对象的资源,处理显示的GameObject, 表示对象的类型等。


2. 本来一个对象的业务逻辑处理过程直接用方法解决的, ECS需要新加一个System,而操作对象需要使用Filter或Group查询获得。


3. 一系列的操作, 需要拆分为多个System和Component拆分处理。如果System顺序不对, 会造成一些诡异的bug。


4. Component不仅仅是Model承载体, 也可以是参数的数据结构。参数Component通过Entity传递到System处理。 例如: 通过ECS创建一个方块的过程,使用CreateTileComponent,包含创建Tile的位置, 创建Entity并添加CreateTileComponent, 在CreateTileSystem中处理就创建了Tile,处理完成时, 需要将传入的Entity.Destroy掉。


6. Entity上修改Component的过程, 会触发事件。修改的过程需要使用RelaceXXX,XXX表示组件名。组件可以频繁修改, 不用担心添加和删除组件过程的性能, Entitas底层处理性能只相当于指针赋值的性能。


ECS像什么?

1. ECS中的System类似触发器系统(Event-Condition-Action),其中,Event对应Entitas的GetTrigger+Collector,表示触发事件。Condition对应Filter表示在事件来源对象中找到需要的对象。 Action对应Execute,表示实际的操作。

2. ECS中的Component类似不用lua扩展的Redis或者不用存储过程的MySQL, 纯粹纯数据, 而不能对数据有任何封装操作。没有lua和存储过程支持的db写起来还是比较费劲的,但ECS就是那么的纯。


3. ECS中的Entity很尴尬,因为Component是按类别连续存储的以保证性能。 逻辑又需要Entity组合成逻辑需要的复合对象。 两边都要照顾,所以这种设计就让代码量巨增,可读性下降。



ECS企图用一套框架灭掉设计模式

1. 单件(Singleton)在Entitas用Unique标签标记Component, 在Context中就是唯一的, 其实也就是Singleton。


2. ECS干掉了传统的工厂模式,底层统一对对象(Entity)和属性(Component)统一管理。需要按Component中的值找回Entity时, 可以使用EntityIndex。


3. Entity携带不同的组件时,整个创建和销毁过程被记录并恢复,其实就是Command模式


ECS适合做UI框架(类似MVVM,MVC,MVP)么?

ECS不是专用的UI框架,但是可以对不同系统和数据间解耦。传统代码中数据修改后的Callback,ECS也可以用Listener做, 但Listener因为能保存数据, 就需要用Component保存。 所以你需要面对的是,一个Button,响应创建一个参数用的Component和System,还要为数据改变写一套ListenComponent和Listener处理的System,酸爽吧?


Minecraft适合ECS来做么?

可以,性能应该能提升不少,但是代码会更繁琐,特别像Java这种啰嗦语言配上ECS这种啰嗦框架,估计代码量翻翻还是很轻松的。MC属于特殊类型的游戏,适合特殊领域特别优化,也就是专门为方块做出特别的设计来做优化。ECS属于通用框架,即便性能OK,但是代码未必能有良好的可读性。


体量小的游戏适合用ECS来做么?

可以,但不建议。特别是只有几个人维护的工程,贸然上ECS系统,会让系统变的极为复杂。当然你会说,如果开发到后期,传统开发模式会导致代码会乱,ECS会好些吧。掌握ECS也不是一天两天的事情,不熟悉ECS的程序员设计出来的系统获得的优势可能还不如用传统设计方法好呢。

架构解决的是人的问题, 人都有问题,用什么框架都没办法。


到底什么项目适合用ECS?

1. 大量的小个体不断的生成和销毁以及显示,例如: 攻城战中,要体现每个角色的移动,战斗。

2. 多于5个人编写核心战斗逻辑。互相协作和模块切分,需要一个大家都能信服的框架,ECS可以选择。


P.S.

不要造ECS的轮子!

很多同学看了ECS基本原理,在没有深入使用过任何ECS系统时马上操刀造轮子。ECS系统确实看起来简单。实际造下来你会发现,性能非常糟糕以及不知道一些逻辑如何用ECS来解决。


总结:

1. ECS确实为性能而生,没有并发加持性能的ECS都是耍流氓,要快就要快到极致。

2. Unity中,ECS并发能扩展CPU的利用率,但是GPU的性能依然还是DrawCall优化那一套,别期望ECS会颠覆Unity,性能也不会快到飞起,关键还是要看具体的项目和人。

3. ECS是万能框架,但不全能。传统架构和设计思想也不是一无是处,熟啥用啥,怎么快怎么来!

无耻的广告链接,请各位支持

《Go语言从入门到进阶实战(视频教学版)》(徐波)【摘要 书评 试读】- 京东图书



战魂小筑 2018-11-30 18:01 发表评论
]]>
12bet++博客-首页原创精华区http://www.fometaux.com/eryar/archive/2018/11/26/pipecad_pipestd2.htmleryareryarMon, 26 Nov 2018 14:08:00 GMThttp://www.fometaux.com/eryar/archive/2018/11/26/pipecad_pipestd2.htmlhttp://www.fometaux.com/eryar/comments/216082.htmlhttp://www.fometaux.com/eryar/archive/2018/11/26/pipecad_pipestd2.html#Feedback0http://www.fometaux.com/eryar/comments/commentRss/216082.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216082.htmlPipeCAD之管道标准库PipeStd(2)

eryar@163.com

 

Key Words. PipeCAD, PipeStd, 管道设计软件,管件库

 

1. Introduction

管道标准部件库程序PipeStd的主要用法与PDMSParagon模块类似,主要也是采用参数化的方式来表示管件。每种类型的管件Category包含三个集合:参数集Parameter Set、点集Point Set和形集Geometry Set。本文主要来介绍如何创建一个参数化的标准管件。如下图所示为一带颈对焊法兰Weld Neck Flange的参数化管件:

1 法兰参数化模型

 

2. Category

类型Category是一类管件数据的集合,如90度弯头、闸阀等。创建类型的时候会自动创建其三个必须的集合:参数集、点集和形集,如下图所示:

2 创建Category

 

3. Parameter Set

参数集合Parameter Set用来定义该种类型的管件需要输入哪些参数,即管件标准中定义的数据。

3 带颈对焊法兰尺寸数据表格

上图来于:http://www.wermac.org/flanges/dimensions_welding-neck-flanges_asme-b16-5.html

ASME B16.5标准中定义的尺寸数据。其中每个尺寸,如AD等都可以看作为这里参数集中的一个参数。

4 参数集定义

每一个参数可以对应一个尺寸,在上图4所示的左边定义好参数集后,在右边的列表中可以为每个管径的管件输入相应的尺寸数据。

 

4. Point Set

点集Point Set主要用来定义管件的连接点或一些辅助定义位点。如下图所示:

5 点集定义

每个点需要定义一个编号,对于点的编号也有约定。如对于普通的管件,编号12表示管件的两端。对于三通其支管要用编号3等。这些约定是为了后面生成轴测图的要求。点的位置PXPYPZ及方向DXDYDZ都是可以用前面定义的参数表示。如某个值要用参数1,就写成$PA1。或者还可以用数学表达式,如:$PA1 + 2 * cos($PA2)等。

 

5. Geometry Set

形集Geometry Set主要来定义管件的几何形状。使用一些基本形状,如长方体,圆柱体、圆台体等来构造管件外形。每种基本体都是用参数表示,如下图所示为圆柱体的参数:

6 参数化基本体

对于圆柱体,需要确定其轴向PAXI,高度PHEI及直径(PDIA)等。对于数据值型的参数都是可以使用数学表达式来表示。这样可以使不同的管径对应不同的形状。

7 DN10DN80的法兰

 

6. Conclusion

综上所述,通过定义参数集、点集和形集来实现标准管件的参数化。通过统一的方式,对任意标准管件进行参数化处理。这样程序操作方式统一,使用简单。对于一些特殊管件,也可以通过这种方式来建模,灵活自由。不像有的软件是将管件类型通过硬编码的方式写在程序中,如果要增加程序中没有的管件类型,只有改程序的不便。

管件标准库程序PipeStd的管件定义基本成型,下一步实现管道等级Piping Specification功能。管道等级的作用主要用于筛选过滤,方便材料控制。考虑到后面生成ISO轴测图的功能,因为每种管件都会有SKEY,而这些SKEY已经分好类型了。所以管道等级的处理也尽量简化,直接根据SKEY来分大的类型及小类,如法兰的大类为Flange,小类里面根据SKEY来筛选,FLWNFLSO等。



eryar 2018-11-26 22:08 发表评论
]]>
12bet++博客-首页原创精华区http://www.fometaux.com/eryar/archive/2018/11/25/pipecad_pipestd.htmleryareryarSun, 25 Nov 2018 14:27:00 GMThttp://www.fometaux.com/eryar/archive/2018/11/25/pipecad_pipestd.htmlhttp://www.fometaux.com/eryar/comments/216080.htmlhttp://www.fometaux.com/eryar/archive/2018/11/25/pipecad_pipestd.html#Feedback2http://www.fometaux.com/eryar/comments/commentRss/216080.htmlhttp://www.fometaux.com/eryar/services/trackbacks/216080.htmlPipeCAD之管道标准库PipeStd

eryar@163.com

 

Key Words. PipeCAD, PipeStd, 管道设计软件,管件库

 

1. Introduction

前不久,两位老友徐总和毛总在上海浦东金桥的一茶一坐小聚,回想到几年前我们仨在那里聚会的情景。他们分别在A公司和I公司,我当时在做SPD的开发。在一起聊的话题也是关于设计软件的,当时也有一些思想碰撞的火花,想着做出一个什么软件,成为CEO,迎娶白富美,走上人生顶峰。结果几年过去,当年吹过的牛B,没有实现。其中有一个就是做一个管道标准库程序,方便管件的定义。定义好之后,可以导入AVEVA PDMSIntergraph SmartPlant

看着国内工厂/船舶设计软件如PDSOFTUESOFTPDMAX还有船舶设计软件SPD都不温不火,而且国外的AVEVA PDMS/Marine, Intergraph SmartPlant已经占据了国内市场,有时我也在想开发一个原来梦想的管道设计软件的意义和价值。

AVEVA PDMS/Marine我觉得是简单易用的软件,一致的操作方式,基于CSG的造型算法,还提供了二次开发语言PMLC#来对程序进行灵活扩展。基于文件的层次数据库,并提供了数据库的增、删、改及数据回退功能,可以用于大中型项目设计。由于很容易得到和谐版,所以用户很多。

Intergraph SmartPlant是美国的一款软件,由于其价格昂贵,在国内的用户都是不差钱的单位。由于没有使用过,所以对其不便于评价。但是由于国内外有业主会指定这款软件,所以国际上用户也很多。

再看国内的工厂/船舶设计系统PDSOFTUESOFTPDMAXSPD等,都是基于AutoCAD开发的。早期基于AutoCAD,因为AutoCAD比较普及,所以会吸引一些会AutoCAD的用户。但是基于AutoCAD开发程序弊端之一是AutoCAD版本升级,程序要想适应AutoCAD,也必须跟着升级。弊端二是AutoCAD的提供的开发库ObjectARX, .NET等都不是开源的,如果是那些库出现BUG或是不支持的功能,要么去和Autodesk公司沟通,要么只有绕道了。有的使用ObjectARX12bet库开发,虽然程序性能好,还在使用MFCGUI,但是开发效率低。弊端之三是有些功能与AutoCAD的功能纠缠不清,用户体验不太友好。

为了实现几年前的梦想,我决定开发一个管道设计软件PipeCAD

 

2. PipeCAD

PipeCAD的一个定位就是适用于中小型项目的管道设计软件。因为大型项目的用户一般都是用PDMSSmartPlant

使用开源库OpenCASCADE来进行三维图形开发,使用开源库Qt来进行GUI开发,提高程序开发效率。因为使用开源技术,出现BUG可以从根据上解决。不依赖其他闭源的软件,不会有其他软件升级带来的影响。

业务核心功能都自己实现,程序自主可控,方便增加新功能。

 

PipeCAD的初步开发以下功能模块:

管件库等级库管理程序PipeStd

三维设计模块PipeCAD

管道轴测图出图模块IsoAlgo

 

3. PipeStd

PipeStd主要用来对管件标准数据、管道等级等数据进行管理。有了管件数据,就可以对管件进行三维显示。有了管道等级,就可以在三维设计模块来使用管件来对管道进行建模。PipeStd的使用方式与PDMSParagon模块类似,通过参数化的方式来定义管件。目前程序的主要功能已经实现,程序界面如下图所示:

其中还设想的功能有:

导入、导出PDMS中的管件及管道等级Piping Specification数据;

导入、导出SmartPlant中的管件及管道等级Piping Specification数据;

 

4. Conclusion

两位友人的提醒,决定开发一个三维管道设计软件PipeCAD。为中小型项目的管道设计提供了一个选择。核心功能都自己实现,程序自主可控。不依赖其他软件,如AutoCAD,提供良好的用户体验。

 



eryar 2018-11-25 22:27 发表评论
]]>