西莫电机圈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 1354|回复: 2

[原创] Python调用Flux第四讲:操纵坐标系

[复制链接]

该用户从未签到

发表于 2015-2-3 15:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 dnawujun 于 2015-2-3 17:22 编辑

上次讲到如何操纵几何参数http://bbs.simol.cn/thread-137181-1-1.html
今天与大家分享下如何用Python操纵FluxServer去新建、修改、获取以及删除坐标系
所有这些操作都是通过调用
  1. H_ERROR FMP_executeJythonCommand (CEDINT32 serverUid,char* commandline)
  2. H_ERROR FMP_getJythonStringArrayValue (CEDINT32 serverUid,TCHAR* jythonVarName,CEDINT32* numberValues,TCHAR*** values)
复制代码

这个两个函数来实现

一.        新建坐标系

我们在Flux中用命令行建立几何参数是用这样的命令:

  1. CoordSysCartesian(name='CoordSys_1',
  2.                 parentCoordSys=Local(coordSys=CoordSys['XY1']),
  3.                 origin=['0', '0'],
  4.                 rotationAngles=RotationAngles(angleZ='0'))
复制代码

来建立局部卡氏坐标系

  1. CoordSysCartesian(name='COORDSYS_2',
  2.                 parentCoordSys=GlobalUnits(lengthUnit=LengthUnit['MILLIMETER'],
  3.                 angleUnit=AngleUnit['DEGREE']),
  4.                 origin=['0', '0'],
  5.                 rotationAngles=RotationAngles(angleZ='0'))
复制代码

来建立全局卡氏坐标系
CoordSysCylindrical及CoordSysSpherical用来建立柱坐标和球坐标,参数和CoordSysCartesian一样的

二.        修改坐标系(以卡氏坐标系为例)

修改名称,commandline参数为:
  1. CoordSysCartesian [' CoordSys_1'].name=' CS_ROTOR'
复制代码

修改注释,commandline参数为:
  1. CoordSysCartesian [' CoordSys_1'].name=' CoordSys_1 : Test'
复制代码

或者
  1. CoordSysCartesian [' CoordSys _1'].name=' CoordSys _1'
复制代码

将注释清空
修改其他的参数类似,详见附件代码

三.        获取坐标系(以卡氏坐标系为例)

注意以下代码节选自附件,并做了一定的修改以便讲述,无法单独运行,完整代码请参见附件

3.1        获取名称及注释

  1. command = "temp=CoordSysCartesian ['CoordSys_1'].name"
  2. self._project.executeJythonCommand(command)
  3. nameWithComment = self._project.getJythonStringArrayValue('temp')
  4. name = map(lambda x: x.split(":")[0].strip() if ":" in x else x, nameWithComment)[0]
  5. comment = map(lambda x: x.split(":")[1].strip() if ":" in x else "", nameWithComment)[0]
复制代码


3.2        获取origin

  1. command = "temp=CoordSysCartesian ['CoordSys_1'].name"
  2. self._project.executeJythonCommand(command)
  3. origin = self._project.getJythonStringArrayValue("temp")
复制代码


3.3        获取rotationAngles

  1. command = "temp=[CoordSysCartesian ['CoordSys_1'].rotationAngles.angleX," \            
  2.         "CoordSysCartesian ['CoordSys_1'].rotationAngles.angleY," \                  
  3.         "CoordSysCartesian ['CoordSys_1'].rotationAngles.angleZ]" \                              
  4. self._project.executeJythonCommand(command)                     
  5. rotationAngles = self._project.getJythonStringArrayValue("temp")
复制代码


3.4        获取parentCoordSys

这个放到最后讲,因为这个操作稍微复杂点
从前面建立坐标系的命令我们可知,parentCoordSys有两种可能:
GlobalUnits或者Local,我们可以在Flux中Hack一下这两个东西以得到更多的信息。

以下以Local为例讲述,GlobalUnits参见附件代码
在Flux中新建一个局部坐标系,然后在命令行输入
CoordSysCartesian['CoordSys_1'].parentCoordSys,得到的输出是Local[2];
命令行输入Local.__fields,得到输出是coordSys;
然后输入Local[2].coordSys,得到输出是CoordSysCartesian[1],这就是XY1那个初始的坐标系
我们可以通过CoordSysCartesian [1].name来得到其名称
但是,如果存盘后退出然后再打开Project,再次输入Local[2].coordSys,得到的将是'XY1 : Cartesian system of coordinates.'
这是个字符串对象,是没有name属性的,只能通过分解字符串的方法来得到名称
因此需要首先判断Local[2].coordSys的对象类型,进而执行相应的操作
  1. command="temp=CoordSysCartesian ['CoordSys_1'].parentCoordSys.coordSys.__class__.__name__"      
  2. self._project.executeJythonCommand(command)                                                      
  3. coordSysTypeName=self._project.getJythonStringArrayValue("temp")[0]                              
  4. if coordSysTypeName=='str':                                                                       
  5.     command = "temp=CoordSysCartesian ['CoordSys_1'].coordSys"                                         
  6.     self._project.executeJythonCommand(command)                                                   
  7. else:#coordSysTypeName=='PyOc':                                                                  
  8.     command = "temp=CoordSysCartesian ['CoordSys_1'].coordSys.name"
  9.     self._project.executeJythonCommand(command)                                                   
  10. parentCoordSysName = self._project.getJythonStringArrayValue("temp")[0].split(":")[0].strip()
复制代码

       
四.        删除坐标系
删除单个, commandline参数为:
CoordSys [' CoordSys_1'].delete()
删除所有, commandline参数为:
CoordSys [ALL].delete()

Lecture4.rar (201.42 KB, 下载次数: 41)



评分

参与人数 3西莫币 +45 收起 理由
y1949b + 15 精品文章
wshf + 15 原创内容
e=mc^2 + 15 精品文章

查看全部评分

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

该用户从未签到

发表于 2015-2-15 09:03 | 显示全部楼层
再次学习,楼主强大!
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 25 天

连续签到: 1 天

[LV.4]偶尔看看III

发表于 2015-2-19 02:43 | 显示全部楼层
Thanks for sharing PyFlux learning
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|西莫电机圈 ( 浙ICP备10025899号-3 浙公网安备:33028202000436号

GMT+8, 2024-4-23 22:59 , Processed in 0.094111 second(s), 30 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表