====== LsdynaSession ====== **//Inherited from//** [[class::xsession|XSession]], **//Inherited by//** NULL **//Friend class//** NULL **//Description//** LsdynaSession类用于读取LsDyna的结果重建结果模型,根据几何和拓扑关系识别碎片特征,根据粒子点云的坐标重建包络空间的几何外形,并提取相关数据进行分析计算获取特征参数。 **//Members//** * XDocument * [[lsdynasession#m_pdoc|m_pDoc]] * XModel * [[lsdynasession#m_prefmdl|m_pRefMdl]] * XModel * [[lsdynasession#m_prltmdl|m_pRltMdl]] * XMemPool * [[lsdynasession#m_psessionmem|m_pSessionMem]] * MaterialManager * [[lsdynasession#m_pmats|m_pMats]] * MaterialEntryManager * [[lsdynasession#m_pmatentry|m_pMatEntry]] * XMap * [[lsdynasession#m_pmatpartmap|m_pMatPartMap]] * XHash [[lsdynasession#m_pelemdatas|m_pElemDatas]] * XHash [[lsdynasession#m_pnodedatas|m_pNodeDatas]] * XHash [[lsdynasession#m_pekvparts|m_pEKVParts]] * const XGeometry * [[lsdynasession#m_pplatecurveface|m_pPlateCurveFace]] * Vector3r [[lsdynasession#m_interceptdir|m_interceptDir]] * Vector3r [[lsdynasession#m_targettop|m_targetTop]] * Vector3r [[lsdynasession#m_targetaxis|m_targetAxis]] * Vector3r [[lsdynasession#m_ekvelocity|m_EKVelocity]] * ulong [[lsdynasession#m_ulstartsphid|m_ulStartSphID]] * vector [[lsdynasession#m_pparticles|m_pParticles]] * unordered_set [[lsdynasession#m_pcases|m_pCases]] * FeatureCylinder * [[lsdynasession#m_pinterceptcyl|m_pInterceptCyl]] **//Public interface//** * [[lsdynasession#lsdynasession1|LsdynaSession]](XDocument * doc = 0) * [[lsdynasession#~lsdynasession|~LsdynaSession]]() * void [[lsdynasession#init|init]](XDocument * doc) * static const char * [[lsdynasession#name|name]]() * const char * [[lsdynasession#getname|getName]]() const * void [[lsdynasession#readkmodel|readKModel]](const char * kFile,int interceptID = 0) * void [[lsdynasession#readresult|readResult]](const char * rFile) * void [[lsdynasession#exportdebrisparam|exportDebrisParam]](const char * dFile, IMainFrame * uiFrame, bool bTarget) * void [[lsdynasession#exportmodelparam|exportModelParam]](const char * dFile, bool bExistTargetAxis = true) * void [[lsdynasession#exportmodeldamage|exportModelDamage]](const char * dFile) * void [[lsdynasession#exportdebriscloudfeature|exportDebrisCloudFeature]](const char * dFile) * void [[lsdynasession#exportsph|exportSph]](int stID, const char * fname) * bool [[lsdynasession#ismodelready|isModelReady]]() const * int [[lsdynasession#readcases|readCases]](vector * cases) * void [[lsdynasession#appendcase|appendCase]](const char * caseName) * void [[lsdynasession#exportmodeldamage_cubic|exportModelDamage_Cubic]](const char * dFile) * void [[lsdynasession#clear|clear]]() **//Private interface//** * void [[lsdynasession#updateelemdata|updateElemData]]() * void [[lsdynasession#updateekvparts|updateEKVParts]](Vector3r * v) * Vector3r [[lsdynasession#calcelemvelocity|calcElemVelocity]](const XElement* el) * double [[lsdynasession#calcelempressure|calcElemPressure]](const XElement* el) * double [[lsdynasession#calcframentpressure|calcFramentPressure]](const XSolid * s) * double [[lsdynasession#calcprojectarea|calcProjectArea]](const XSolid * s, const double * x, const double * y, const double *dir, const double * center) * double [[lsdynasession#calcprojectareagpu|calcProjectAreaGPU]](const XSolid * s, const XObBox * obb, int axis, IMainFrame * gpuFrame) * void [[lsdynasession#createshapecurveface|createShapeCurveFace]](XGeometry * shapeFace) * bool [[lsdynasession#isbrokenfacet|isBrokenFacet]](const XElement * rElem) * void [[lsdynasession#calcinterceptinclinedcone|calcInterceptInclinedCone]](FeatureInclinedCone * fInclinedCone) * void [[lsdynasession#calcinterceptcylinder|calcInterceptCylinder]](FeatureCylinder * fCyl) * double [[lsdynasession#calccylinderpath|calcCylinderPath]](const double * zAxis, vector * damageNodes, double * center) * void [[lsdynasession#findtargetaxis|findTargetAxis]]() * bool [[lsdynasession#calccyldamageonpart|calcCylDamageOnPart]](ulong pid, PartDamage * damage) * bool [[lsdynasession#calcconedamageonpart|calcConeDamageOnPart]](ulong pid, FeatureInclinedCone * cone, PartDamage * damage) * void [[lsdynasession#calcdebriscloudfeature|calcDebrisCloudFeature]](DebrisFeature * fet) * void [[lsdynasession#collectvalidparticles|collectValidParticles]](vector * particles) * void [[lsdynasession#collectinvalidelements|collectInvalidElements]](const XPart * p, vector * els, vector * maxRegion) * void [[lsdynasession#collectinvalidnodesfromseed|collectInvalidNodesFromSeed]](const XNode * seedNode, vector * nodes) * const XSolid * [[lsdynasession#getmainsolid|getMainSolid]](ulong pid) ---- {{anchor:m_pdoc}} **XDocument * m_pDoc** 会话所属的文档对象 {{anchor:m_prefmdl}} **XModel * m_pRefMdl** 原始模型 {{anchor:m_prltmdl}} **XModel * m_pRltMdl** 结果模型 {{anchor:m_psessionmem}} **XMemPool * m_pSessionMem** 会话内存空间 {{anchor:m_pmats}} **MaterialManager * m_pMats** 材料对象管理器 {{anchor:m_pmatentry}} **MaterialEntryManager * m_pMatEntry** 材料子项管理器 {{anchor:m_pmatpartmap}} **XMap * m_pMatPartMap** {{anchor:m_pelemdatas}} **XHash m_pElemDatas** {{anchor:m_pnodedatas}} **XHash m_pNodeDatas** {{anchor:m_pekvparts}} **XHash m_pEKVParts** {{anchor:m_pplatecurveface}} **const XGeometry * m_pPlateCurveFace** {{anchor:m_interceptdir}} **Vector3r m_interceptDir** {{anchor:m_targettop}} **Vector3r m_targetTop** {{anchor:m_targetaxis}} **Vector3r m_targetAxis** {{anchor:m_ekvelocity}} **Vector3r m_EKVelocity** {{anchor:m_ulstartsphid}} **ulong m_ulStartSphID** {{anchor:m_pparticles}} **vector m_pParticles** {{anchor:m_pcases}} **unordered_set m_pCases** {{anchor:m_pinterceptcyl}} **FeatureCylinder * m_pInterceptCyl** ---- {{anchor:lsdynasession1}} **LsdynaSession(XDocument * doc = 0)** *function: 构造函数 *parameters: - [i] XDocument * doc = 0: 会话所属文档对象,可为空 *return value: 无 {{anchor:~lsdynasession}} **~LsdynaSession()** *function: 析构函数 *parameters: NULL *return value: 无 {{anchor:init}} **void init(XDocument * doc)** *function: 初始化会话的上下文 *parameters: - [i] XDocument * doc: 会话所属文档对象 *return value: 无 {{anchor:name}} **static const char * name()** *function: 获取会话类型标识 *parameters: NULL *return value: 会话类型标识 {{anchor:getname}} **const char * getName() const** *function: 获取会话名称 *parameters: NULL *return value: 会话名称 {{anchor:readkmodel}} **void readKModel(const char * kFile)** *function: 读取K文件构建原始模型 *parameters: - [i] const char * kFile: K文件路径 - [i] int interceptID = 0: 交会ID(用于调试) *return value: 无 {{anchor:readresult}} **void readResult(const char * rFile)** *function: 读取结果数据构建结果模型 *parameters: - [i] const char * rFile: 结果文件路径 *return value: 无 {{anchor:exportdebrisparam}} **void exportDebrisParam(const char * dFile, IMainFrame * uiFrame, bool bTarget)** *function: 计算并输出碎片的特征参数 *parameters: - [i] const char * dFile: 输出文件路径 - [i] IMainFrame * uiFrame: 框架对象 - [i] bool bTarget: 是否输出目标碎片,否则输出EKV碎片 *return value: 无 {{anchor:exportmodelparam}} **void exportModelParam(const char * dFile, bool bExistTargetAxis = true)** *function: 分析并输出模型参数 *parameters: - [i] const char * dFile: 输出文件路径 - [i] bool bExistTargetAxis = true: 是否存在目标轴 *return value: 无 {{anchor:exportmodeldamage}} **void exportModelDamage(const char * dFile)** *function: 分析并输出目标毁伤参数 *parameters: - [i] const char * dFile: 输出文件路径 *return value: 无 {{anchor:exportdebriscloudfeature}} **void exportDebrisCloudFeature(const char * dFile)** *function: 分析并输出粒子云特征 *parameters: - [i] const char * dFile: 输出文件路径 *return value: 无 {{anchor:exportsph}} **void exportSph(int stID, const char * fname)** *function: 提取SPH数据并输出 *parameters: - [i] int stID: 结果步ID号 - [i] const char * fname: 输出文件路径 *return value: 无 {{anchor:ismodelready}} **bool isModelReady() const** *function: 检查模型是否已构建好 *parameters: NULL *return value: 无 {{anchor:readcases}} **int readCases(vector * cases)** *function: 读取已分析的案例清单 *parameters: - [i] vector * cases: 案例文件列表 *return value: 案例文件的个数 {{anchor:appendcase}} **void appendCase(const char * caseName)** *function: 添加当前分析到案例清单中 *parameters: - [i] const char * caseName: 当前的分析名称 *return value: 无 {{anchor:exportmodeldamage_cubic}} **void exportModelDamage_Cubic(const char * dFile)** *function: 输出立方体外形的模型毁伤参数 *parameters: - [i] const char * dFile: 输出文件路径 *return value: 无 {{anchor:clear}} **void clear()** *function: 清空会话数据 *parameters: NULL *return value: 无 ---- {{anchor:updateelemdata}} **void updateElemData()** *function: 更新模型单元数据 *parameters: NULL *return value: 无 {{anchor:updateekvparts}} **void updateEKVParts(Vector3r * v)** *function: 更新EKV部件数据 *parameters: - [o] Vector3r * v: 质量最小部件的相对速度 *return value: 无 {{anchor:calcelemvelocity}} **Vector3r calcElemVelocity(const XElement* el)** *function: 计算单元的速度 *parameters: - [i] const XElement* el: 单元对象 *return value: 单元速度 {{anchor:calcelempressure}} **double calcElemPressure(const XElement* el)** *function: 计算单元压力 *parameters: - [i] const XElement* el: 单元对象 *return value: 单元压力 {{anchor:calcframentpressure}} **double calcFramentPressure(const XSolid * s)** *function: 计算碎片压力 *parameters: - [i] const XSolid * s: 碎片实体对象 *return value: 无 {{anchor:calcprojectarea}} **double calcProjectArea(const XSolid * s, const double * x, const double * y, const double *dir, const double * center)** *function: 计算投影面积 *parameters: - [i] const XSolid * s: 碎片实体对象 - [i] const double * x: x特征长度 - [i] const double * y: y特征长度 - [i] const double *dir: 投影方向 - [i] const double * center: 投影中心 *return value: 碎片在指定方向上的投影面积 {{anchor:calcprojectareagpu}} **double calcProjectAreaGPU(const XSolid * s, const XObBox * obb, int axis, IMainFrame * gpuFrame)** *function: 通过GPU渲染来计算投影面积 *parameters: - [i] const XSolid * s: 碎片实体对象 - [i] const XObBox * obb: 有向包围盒 - [i] int axis: 投影方向 - [i] IMainFrame * gpuFrame: GPU框架 *return value: 碎片在指定方向上的投影面积 {{anchor:createshapecurveface}} **void createShapeCurveFace(XGeometry * shapeFace)** *function: 创建曲面 *parameters: - [i] XGeometry * shapeFace: 曲面对象 *return value: 无 {{anchor:isbrokenfacet}} **bool isBrokenFacet(const XElement * rElem)** *function: 判断单元是否有失效的面 *parameters: - [i] const XElement * rElem: 单元对象 *return value: 如有失效的面返回true,否则返回false {{anchor:calcinterceptinclinedcone}} **void calcInterceptInclinedCone(FeatureInclinedCone * fInclinedCone)** *function: 计算交会的包络圆锥面 *parameters: - [i] FeatureInclinedCone * fInclinedCone: 交会的包络圆锥面 *return value: 无 {{anchor:calcinterceptcylinder}} **void calcInterceptCylinder(FeatureCylinder * fCyl)** *function: 计算交会的包络圆柱面 *parameters: - [i] FeatureCylinder * fCyl: 交会的包络圆柱面 *return value: 无 {{anchor:calccylinderpath}} **double calcCylinderPath(const double * zAxis, vector * damageNodes, double * center)** *function: 计算圆柱通道参数 *parameters: - [i] const double * zAxis: EKV的中心轴 - [i] vector * damageNodes: 失效的节点 - [i] double * center: 通道中心 *return value: 圆柱通道的半径 {{anchor:findtargetaxis}} **void findTargetAxis()** *function: 计算目标的中心轴 *parameters: NULL *return value: 无 {{anchor:calccyldamageonpart}} **bool calcCylDamageOnPart(ulong pid, PartDamage * damage)** *function: 计算圆柱面交会时目标部件上的毁伤 *parameters: - [i] ulong pid: 部件ID - [i] PartDamage * damage: 部件毁伤参数 *return value: 有毁伤返回true,否则返回false {{anchor:calcconedamageonpart}} **bool calcConeDamageOnPart(ulong pid, FeatureInclinedCone * cone, PartDamage * damage)** *function: 计算圆锥面交会时目标部件上的毁伤 *parameters: - [i] ulong pid: 部件ID - [i] FeatureInclinedCone * cone: 圆锥面参数 - [i] PartDamage * damage: 部件毁伤参数 *return value: 有毁伤返回true,否则返回false {{anchor:calcdebriscloudfeature}} **void calcDebrisCloudFeature(DebrisFeature * fet)** *function: 计算粒子云特征参数 *parameters: - [i] DebrisFeature * fet: 粒子云特征参数 *return value: 无 {{anchor:collectvalidparticles}} **void collectValidParticles(vector * particles)** *function: 获取有效的粒子云坐标 *parameters: - [i] vector * particles: 有效的粒子云坐标 *return value: 无 {{anchor:collectinvalidelements}} **void collectInvalidElements(const XPart * p, vector * els, vector * maxRegion)** *function: 获取失效单元数组 *parameters: - [i] const XPart * p: 部件对象 - [i] vector * els: 失效单元数组 - [i] vector * maxRegion: 失效单元最外围区域的单元数组 *return value: 无 {{anchor:collectinvalidnodesfromseed}} **void collectInvalidNodesFromSeed(const XNode * seedNode, vector * nodes)** *function: 从种子节点搜索所有与它关联的失效节点 *parameters: - [i] const XNode * seedNode: 种子节点 - [i] vector * nodes: 与种子节点关联的所有失效节点 *return value: 无 {{anchor:getmainsolid}} **const XSolid * getMainSolid(ulong pid)** *function: 获取部件剩下的主体对象 *parameters: - [i] ulong pid: 部件ID *return value: 主体对象