找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

Flux电机有限元分析教程西莫团购入口 | 奖励入口当当网购物入口 | 奖励入口欢迎使用!西莫论坛App开放下载Motor-CAD电机多物理域设计教材购买入口 | 奖励入口
★新会员论坛须知★《西莫电机技术》第40期发售火热进行中
Flux电机电磁阀有限元分析教程团购入口 | 奖励入口论坛微信公众平台欢迎入驻
西莫电机及相关产品供需交流群开放邀请★ 论坛VIP会员申请 ★Motor-CAD.MANATEE电磁热振动噪声教程 | 奖励入口西莫团队欢迎您的加盟!
宣传推广合作请联系QQ:25941174西莫电机论坛微信群正式开放Flux变压器与电抗器有限元分析团购入口 | 奖励入口西莫电机论坛技术版区QQ群汇总
查看: 1573|回复: 2

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

[复制链接]

该用户从未签到

发表于 2015-2-3 15:35 | 显示全部楼层 |阅读模式 来自: 中国四川德阳
本帖最后由 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()





本帖子中包含更多资源

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

×

评分

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

查看全部评分

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

该用户从未签到

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

使用道具 举报

签到天数: 2 天

连续签到: 1 天

[LV.1]初来乍到

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

使用道具 举报

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

本版积分规则

西莫电机论坛微信公众平台欢迎您的关注!

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

GMT+8, 2025-2-24 10:01 , Processed in 0.046556 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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