在结构设计计算中,总会遇到需要导模型的情况。虽然大部分项目只需要我们用PKPM即可,但天下结构软件各有千秋,PKPM功能虽强大,也无法做到面面俱到。
除PKPM外,Sap2000,Midas等结构设计软件作者均有接触,但要说操作最直观最方便的,3D3S说自己是第二,可能没人敢说自己是第一。当需要软件进行补充计算时,现在很多人会选择3D3S。
然而导模型可以说得上是结构设计中最凶险的环节之一了,当一个模型从软件A跑到软件B里面,作为补充计算的需要,设计人员往往没有时间对导入的模型进行全方位充分细致的检查,导过去的模型往往会有各种各样的雷等着大家去踩。这里作者就介绍一下最近PKPM导3D3S遇到的一个问题以及解决方案。
在3D3S14.0版本之后,提供了导入PKPM模型的功能,虽然14.0菜单上显示的是导入SATWE,事实上还是需要用户在PKPM的SPACECAD模块中点生成数据之后才能导入。
作者最近需要将PKPM模型导入3D3S后进行钢结构截面优选,但是一通操作下来,发现导过来的模型在3d3s中显示截面时是这个效果:
每根杆件截面只显示一个编号,要看具体的截面尺寸?不好意思,双击进去还要点好几步才看得到。这下好了,本来是想提高效率,现在模型这个样子,要想在此基础上优化截面,可能还不比直接用PKPM快。但是一想到PKPM里面去建桁架的痛苦经历,作者决定尝试一下解决这个问题。首先进到3d3s的截面库,可以看到“自动命名”的选项已经勾上了,但是程序并没有执行自动命名的操作。
小心翼翼地在第一个截面参数后面输个0,奇迹发生了!截面名称自动以截面参数进行了命名。
到了这一步不愿意编程的同学已经可以按此思路手动去修正模型了,直接输0回车一套操作就能解决这个问题。
然而手头这个模型几百个截面,一个一个输0也得输好久。这种时候,当然就该是我们的主角—python登场了。
计划的是利用python windows GUI相关的功能来解决问题,让python来帮我输入这一大串的0。熟悉WINAPI的同学可能直接拿着ctypes就能开工,但为求速度,我这里用到的库叫pywinauto,是一个专门用于windows自动化的python库。如果你还没有安装,可能需要打开cmd,通过pip安装,这里推荐清华镜像安装。
利用pywinauto,可以自动检测到3d3s窗口及子窗口,并分析窗口内容,自动输入……但是,我们要的是速度,所以什么自动分析都免了吧,直接用一个抓取窗口句柄的小工具ViewWizard,只需要把右下角的小放大镜拖放到对应窗口的位置,即可获得窗口句柄。
Viewvizard获取到句柄之后,在python中直接用
listv=pywinauto.controls.hwndwrapper.HwndWrapper(表格句柄)
impv=pywinauto.controls.hwndwrapper.HwndWrapper(截面参数输入框句柄)
即可将两个窗口打包成两个可以方便操作的对象。接下来代码进入一个循环,依次点击列表框中的截面,点击之后再到截面参数处输入一个0就可以完美地解决这个问题啦。总共只需要11行代码。写代码+调试5分钟搞定,从此以后导模型都可以用这个程序解决啦!程序运行效果如下:
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删