UG二次开发——遍历对象的方法(Python)

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)的方法去获取对象,再获取对象的属性和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值