|  | @@ -108,6 +108,7 @@ bool cmdMainProcess::CreateProcess_(string pathGeo)
 | 
											
												
													
														|  |      //iniACIS();
 |  |      //iniACIS();
 | 
											
												
													
														|  |      //1.--read cad surf parameter
 |  |      //1.--read cad surf parameter
 | 
											
												
													
														|  |      //Get ENTITY_LIST;
 |  |      //Get ENTITY_LIST;
 | 
											
												
													
														|  | 
 |  | +    string msg_str;
 | 
											
												
													
														|  |      ENTITY_LIST Whole_ents;
 |  |      ENTITY_LIST Whole_ents;
 | 
											
												
													
														|  |      ENTITY_LIST cells;
 |  |      ENTITY_LIST cells;
 | 
											
												
													
														|  |      ENTITY_LIST ent;
 |  |      ENTITY_LIST ent;
 | 
											
										
											
												
													
														|  | @@ -168,14 +169,24 @@ bool cmdMainProcess::CreateProcess_(string pathGeo)
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_n_body_unite(ent, false));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_n_body_unite(ent, false));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          printf("Whole_ents after unite is : %d\n", ent.count());
 |  |          printf("Whole_ents after unite is : %d\n", ent.count());
 | 
											
												
													
														|  |          for (int kk = 0; kk < ent.count(); kk++)
 |  |          for (int kk = 0; kk < ent.count(); kk++)
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |              printf("kk%d is %d; ", kk, is_BODY(ent[kk]));
 |  |              printf("kk%d is %d; ", kk, is_BODY(ent[kk]));
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          // Attach cellular topology to non-regular union (necessary for the Spa3dpm::Cell_VolumeElem_Assoc class below to function correctly).
 |  |          // Attach cellular topology to non-regular union (necessary for the Spa3dpm::Cell_VolumeElem_Assoc class below to function correctly).
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_ct_attach(ent));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_ct_attach(ent));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          printf("Whole_ents after attach is : %d\n", ent.count());
 |  |          printf("Whole_ents after attach is : %d\n", ent.count());
 | 
											
												
													
														|  |          for (int kk = 0; kk < ent.count(); kk++)
 |  |          for (int kk = 0; kk < ent.count(); kk++)
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
										
											
												
													
														|  | @@ -194,6 +205,9 @@ bool cmdMainProcess::CreateProcess_(string pathGeo)
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |      else {//self create
 |  |      else {//self create
 | 
											
												
													
														|  |          Whole_ents = CreateSelfGeo();
 |  |          Whole_ents = CreateSelfGeo();
 | 
											
												
													
														|  | 
 |  | +        if(Whole_ents.count()==0){
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |      printf("Load Geometry OK!"); //
 |  |      printf("Load Geometry OK!"); //
 | 
											
												
													
														|  |      printf("Whole_ents is : %d\n", Whole_ents.count());
 |  |      printf("Whole_ents is : %d\n", Whole_ents.count());
 | 
											
										
											
												
													
														|  | @@ -343,7 +357,12 @@ bool cmdMainProcess::CreateProcess_(string pathGeo, string pathParam)
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          ENTITY_LIST testEnt=ent;
 |  |          ENTITY_LIST testEnt=ent;
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_n_body_unite(testEnt, false));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_n_body_unite(testEnt, false));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          printf("Whole_ents after unite is : %d,then use stitch function\n", testEnt.count());
 |  |          printf("Whole_ents after unite is : %d,then use stitch function\n", testEnt.count());
 | 
											
												
													
														|  |          //--
 |  |          //--
 | 
											
												
													
														|  |          msg_str.clear();
 |  |          msg_str.clear();
 | 
											
										
											
												
													
														|  | @@ -360,7 +379,12 @@ bool cmdMainProcess::CreateProcess_(string pathGeo, string pathParam)
 | 
											
												
													
														|  |              //	printf("kk%d is %d; ", kk, is_BODY(ent[kk]));
 |  |              //	printf("kk%d is %d; ", kk, is_BODY(ent[kk]));
 | 
											
												
													
														|  |              //}
 |  |              //}
 | 
											
												
													
														|  |              //// Attach cellular topology to non-regular union (necessary for the Spa3dpm::Cell_VolumeElem_Assoc class below to function correctly).
 |  |              //// Attach cellular topology to non-regular union (necessary for the Spa3dpm::Cell_VolumeElem_Assoc class below to function correctly).
 | 
											
												
													
														|  | -            exit_on_bad_outcome(api_ct_attach(testEnt));
 |  | 
 | 
											
												
													
														|  | 
 |  | +            msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +            msg_str=exit_on_bad_outcome(api_ct_attach(testEnt));
 | 
											
												
													
														|  | 
 |  | +            if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +                emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +                return false;
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  |              printf("Whole_ents after attach is : %d\n", testEnt.count());
 |  |              printf("Whole_ents after attach is : %d\n", testEnt.count());
 | 
											
												
													
														|  |              //--
 |  |              //--
 | 
											
												
													
														|  |              msg_str.clear();
 |  |              msg_str.clear();
 | 
											
										
											
												
													
														|  | @@ -397,6 +421,9 @@ bool cmdMainProcess::CreateProcess_(string pathGeo, string pathParam)
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |      }else {//self create
 |  |      }else {//self create
 | 
											
												
													
														|  |          Whole_ents = CreateSelfGeo();
 |  |          Whole_ents = CreateSelfGeo();
 | 
											
												
													
														|  | 
 |  | +        if(Whole_ents.count() == 0){
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |      printf("  load geometry ok!"); //
 |  |      printf("  load geometry ok!"); //
 | 
											
												
													
														|  |      printf("Whole_ents is : %d\n", Whole_ents.count());
 |  |      printf("Whole_ents is : %d\n", Whole_ents.count());
 | 
											
										
											
												
													
														|  | @@ -450,11 +477,11 @@ bool cmdMainProcess::CreateProcess_(string pathGeo, string pathParam)
 | 
											
												
													
														|  |      QString dDir=QDir::currentPath();
 |  |      QString dDir=QDir::currentPath();
 | 
											
												
													
														|  |      printf("path:%s\n",dDir.toLatin1().data());
 |  |      printf("path:%s\n",dDir.toLatin1().data());
 | 
											
												
													
														|  |      //--
 |  |      //--
 | 
											
												
													
														|  | -//    msg_str.clear();
 |  | 
 | 
											
												
													
														|  | -//    msg_str.append("  path:");
 |  | 
 | 
											
												
													
														|  | -//    msg_str.append(dDir.toLatin1().data());
 |  | 
 | 
											
												
													
														|  | -//    msg_str.append(".");
 |  | 
 | 
											
												
													
														|  | -//    emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    //    msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +    //    msg_str.append("  path:");
 | 
											
												
													
														|  | 
 |  | +    //    msg_str.append(dDir.toLatin1().data());
 | 
											
												
													
														|  | 
 |  | +    //    msg_str.append(".");
 | 
											
												
													
														|  | 
 |  | +    //    emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  |      ADIParam_.useDefaultParam();
 |  |      ADIParam_.useDefaultParam();
 | 
											
												
													
														|  |      CRWriteFile* crw = new CRWriteFile();
 |  |      CRWriteFile* crw = new CRWriteFile();
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -501,7 +528,9 @@ bool cmdMainProcess::CreateProcess_(string pathGeo, string pathParam)
 | 
											
												
													
														|  |      emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 |  |      emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  |      if(ADIParam_.style)
 |  |      if(ADIParam_.style)
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  | -        createVol(ADIParam_.style, cells);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        if(!createVol(ADIParam_.style, cells)){
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -569,8 +598,12 @@ bool cmdMainProcess::CreateProcess_(string pathGeo, string pathParam)
 | 
											
												
													
														|  |          emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("path",msg_str));
 |  |          emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("path",msg_str));
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_3dpm_save_mesh(surfMesh_, "3dpmSample_surfMesh.mesh"));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_3dpm_save_mesh(surfMesh_, "3dpmSample_surfMesh.mesh"));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |      printf("Successfully wrote SurfMesh to .mesh format\n");
 |  |      printf("Successfully wrote SurfMesh to .mesh format\n");
 | 
											
												
													
														|  |      //--
 |  |      //--
 | 
											
												
													
														|  |      msg_str.clear();
 |  |      msg_str.clear();
 | 
											
										
											
												
													
														|  | @@ -635,15 +668,23 @@ bool cmdMainProcess::CreateProcess_(string pathGeo, string pathParam)
 | 
											
												
													
														|  |  * @reviser
 |  |  * @reviser
 | 
											
												
													
														|  |  * @date
 |  |  * @date
 | 
											
												
													
														|  |  */
 |  |  */
 | 
											
												
													
														|  | -void cmdMainProcess::exit_on_bad_outcome(const outcome &o)
 |  | 
 | 
											
												
													
														|  | 
 |  | +string cmdMainProcess::exit_on_bad_outcome(const outcome &o)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    if (!o.ok())
 |  | 
 | 
											
												
													
														|  | 
 |  | +    string msg;
 | 
											
												
													
														|  | 
 |  | +    if (!o.ok()){
 | 
											
												
													
														|  |          if (const message_list *ml = get_message(o.error_number()))
 |  |          if (const message_list *ml = get_message(o.error_number()))
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  | -            printf("*** ERROR: %s: %s\n", ml->ident, ml->message);
 |  | 
 | 
											
												
													
														|  | -            exit(1);
 |  | 
 | 
											
												
													
														|  | 
 |  | +            msg.append("*** ERROR: ");
 | 
											
												
													
														|  | 
 |  | +            msg.append(ml->ident);
 | 
											
												
													
														|  | 
 |  | +            msg.append(": ");
 | 
											
												
													
														|  | 
 |  | +            msg.append(ml->message);
 | 
											
												
													
														|  | 
 |  | +            msg.append("\n");
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | 
 |  | +        return msg;
 | 
											
												
													
														|  | 
 |  | +    }else{
 | 
											
												
													
														|  | 
 |  | +        msg.clear();
 | 
											
												
													
														|  | 
 |  | +        return msg;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  /*
 |  |  /*
 | 
											
										
											
												
													
														|  | @@ -815,7 +856,12 @@ Spa3dpm::Parameters cmdMainProcess::setADIParamTo3dpm(const DPM_ADIParam &p)
 | 
											
												
													
														|  |  */
 |  |  */
 | 
											
												
													
														|  |  bool cmdMainProcess::Createcadsurf(const ENTITY_LIST &ents, Spa3dpm::CadSurfSession &cadsurf)
 |  |  bool cmdMainProcess::Createcadsurf(const ENTITY_LIST &ents, Spa3dpm::CadSurfSession &cadsurf)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_3dpm_create_cadsurf_session(ents, cadsurf));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    string msg_str;
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_3dpm_create_cadsurf_session(ents, cadsurf));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |      printf("Successfully created cadsurf session\n");
 |  |      printf("Successfully created cadsurf session\n");
 | 
											
												
													
														|  |      return true;
 |  |      return true;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
										
											
												
													
														|  | @@ -834,14 +880,24 @@ into a surface mesh.
 | 
											
												
													
														|  |  bool cmdMainProcess::OutPutSurfMesh(Spa3dpm::MgSession &inSession, Spa3dpm::Mesh &outMesh, const Spa3dpm::Parameters *inParams)
 |  |  bool cmdMainProcess::OutPutSurfMesh(Spa3dpm::MgSession &inSession, Spa3dpm::Mesh &outMesh, const Spa3dpm::Parameters *inParams)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  |      printf("start created 3dpm_compute_mesh\n");
 |  |      printf("start created 3dpm_compute_mesh\n");
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_3dpm_compute_mesh(inSession, outMesh, inParams));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    string msg_str;
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_3dpm_compute_mesh(inSession, outMesh, inParams));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |      printf("Successfully created surface mesh\n");
 |  |      printf("Successfully created surface mesh\n");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      if (ADIParam_.bCleanerSection)//open cleaner or not
 |  |      if (ADIParam_.bCleanerSection)//open cleaner or not
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  |          printf("start created create_cleaner_session\n");
 |  |          printf("start created create_cleaner_session\n");
 | 
											
												
													
														|  |          Spa3dpm::CleanerSession  cleantetra;
 |  |          Spa3dpm::CleanerSession  cleantetra;
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_3dpm_create_cleaner_session(outMesh, cleantetra));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_3dpm_create_cleaner_session(outMesh, cleantetra));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          Spa3dpm::Parameters cleanerParams;
 |  |          Spa3dpm::Parameters cleanerParams;
 | 
											
												
													
														|  |          //--set cleaner parameter
 |  |          //--set cleaner parameter
 | 
											
												
													
														|  |          if (!ADIParam_.clrParam.folding_angle.isEmpty())
 |  |          if (!ADIParam_.clrParam.folding_angle.isEmpty())
 | 
											
										
											
												
													
														|  | @@ -868,7 +924,12 @@ bool cmdMainProcess::OutPutSurfMesh(Spa3dpm::MgSession &inSession, Spa3dpm::Mesh
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          printf("Successfully set cleaner session\n");
 |  |          printf("Successfully set cleaner session\n");
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_3dpm_compute_mesh(cleantetra, outMesh, &cleanerParams));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_3dpm_compute_mesh(cleantetra, outMesh, &cleanerParams));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          printf("Successfully created cleaner surface mesh\n");
 |  |          printf("Successfully created cleaner surface mesh\n");
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -885,18 +946,28 @@ bool cmdMainProcess::OutPutSurfMesh(Spa3dpm::MgSession &inSession, Spa3dpm::Mesh
 | 
											
												
													
														|  |  */
 |  |  */
 | 
											
												
													
														|  |  ENTITY_LIST cmdMainProcess::CreateSelfGeo()
 |  |  ENTITY_LIST cmdMainProcess::CreateSelfGeo()
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | 
 |  | +    string msg_str;
 | 
											
												
													
														|  |      ENTITY_LIST ents;
 |  |      ENTITY_LIST ents;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      // Create the first solid block
 |  |      // Create the first solid block
 | 
											
												
													
														|  |      BODY *block = nullptr;
 |  |      BODY *block = nullptr;
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 5, 10), block));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 5, 10), block));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |      ents.add(block);
 |  |      ents.add(block);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      // Create a hanging face inside the first block
 |  |      // Create a hanging face inside the first block
 | 
											
												
													
														|  |      FACE *face = nullptr;
 |  |      FACE *face = nullptr;
 | 
											
												
													
														|  |      SPAvector ab = SPAvector(0.0, 0.0, 1.0);
 |  |      SPAvector ab = SPAvector(0.0, 0.0, 1.0);
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_face_plane(SPAposition(1, 1, 5), 8, 3, &ab, face));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_face_plane(SPAposition(1, 1, 5), 8, 3, &ab, face));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |      //exit_on_bad_outcome(api_face_plane(SPAposition(1, 1, 1), 4, 1, &SPAvector(0.0, 0.0, 1.0), face));
 |  |      //exit_on_bad_outcome(api_face_plane(SPAposition(1, 1, 1), 4, 1, &SPAvector(0.0, 0.0, 1.0), face));
 | 
											
												
													
														|  |      BODY * sheet = nullptr;
 |  |      BODY * sheet = nullptr;
 | 
											
												
													
														|  |      api_sheet_from_ff(1, &face, sheet);
 |  |      api_sheet_from_ff(1, &face, sheet);
 | 
											
										
											
												
													
														|  | @@ -911,21 +982,40 @@ ENTITY_LIST cmdMainProcess::CreateSelfGeo()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      // Create the second solid cube with edge length 10, adjacent to the first block
 |  |      // Create the second solid cube with edge length 10, adjacent to the first block
 | 
											
												
													
														|  |      BODY *cube = nullptr;
 |  |      BODY *cube = nullptr;
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_solid_block(SPAposition(0, 5, 0), SPAposition(10, 15, 10), cube));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_solid_block(SPAposition(0, 5, 0), SPAposition(10, 15, 10), cube));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |      ents.add(cube);
 |  |      ents.add(cube);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      // Create a sphere of radius 4 that lies insides the second block
 |  |      // Create a sphere of radius 4 that lies insides the second block
 | 
											
												
													
														|  |      BODY *sphere = nullptr;
 |  |      BODY *sphere = nullptr;
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_solid_sphere(SPAposition(5, 10, 5), 4, sphere));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_solid_sphere(SPAposition(5, 10, 5), 4, sphere));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |      ents.add(sphere);
 |  |      ents.add(sphere);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      printf("Entity Count not unite: %d\n", ents.count());
 |  |      printf("Entity Count not unite: %d\n", ents.count());
 | 
											
												
													
														|  |      // Non-regularized unite of the blocks and the sphere. All faces are kept and used to divide the output body into cells (in Acis) and subdomains (in 3DPM).
 |  |      // Non-regularized unite of the blocks and the sphere. All faces are kept and used to divide the output body into cells (in Acis) and subdomains (in 3DPM).
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_n_body_unite(ents, false));
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | 
 |  | +    msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_n_body_unite(ents, false));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      // Attach cellular topology to non-regular union (necessary for the Spa3dpm::Cell_VolumeElem_Assoc class below to function correctly).
 |  |      // Attach cellular topology to non-regular union (necessary for the Spa3dpm::Cell_VolumeElem_Assoc class below to function correctly).
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_ct_attach(ents));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_ct_attach(ents));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |      //printf("Successfully attached cellular topology to body\n");
 |  |      //printf("Successfully attached cellular topology to body\n");
 | 
											
												
													
														|  |      //ENTITY_LIST cells;
 |  |      //ENTITY_LIST cells;
 | 
											
												
													
														|  |      //api_ct_get_all_cells(ents, cells);
 |  |      //api_ct_get_all_cells(ents, cells);
 | 
											
										
											
												
													
														|  | @@ -1101,8 +1191,9 @@ void cmdMainProcess::CreateLocalSizeMap()
 | 
											
												
													
														|  |  * @author QiYan
 |  |  * @author QiYan
 | 
											
												
													
														|  |  * @date 20221202
 |  |  * @date 20221202
 | 
											
												
													
														|  |  */
 |  |  */
 | 
											
												
													
														|  | -void cmdMainProcess::createVol(int istyle,ENTITY_LIST &cells)
 |  | 
 | 
											
												
													
														|  | 
 |  | +bool cmdMainProcess::createVol(int istyle,ENTITY_LIST &cells)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  | 
 |  | +    string msg_str;
 | 
											
												
													
														|  |      if (istyle==1){//四面体网格
 |  |      if (istyle==1){//四面体网格
 | 
											
												
													
														|  |          USE_TETRA = 1;
 |  |          USE_TETRA = 1;
 | 
											
												
													
														|  |          USE_HEXA = 0;
 |  |          USE_HEXA = 0;
 | 
											
										
											
												
													
														|  | @@ -1116,7 +1207,7 @@ void cmdMainProcess::createVol(int istyle,ENTITY_LIST &cells)
 | 
											
												
													
														|  |          USE_TETRA = 0;
 |  |          USE_TETRA = 0;
 | 
											
												
													
														|  |          USE_HEXA = 0;
 |  |          USE_HEXA = 0;
 | 
											
												
													
														|  |      }else {
 |  |      }else {
 | 
											
												
													
														|  | -        return;
 |  | 
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      if (USE_HEXA == 1)
 |  |      if (USE_HEXA == 1)
 | 
											
										
											
												
													
														|  | @@ -1162,7 +1253,7 @@ void cmdMainProcess::createVol(int istyle,ENTITY_LIST &cells)
 | 
											
												
													
														|  |          if (ADIParam_.hexaParam.components.isEmpty())
 |  |          if (ADIParam_.hexaParam.components.isEmpty())
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |              printf(" hexaParam.components is empty!");
 |  |              printf(" hexaParam.components is empty!");
 | 
											
												
													
														|  | -            return;
 |  | 
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          hexaParams.SetParam("components", ADIParam_.hexaParam.components.toLatin1().data()); // all connected components will be meshed
 |  |          hexaParams.SetParam("components", ADIParam_.hexaParam.components.toLatin1().data()); // all connected components will be meshed
 | 
											
												
													
														|  |          printf("tags %s\n", ADIParam_.hexaParam.components.toLatin1().data());
 |  |          printf("tags %s\n", ADIParam_.hexaParam.components.toLatin1().data());
 | 
											
										
											
												
													
														|  | @@ -1207,10 +1298,20 @@ void cmdMainProcess::createVol(int istyle,ENTITY_LIST &cells)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          // Create Hexa session
 |  |          // Create Hexa session
 | 
											
												
													
														|  |          Spa3dpm::HexaSession hexa;
 |  |          Spa3dpm::HexaSession hexa;
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_3dpm_create_hexa_session(surfMesh_, hexa));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_3dpm_create_hexa_session(surfMesh_, hexa));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          printf("Successfully created hexa session\n");
 |  |          printf("Successfully created hexa session\n");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_3dpm_compute_mesh(hexa, volMesh, &hexaParams));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_3dpm_compute_mesh(hexa, volMesh, &hexaParams));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          printf("Successfully created volume mesh\n");
 |  |          printf("Successfully created volume mesh\n");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          printf("Total Hexahedron count: %d\n", volMesh.HexahedronCount());
 |  |          printf("Total Hexahedron count: %d\n", volMesh.HexahedronCount());
 | 
											
										
											
												
													
														|  | @@ -1227,7 +1328,12 @@ void cmdMainProcess::createVol(int istyle,ENTITY_LIST &cells)
 | 
											
												
													
														|  |          // Create a tetra session that will convert the MeshGems surface mesh into a MeshGems volume mesh containing tetrahedra only.
 |  |          // Create a tetra session that will convert the MeshGems surface mesh into a MeshGems volume mesh containing tetrahedra only.
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          Spa3dpm::TetraHpcSession  tetra;
 |  |          Spa3dpm::TetraHpcSession  tetra;
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_3dpm_create_tetra_hpc_session(surfMesh_, tetra));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_3dpm_create_tetra_hpc_session(surfMesh_, tetra));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          printf("Successfully created tetra session\n");
 |  |          printf("Successfully created tetra session\n");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          // Set Tetra Parameters
 |  |          // Set Tetra Parameters
 | 
											
										
											
												
													
														|  | @@ -1248,7 +1354,12 @@ void cmdMainProcess::createVol(int istyle,ENTITY_LIST &cells)
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_3dpm_compute_mesh(tetra, volMesh, &tetParams));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_3dpm_compute_mesh(tetra, volMesh, &tetParams));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          printf("Successfully created volume mesh\n");
 |  |          printf("Successfully created volume mesh\n");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          printf("Total Tetrahedron count: %d\n", volMesh.TetrahedronCount());
 |  |          printf("Total Tetrahedron count: %d\n", volMesh.TetrahedronCount());
 | 
											
										
											
												
													
														|  | @@ -1262,7 +1373,12 @@ void cmdMainProcess::createVol(int istyle,ENTITY_LIST &cells)
 | 
											
												
													
														|  |          // Create a tetra session that will convert the MeshGems surface mesh into a MeshGems volume mesh containing tetrahedra only.
 |  |          // Create a tetra session that will convert the MeshGems surface mesh into a MeshGems volume mesh containing tetrahedra only.
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          Spa3dpm::HybridSession Hybird;
 |  |          Spa3dpm::HybridSession Hybird;
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_3dpm_create_hybrid_session(surfMesh_, Hybird));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_3dpm_create_hybrid_session(surfMesh_, Hybird));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          printf("Successfully created Hybird session\n");
 |  |          printf("Successfully created Hybird session\n");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          // Set Tetra Parameters
 |  |          // Set Tetra Parameters
 | 
											
										
											
												
													
														|  | @@ -1289,14 +1405,24 @@ void cmdMainProcess::createVol(int istyle,ENTITY_LIST &cells)
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        exit_on_bad_outcome(api_3dpm_compute_mesh(Hybird, volMesh, &HybirdParams));
 |  | 
 | 
											
												
													
														|  | 
 |  | +        msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +        msg_str=exit_on_bad_outcome(api_3dpm_compute_mesh(Hybird, volMesh, &HybirdParams));
 | 
											
												
													
														|  | 
 |  | +        if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +            emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +            return false;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          printf("Successfully created volume mesh\n");
 |  |          printf("Successfully created volume mesh\n");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          printf("Total Tetrahedron count: %d\n", volMesh.TetrahedronCount());
 |  |          printf("Total Tetrahedron count: %d\n", volMesh.TetrahedronCount());
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |      //print_mesh_info(volMesh); // optional
 |  |      //print_mesh_info(volMesh); // optional
 | 
											
												
													
														|  |      //Save the volumen mesh to .mesh (optional)
 |  |      //Save the volumen mesh to .mesh (optional)
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_3dpm_save_mesh(volMesh, "3dpmSample_volMesh.mesh"));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_3dpm_save_mesh(volMesh, "3dpmSample_volMesh.mesh"));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |      printf("Successfully wrote VolMesh to .mesh format\n\n");
 |  |      printf("Successfully wrote VolMesh to .mesh format\n\n");
 | 
											
												
													
														|  |      //// Extract CAD-Mesh associativity information
 |  |      //// Extract CAD-Mesh associativity information
 | 
											
												
													
														|  |      //meshgems_mesh_t *mg_mesh = volMesh.GetMeshgemsMeshPtr();
 |  |      //meshgems_mesh_t *mg_mesh = volMesh.GetMeshgemsMeshPtr();
 | 
											
										
											
												
													
														|  | @@ -1371,20 +1497,26 @@ void cmdMainProcess::createVol(int istyle,ENTITY_LIST &cells)
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    exit_on_bad_outcome(api_3dpm_save_mesh(surfMesh_, "3dpmSample_surfMesh.mesh"));
 |  | 
 | 
											
												
													
														|  | 
 |  | +    msg_str.clear();
 | 
											
												
													
														|  | 
 |  | +    msg_str=exit_on_bad_outcome(api_3dpm_save_mesh(surfMesh_, "3dpmSample_surfMesh.mesh"));
 | 
											
												
													
														|  | 
 |  | +    if(!msg_str.empty()){
 | 
											
												
													
														|  | 
 |  | +        emit LogMsg::getInstance()->send_to_sendClient(object->ToJson("log",msg_str));
 | 
											
												
													
														|  | 
 |  | +        return false;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |      printf("Successfully wrote vol to .mesh format\n");
 |  |      printf("Successfully wrote vol to .mesh format\n");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      //-----
 |  |      //-----
 | 
											
												
													
														|  |      //7.start show for qy --only for self show
 |  |      //7.start show for qy --only for self show
 | 
											
												
													
														|  | -    QProcess *process = new QProcess;
 |  | 
 | 
											
												
													
														|  | -    process->setWorkingDirectory("F:\\czm\\qt_demo\\build-test_hoops-Desktop_Qt_5_12_0_MSVC2015_64bit-Debug\\debug\\gmsh");
 |  | 
 | 
											
												
													
														|  | -    QStringList strLName;
 |  | 
 | 
											
												
													
														|  | -    strLName << QString(appPath + strName);
 |  | 
 | 
											
												
													
														|  | -    process->start("F:\\czm\\qt_demo\\build-test_hoops-Desktop_Qt_5_12_0_MSVC2015_64bit-Debug\\debug\\gmsh\\win\\gmsh-git-Windows64-sdk\\bin\\gmsh.exe", strLName);
 |  | 
 | 
											
												
													
														|  | 
 |  | +//    QProcess *process = new QProcess;
 | 
											
												
													
														|  | 
 |  | +//    process->setWorkingDirectory("F:\\czm\\qt_demo\\build-test_hoops-Desktop_Qt_5_12_0_MSVC2015_64bit-Debug\\debug\\gmsh");
 | 
											
												
													
														|  | 
 |  | +//    QStringList strLName;
 | 
											
												
													
														|  | 
 |  | +//    strLName << QString(appPath + strName);
 | 
											
												
													
														|  | 
 |  | +//    process->start("F:\\czm\\qt_demo\\build-test_hoops-Desktop_Qt_5_12_0_MSVC2015_64bit-Debug\\debug\\gmsh\\win\\gmsh-git-Windows64-sdk\\bin\\gmsh.exe", strLName);
 | 
											
												
													
														|  |      if(crw!=NULL){
 |  |      if(crw!=NULL){
 | 
											
												
													
														|  |          delete crw;
 |  |          delete crw;
 | 
											
												
													
														|  |          crw = NULL;
 |  |          crw = NULL;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | 
 |  | +    return true;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  //-callbacke
 |  |  //-callbacke
 |