UG对python二次开发的帮助文档,好像不是很用心,里面缺失很多内容,大家在学习的时候建议参考.NET的NXOpen内容。并且网上也有很多.NET的开发例子,python中很多用法和.NET的用法类似。
通常在开发的过程中,需要遍历模型中的所有元素,找到我们所需要的对象,本文介绍两种方法,一种是在模型model模块,即建模模块中,一种是在CAE模块中的方法
建模模块中,帮助文档有介绍,不多做介绍,直接从文档中复制过来的
def processBodyEdges(bodyObject):
for edgeObject in bodyObject.GetEdges():
processEdge(edgeObject)
def processBodyFaces(bodyObject):
for faceObject in bodyObject.GetFaces():
processFace(faceObject)
def processPart(partObject):
for bodyObject in partObject.Bodies:
processBodyFaces(bodyObject)
processBodyEdges(bodyObject)
def processFace(faceObject):
for edgeObject in faceObject.GetEdges():
processEdge(edgeObject)
bodyOfFace = faceObject.GetBody()
def processEdge(edgeObject):
for faceObject in edgeObject.GetFaces():
processEdgeFace(faceObject)
bodyOfEdge = edgeObject.GetBody()
(startpoint,endpoint)=edgeObject.GetVertices()#获取点坐标
从上也很容易发现,模型的构成很清晰,几何元素点(vertice),线(edge),面(face),体(body),一级一级的展开
大家知道,UG这种3D建模软件都是基于特征建模,每个特征不仅仅包含了几何元素,还有其它关联信息,获取part中所有特征的方法
theSession = NXOpen.Session.GetSession()
workPart = theSession.Parts.Work
displayPart = theSession.Parts.Display
features=workPart.Features
allfeatures=features.GetFeatures()#返回所有特征的列表
以上是建模模块或者是prt文件的几何元素的遍历方法,层次结构非常清楚,但是对于CAE模块(仿真模块)中,对几何元素的层次结构查询方式并没有part类似的方法。我查阅了帮助文档,也没有类似的方法。好在网上论坛有类似的问题,但是针对.NET的方法,里面所用的函数类,在nxopen Python中都可以找到,功夫不负有心人,经过好大一番周折,找到问题突破口,代码如下
theSession = NXOpen.Session.GetSession()
myUfsession=NXOpen.UF.UFSession.GetUFSession()
mylw=theSession.ListingWindow
NULL_TAG=0
objTag=0
mylw.Open()
objTag=myUfsession.Obj.CycleObjsInPart(workFemPart.Tag,NXOpen.UF.UFConstants.UF_caegeom_type,objTag)
while objTag != NULL_TAG:
(objtype,objsubtype)=myUfsession.Obj.AskTypeAndSubtype(objTag)
if objsubtype == NXOpen.UF.UFConstants.UF_caegeom_face_subtype:
tmp=NXOpen.TaggedObjectManager.GetTaggedObject(objTag)
mylw.WriteFullline('Tagid is %d,JId is %s,color is %s'%(tmp.Tag,tmp.JournalIdentifier,tmp.Color))
objTag=myUfsession.Obj.CycleObjsInPart(workFemPart.Tag,NXOpen.UF.UFConstants.UF_caegeom_type,objTag)
又是用到UF类,这方面的介绍使用方法,网上真心不好找。我用的UG10.0版本,nxopen Python帮助文档里面根本就没有NXOpen.TaggedObjectManager,UFConstants的介绍,我是参照.NET的开发帮助手册,捣鼓出来了。这种方法的具体细节,如何进行体(body),面(face),线(edge),vertex(点)按逐级展开的方法,还没有仔细的研究,能不能逐级遍历还不知道,等后续更新吧。
另外,NXopen python中每个对象都有两个ID,用于查找对象,获取对象,一个是JournalIdentifier,一个是Tag。就是说只要知道对象的这两个ID的任何一个,可分别用FindObject(JournalIdentifier),NXOpen.TaggedObjectManager.GetTaggedObject(Tag)的方法去获取对象,再获取对象的属性和方法。