找回密码
 注册
Simdroid-非首页
查看: 718|回复: 12

[实例赏评] Workbench JScript---插入结果集的改进代码和结果集的导出

[复制链接]
发表于 2008-2-6 01:03:48 | 显示全部楼层 |阅读模式 来自 加拿大
本帖最后由 姜虎东 于 2009-8-17 10:51 编辑

第一次提到的插入结果集的代码,是通过循环suppress所有其他的零件,然后针对当前选中零件插入结果集,最后再恢复零件的初始suppress状态。这个代码在求解之前运行没有一点问题,但是如果已经求解完成,再插入这个代码的时候就会要求重新求解,即使是Evaluate All Results都不行。
所以就有了下面这个改进的代码,想法是不管求解前还是求解后,运行这个代码不影响当前求解的状态。


这个代码的思路是,1)获得当前模型的Assembly2)获得这个Assembly下的所有零件,3)如果零件的状态时suppressed的则略过,4)选定零件加入到SelectionManager中,SelectionManager只有当前这一个零件,5)添加结果集。
// improved code for insert-results
var branchObj =DS.Tree.FirstActiveBranch;
// Set up standard things
var project = branchObj.Project;
var model = branchObj.Model;
var environment = branchObj.Environment;
var protoGroup = branchObj.PrototypeGroup;
var asm=protoGroup.Assembly;
var answer=environment.AnswerSet
var id_TotalDisplacement = 25;
var id_EquivalentStress=1;
var id_MaximumPrincipalStress=2;

SM.Clear();
var Parts = asm.Parts(true);
for(var PartIdx=1; PartIdx <= Parts.Count; PartIdx++)
{
    var Part = Parts.Item(PartIdx);
    var proto=protoGroup.Prototypes.Item(PartIdx);
    if(proto.Suppressed)
        continue;
//
这两行代码不是很懂,特别是BRep.Cells不知道什么意思。这两行代码是在
//DSMenuScript.js中的selectByForceAllBodies_CFXMeshLegacy函数中找到的,见后面的代码。
   var allBodies = Part.BRep.Cells(3);
    SM.ForceSelect(Part.id, allBodies.Item(1).Id);

    var dItem=answer.AddResult(SM,id_TotalDisplacement);
    dItem.Name="Total Deformation - "+proto.Name;
   
    var sItem=answer.AddResult(SM,id_EquivalentStress);
    sItem.Name="Equivalent Stress - "+proto.Name;
    //
加上这一句,保证每次选择的只有一个零件
    SM.Clear();
}
DS.Script.fillTree();

// end of code


请参考在DSMenuScript.js中的函数
functionselectByForceAllBodies_CFXMeshLegacy(branch)
{
//This function requires nodependency on GUI, used with DS in hidden mode
//-- if modifing in the future be sure to retain this concept
var parts = branch.Assembly.Parts(true);
var PartIdx = 1;
var numParts = parts.Count;
for(PartIdx; PartIdx <= numParts; PartIdx++)
{
var part =parts.Item(PartIdx);
var ThisPartBRep = part.BRep;
var allBodies =ThisPartBRep.Cells(3);
var numBodies = 0;
numBodies =allBodies.Count;
var BodyIdx = 1;
for(BodyIdx;BodyIdx <= numBodies; BodyIdx++)
{
var Body =allBodies.Item(BodyIdx);
sm.ForceSelect(part.id,Body.Id);
}
}
}


接下来的代码是用来导出所有结果集(变形和应力)的最大最小值。
代码的思路是,1)创建一个文件,2)获得当前模型的结果集,3)扫描所有结果并把结果的名称,最大值和最小值写入文件。其中名称、最大值和最小值之间用;隔开,以便在EXCEL中打开时可以识别3列。
var branchObj = DS.Tree.FirstActiveBranch;

var project = branchObj.Project;
var model = branchObj.Model;
var environment = branchObj.Environment;
var protoGroup = branchObj.PrototypeGroup;
var answer=environment.AnswerSet

var strAns=answer.Structuralresults;
var i=0;
var itemValue=0;
var fs,f,wf;
//创建文件对象
fs=new ActiveXObject("Scripting.FileSystemObject");
//创建一个指定绝对路径的文件,注意有双斜杠
f=fs.CreateTextFile("d:\\tmpTest\\result.txt",true);

for (i=1;i<=strAns.Count;i++)
{


//一句话写入结果名称,最大值和最小值
    f.WriteLine(strAns(i).Name+";"+strAns(i).Maximum+";"+strAns(i).Minimum);
}
//关闭文件
f.Close();
DS.Script.fillTree();


在workbench中可以导出选中的某一个结果最大最小值,但是多选后就不能导出,所以上面代码虽然简单,对于有很多零件的模型而且关心每个零件的最大最小值来说还是蛮有用的。
下次准备说一下关于图片的代码,来快速生成简单的分析报告。

[ 本帖最后由 whatinrain 于 2008-2-6 01:05 编辑 ]

评分

1

查看全部评分

发表于 2008-2-6 16:13:19 | 显示全部楼层 来自 挪威
Simdroid开发平台
大力支持精品原创,顺祝楼主新年快乐。
回复 不支持

使用道具 举报

发表于 2008-2-6 20:22:25 | 显示全部楼层 来自 江苏苏州
坚决支持原创精品,祝留守的诸位新年快乐!
回复 不支持

使用道具 举报

发表于 2008-8-14 08:53:15 | 显示全部楼层 来自 大连理工大学
强烈支持楼主,最近也在研究基于AWE的二次开发,长见识了
回复 不支持

使用道具 举报

发表于 2008-8-22 10:23:58 | 显示全部楼层 来自 辽宁沈阳
谢谢楼主分享
回复 不支持

使用道具 举报

发表于 2008-9-19 17:39:09 | 显示全部楼层 来自 北京
wb二次开发,很有用处。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2008-10-7 15:35:19 | 显示全部楼层 来自 北京
好资料,毕竟现在wb二次开发方面的资料太少了,以后还是希望多看到关于jscript方面的资料
回复 不支持

使用道具 举报

发表于 2009-5-30 16:57:44 | 显示全部楼层 来自 陕西西安
你的联系方式是什么啊?
回复 不支持

使用道具 举报

发表于 2009-5-30 21:18:09 | 显示全部楼层 来自 山东青岛
能钻研啊,知识真是无止境啊
回复 不支持

使用道具 举报

发表于 2009-8-4 22:18:39 | 显示全部楼层 来自 上海杨浦区
Workbench JScript的好文,学习
回复 不支持

使用道具 举报

发表于 2010-5-29 15:52:49 | 显示全部楼层 来自 四川成都
多谢,学习中
回复 不支持

使用道具 举报

发表于 2010-6-22 15:58:14 | 显示全部楼层 来自 四川成都
强烈支持楼主 好贴啊
回复 不支持

使用道具 举报

发表于 2012-4-19 14:21:38 | 显示全部楼层 来自 北京
虽然看着很吃力,但应该是好知识,谢谢分享
回复 不支持

使用道具 举报

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

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-28 04:21 , Processed in 0.074664 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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