Python调用Flux第四讲:操纵坐标系
本帖最后由 dnawujun 于 2015-2-3 17:22 编辑上次讲到如何操纵几何参数http://bbs.simol.cn/thread-137181-1-1.html
今天与大家分享下如何用Python操纵FluxServer去新建、修改、获取以及删除坐标系
所有这些操作都是通过调用
H_ERROR FMP_executeJythonCommand (CEDINT32 serverUid,char* commandline)
H_ERROR FMP_getJythonStringArrayValue (CEDINT32 serverUid,TCHAR* jythonVarName,CEDINT32* numberValues,TCHAR*** values)
这个两个函数来实现
一. 新建坐标系
我们在Flux中用命令行建立几何参数是用这样的命令:
CoordSysCartesian(name='CoordSys_1',
parentCoordSys=Local(coordSys=CoordSys['XY1']),
origin=['0', '0'],
rotationAngles=RotationAngles(angleZ='0'))
来建立局部卡氏坐标系
CoordSysCartesian(name='COORDSYS_2',
parentCoordSys=GlobalUnits(lengthUnit=LengthUnit['MILLIMETER'],
angleUnit=AngleUnit['DEGREE']),
origin=['0', '0'],
rotationAngles=RotationAngles(angleZ='0'))
来建立全局卡氏坐标系
CoordSysCylindrical及CoordSysSpherical用来建立柱坐标和球坐标,参数和CoordSysCartesian一样的
二. 修改坐标系(以卡氏坐标系为例)
修改名称,commandline参数为:
CoordSysCartesian [' CoordSys_1'].name=' CS_ROTOR'
修改注释,commandline参数为:
CoordSysCartesian [' CoordSys_1'].name=' CoordSys_1 : Test'
或者
CoordSysCartesian [' CoordSys _1'].name=' CoordSys _1'
将注释清空
修改其他的参数类似,详见附件代码
三. 获取坐标系(以卡氏坐标系为例)
注意以下代码节选自附件,并做了一定的修改以便讲述,无法单独运行,完整代码请参见附件
3.1 获取名称及注释
command = "temp=CoordSysCartesian ['CoordSys_1'].name"
self._project.executeJythonCommand(command)
nameWithComment = self._project.getJythonStringArrayValue('temp')
name = map(lambda x: x.split(":").strip() if ":" in x else x, nameWithComment)
comment = map(lambda x: x.split(":").strip() if ":" in x else "", nameWithComment)
3.2 获取origin
command = "temp=CoordSysCartesian ['CoordSys_1'].name"
self._project.executeJythonCommand(command)
origin = self._project.getJythonStringArrayValue("temp")
3.3 获取rotationAngles
command = "temp=.rotationAngles.angleX," \
"CoordSysCartesian ['CoordSys_1'].rotationAngles.angleY," \
"CoordSysCartesian ['CoordSys_1'].rotationAngles.angleZ]" \
self._project.executeJythonCommand(command)
rotationAngles = self._project.getJythonStringArrayValue("temp")
3.4 获取parentCoordSys
这个放到最后讲,因为这个操作稍微复杂点
从前面建立坐标系的命令我们可知,parentCoordSys有两种可能:
GlobalUnits或者Local,我们可以在Flux中Hack一下这两个东西以得到更多的信息。
以下以Local为例讲述,GlobalUnits参见附件代码
在Flux中新建一个局部坐标系,然后在命令行输入
CoordSysCartesian['CoordSys_1'].parentCoordSys,得到的输出是Local;
命令行输入Local.__fields,得到输出是coordSys;
然后输入Local.coordSys,得到输出是CoordSysCartesian,这就是XY1那个初始的坐标系
我们可以通过CoordSysCartesian .name来得到其名称
但是,如果存盘后退出然后再打开Project,再次输入Local.coordSys,得到的将是'XY1 : Cartesian system of coordinates.'
这是个字符串对象,是没有name属性的,只能通过分解字符串的方法来得到名称
因此需要首先判断Local.coordSys的对象类型,进而执行相应的操作
command="temp=CoordSysCartesian ['CoordSys_1'].parentCoordSys.coordSys.__class__.__name__"
self._project.executeJythonCommand(command)
coordSysTypeName=self._project.getJythonStringArrayValue("temp")
if coordSysTypeName=='str':
command = "temp=CoordSysCartesian ['CoordSys_1'].coordSys"
self._project.executeJythonCommand(command)
else:#coordSysTypeName=='PyOc':
command = "temp=CoordSysCartesian ['CoordSys_1'].coordSys.name"
self._project.executeJythonCommand(command)
parentCoordSysName = self._project.getJythonStringArrayValue("temp").split(":").strip()
四. 删除坐标系
删除单个, commandline参数为:
CoordSys [' CoordSys_1'].delete()
删除所有, commandline参数为:
CoordSys .delete()
再次学习,楼主强大! Thanks for sharing PyFlux learning
页:
[1]