Переглянути джерело

9.4fem添加几何导入,网格自动划分

liuqiao 2 роки тому
батько
коміт
8b4bb77fc5

+ 470 - 3
src/views/index/FEMLab/fem.vue

@@ -5,7 +5,28 @@
          <!-- 工具栏 -->
       <!-- <transformtool ref="transform" :servertype="servertype" :projectId='project.projectId'  :wstep='wstep' :bStep='bStep' :vStep='vStep'></transformtool> -->
           <el-tabs   v-model="activeName" type="card" @tab-click="handleClick">
-
+          <el-tab-pane
+                    label="几何导入"
+                    name="one"
+                  >
+                    <div class="imgzong">
+                      <div
+                        class="listitem lbg_color3 bkcolor3"
+                        v-for="(item,index) in geometrylist"
+                        :key="'one0-'+ index"
+                        :class="{activeOrange:active=='one0-'+ index}"
+                        @click="clickgeometry($event,index,'one0-'+ index)"
+                      >
+                        <div class="item2 ">
+                          <el-image
+                            :src="item.icon"
+                            fit="cover"
+                          />
+                          <span>{{item.titlie}}</span>
+                        </div>
+                      </div>
+                    </div>
+                  </el-tab-pane>
             <!-- <el-tab-pane label="几何建模" name="one"><geometry></geometry></el-tab-pane> -->
           <el-tab-pane label="网格划分" name="twos"> 
              <div class="imgzong">
@@ -183,6 +204,51 @@
         </el-tabs>
          </div> 
           </div> 
+           <!-- 几何导入 -->
+    <el-dialog
+      v-if="active=='one0-0'"
+      :visible.sync="dialog.geometry_upload"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+      class="dialog"
+      :modal='false'
+      custom-class='dialoglocation dialog_color'
+      width="385px"
+      v-draggable
+      v-draggleft='[styX.left]'
+    >
+      <div
+        slot="title"
+        class=dialog_header
+      >
+        <el-image
+          class="imge"
+          :src="p22"
+          fit="cover"
+        />
+        <span class="text-color">几何导入</span>
+      </div>
+      <el-form>
+        <vue-uploader
+          ref="geometryugrid"
+          :projectId="project.projectId"
+          :solverType="'hcfd'"
+          :accept="'.igs,stp,sat'"
+          :name="'Load File'"
+          :upId="'3'"
+        ></vue-uploader>
+      </el-form>
+      <div
+        slot="footer"
+        class="dialog-footer"
+      >
+        <el-button @click="dialog.geometry_upload = false">{{ $t("HCFD.file.cancel")}}</el-button>
+        <el-button
+          type="primary"
+          @click="geometryup();dialog.geometry_upload = false"
+        >{{ $t("HCFD.file.ok")}}</el-button>
+      </div>
+    </el-dialog>
             <!-- 文件上传 -->
              <el-dialog
      v-if="active=='one-0'"
@@ -228,6 +294,312 @@
           >{{ $t("HCFD.file.ok")}}</el-button
         >
       </div>
+    </el-dialog>
+      <!-- 网格自动划分 -->
+    <el-dialog
+      v-if="active=='one-2'"
+      :visible.sync="dialog.mesh_generation"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+      class="dialog"
+      :modal='false'
+      custom-class='dialoglocation dialog_color'
+      width="385px"
+      v-draggable
+      v-draggleft='[styX.left]'
+    >
+      <div
+        slot="title"
+        class=dialog_header
+      >
+        <el-image
+          class="imge"
+          :src="p21"
+          fit="cover"
+        />
+        <span class="text-color">网格自动划分</span>
+      </div>
+    <div class="selecr">
+      <el-form>
+          <el-form-item
+            label="划分类型"
+            :label-width="formLabelWidth5"
+          >
+            <el-select
+              v-model="meshval"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in meshvallist"
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <div v-if="meshval=='0'">
+              <div class="radio_text text_color liangf">
+              <div class="classfelx" style="text-align: center;">
+                <el-radio
+                      v-model="meshface"
+                      label="物理尺寸模型"
+                      >物理尺寸模型</el-radio>
+                  </div>
+                    <div class="classfelx">
+                    <el-radio
+                      v-model="meshface"
+                      label="几何尺寸模型"
+                      >几何尺寸模型</el-radio
+                    >
+                    </div>
+            </div>
+          <el-form-item
+            label="面网格类型"
+            :label-width="formLabelWidth5"
+          >
+            <el-select
+              v-model="meshval1"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in meshvallist1"
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item><el-form-item
+            label="模式类型"
+            :label-width="formLabelWidth5"
+          >
+            <el-select
+              v-model="patternval"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in patternlist"
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+             <div class="radio_text text_color liangf" v-if="patternval=='1'">
+              <div class="classfelx" style="text-align: center;">
+                <el-radio
+                      v-model="parameterObj.nmlParam.noninertial_Reference_Frame"
+                      label="on"
+                      >面设置大小</el-radio>
+                  </div>
+                    <div class="classfelx">
+                    <el-radio
+                      v-model="parameterObj.nmlParam.noninertial_Reference_Frame"
+                      label="off"
+                      >边设置大小</el-radio
+                    >
+                    </div>
+            </div>
+        <el-form-item label="最大尺寸" :label-width="formLabelWidth5">
+      <el-input v-model="form.name" autocomplete="off"></el-input>
+    </el-form-item>
+      <el-form-item label="最小尺寸" :label-width="formLabelWidth5">
+      <el-input v-model="form.name" autocomplete="off"></el-input>
+    </el-form-item>
+      <el-form-item label="相邻网格边比率" :label-width="formLabelWidth5">
+      <el-input v-model="form.name" autocomplete="off"></el-input>
+    </el-form-item>
+      <el-form-item label="全局几何大小" :label-width="formLabelWidth5">
+      <el-input v-model="form.name" autocomplete="off"></el-input>
+    </el-form-item>
+     <div v-if="meshface=='几何尺寸模型'">
+          <el-form-item label="弦误差" :label-width="formLabelWidth5">
+      <el-input v-model="form.name" autocomplete="off"></el-input>
+    </el-form-item>
+          <el-form-item label="逼近角度" :label-width="formLabelWidth5">
+      <el-input v-model="form.name" autocomplete="off"></el-input>
+    </el-form-item>
+    </div>
+       <div class='selecttype'>
+              <span class="meshcalss">优化设置选择</span>
+                <el-checkbox-group v-model="checkListset" @change="checksetchange">
+             <el-checkbox label="纠正表面相交"></el-checkbox>
+            <el-checkbox label="优化网络" :disabled='disabledset'></el-checkbox>
+           <el-checkbox label="移除重复CAD面"></el-checkbox>
+          </el-checkbox-group>
+          <el-form-item
+            label="单元阶数选择:"
+            :label-width="formLabelWidth5"
+          >
+            <el-select
+              v-model="eleval"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in elsementlist"
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+             <el-form-item label="雅可比数值:" :label-width="formLabelWidth5">
+          <el-input v-model="form.name" autocomplete="off"></el-input>
+        </el-form-item>    
+          </div>
+          <div class='selecttype'>
+              <span class="meshcalss"> <el-checkbox v-model="facecheckbox" label="面网格生成后的优化设置选择" @change="facechange"></el-checkbox></span>
+                <div class="jieguo">
+              <div class="jiegleft">
+                <div class="radio_text text_color liangf" style="line-height: 160px;">
+              <div class="classfelx" style="text-align: center;">
+                <el-radio
+                      v-model="jiegradio"
+                      label="结构"
+                      :disabled="disabledface"
+                      >结构</el-radio>
+                  </div>
+                    <div class="classfelx">
+                    <el-radio
+                      v-model="jiegradio"
+                      label="流体"
+                       :disabled="disabledface"
+                      >流体</el-radio
+                    >
+                    </div>
+                    </div>
+              </div>
+              <div class="jiegright">
+                  <div class='selecttype' v-if="jiegradio=='结构'">
+                 <span class="meshcalss "> <el-checkbox    :disabled="disabledface"  label="结构使用默认值" v-model="jiegradioval"></el-checkbox></span>
+                   <el-form-item label="重叠角度" :label-width="formLabelWidth2" :disabled='jiegradioval'>
+                  <el-input v-model="form.name" autocomplete="off" ></el-input>
+                </el-form-item>
+                  <el-form-item label="长度阀值" :label-width="formLabelWidth2" :disabled='jiegradioval'>
+                <el-input v-model="form.name" autocomplete="off"></el-input>
+              </el-form-item>
+               </div>
+                <div class='selecttype' v-else>
+                 <span class="meshcalss"> <el-checkbox label="流体使用默认值" v-model="jiegradioval"></el-checkbox></span>
+                   <el-form-item label="重叠角度" :label-width="formLabelWidth2 " :disabled='jiegradioval'>
+                  <el-input v-model="form.name" autocomplete="off"></el-input>
+                </el-form-item>
+                  <el-form-item label="长度阀值" :label-width="formLabelWidth2"  :disabled='jiegradioval'>
+                <el-input v-model="form.name" autocomplete="off"></el-input>
+              </el-form-item>
+               </div>
+              </div>
+              </div>
+             </div>
+          
+              </div>
+              <div v-if="meshval=='1'">
+                <el-form-item
+            label="组件"
+            :label-width="formLabelWidth5"
+          >
+            <el-select
+              v-model="traval"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in tetrahedron"
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+             <el-form-item label="级配" :label-width="formLabelWidth5" >
+                <el-input v-model="form.name" autocomplete="off"></el-input>
+              </el-form-item>
+              </div>
+                 <div v-if="meshval=='2'">
+                <el-form-item
+            label="组件"
+            :label-width="formLabelWidth5"
+          >
+                     <el-select
+              v-model="hexaval"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in hexahedral "
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+               </el-form-item>
+                 </div>
+                     <div v-if="meshval=='3'">
+                   <el-form-item
+            label="网格生成"
+            :label-width="formLabelWidth5"
+          >
+                     <el-select
+              v-model="mixval"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in mixture"
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+               </el-form-item>
+                <el-form-item
+            label="边界层增长方向"
+            :label-width="formLabelWidth5"
+          >
+                     <el-select
+              v-model="layerval"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in boundarylayer "
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+               </el-form-item>
+                <el-form-item label="边界层层数" :label-width="formLabelWidth5" >
+                <el-input v-model="form.name" autocomplete="off"></el-input>
+              </el-form-item>
+               <el-form-item label="边界层增长参数" :label-width="formLabelWidth5" >
+                <el-input v-model="form.name" autocomplete="off"></el-input>
+              </el-form-item>
+               <el-form-item label="初始层高度" :label-width="formLabelWidth5" >
+                <el-input v-model="form.name" autocomplete="off"></el-input>
+              </el-form-item>
+                 </div>
+              <div class="heigeinput">
+                <div class="listbtn"> 
+                    <el-button plain class="anniu">写入参数文件</el-button>
+                      <el-button plain class="anniu">进行网格划分</el-button>
+                    </div>
+              </div> 
+      </el-form>
+    </div>
+      <div
+        slot="footer"
+        class="dialog-footer"
+      >
+        <el-button @click="dialog.mesh_generation = false">{{ $t("HCFD.file.cancel")}}</el-button>
+        <el-button
+          type="primary"
+          @click="dialog.mesh_generation = false"
+        >{{ $t("HCFD.file.ok")}}</el-button>
+      </div>
     </el-dialog>
           <!-- 弹出框 创建集合-->
            <el-dialog
@@ -2065,7 +2437,11 @@ import p17 from '@/assets/icon/animation.png'
 import p18 from '@/assets/icon/result_curve.png'
 import p19 from '@/assets/hcfd_images/run.png'
 import p20 from '@/assets/icon/u3739.png'
+import p21 from "@/assets/icon/u854.png";
+import p22 from "@/assets/icon/u237.png";
+import p23 from "@/assets/icon/u3313.png";
 import { number } from 'echarts/lib/export';
+
 //  const draggleft = (el, binding) => {
 //     let dialogleft=el.querySelector('.el-dialog');
 // };
@@ -2094,7 +2470,14 @@ export default {
     },
   data() {
     return {
-  
+    meshface:'物理尺寸模型',
+      jiegradioval:false,
+      facecheckbox:false,
+      disabledface:true,
+      jiegradioval:false,
+       jiegradio:"结构",
+      checkListset:['纠正表面相交'],
+      disabledset:true,
      lowbool:false,
    Quickbool:false,
     Startbool:false,
@@ -2117,7 +2500,7 @@ export default {
         zoomarr:[],
      },
        Stepe:'',
-      p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,
+      p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,
       femstate:-1,
         isVolume:"",
         outlineobj:{
@@ -2242,10 +2625,63 @@ export default {
         left:''
       },
       fempid:'',
+      geometrylist: [{ icon: p22, titlie: "几何导入" }],
       meshimport:[
            { icon:q4, titlie:'文件上传'},
+           { icon: p23, titlie: "几何网格检测" },
+           { icon: p21, titlie: "网格自动划分" },
           
         ],
+         meshvallist:[
+        { value: "0", name: "面网格" },
+        { value: "1", name: "四面体网格" },
+        { value: "2", name: "六面体网格" },
+        { value: "3", name: "混合网格" },
+      ],
+       meshval:'0',
+         meshvallist1:[
+        { value: "0", name: "三角行" },
+        { value: "1", name: "四边形" },
+        { value: "2", name: "全四边形" },
+        { value: "3", name: "局部" },
+      ],
+       meshval1:'0',
+       patternlist:[
+        { value: "0", name: "global" },
+        { value: "1", name: "local" },
+        { value: "2", name: "none" },
+      ],
+       patternval:'0',
+        elsementlist:[
+        { value: "0", name: "linear" },
+        { value: "1", name: "quadratic" },
+      ],
+       eleval:'0',
+       tetrahedron:[
+        { value: "0", name: "outside_components" },
+        { value: "1", name: "all" },
+      ],
+       traval:'0',
+       hexahedral:[
+        { value: "0", name: "outside_components" },
+        { value: "1", name: "outside_skin_only" },
+        { value: "2", name: "all" },
+      ],
+      hexaval:'0',
+         mixture :[
+         { value: "0", name: "tetra_dominant" },
+        { value: "1", name: "hexa_dominant" },
+        { value: "2", name: "extrusion_only" },
+        { value: "3", name: "cartesian_core" },
+      ],
+      mixval:'0',
+      hemxval:'0',
+        boundarylayer   :[
+        { value: "0", name: "正" },
+        { value: "1", name: "负" },
+       
+      ],
+      layerval:'0',
       femsolverConfigid:'',
          parameterObj: {
            alphad: {key: 'alphad', order: '2', value: '0.0'},
@@ -2335,6 +2771,8 @@ export default {
         },
             dialog:{
               fem_upload:false,
+               geometry_upload: false,
+               mesh_generation:false,
               create_visiable:false,
               attribute_visiable:false,
               materials_visiable:false,
@@ -3025,9 +3463,16 @@ this.styX.left=e.clientX+'px';
 
 //console.log(document.querySelector('.el-dialog').style.left );
     this.active=key;
+    console.log(key);
   switch(key){
+    case "one0-0":
+     this.dialog.geometry_upload = true;
+   break;
  case 'one-0':
        this.dialog.fem_upload=true;
+      break;
+         case 'one-2':
+       this.dialog.mesh_generation=true;
       break;
     case 'two-0':
        this.dialog.create_visiable=true;
@@ -3551,6 +3996,23 @@ this.bStepok("animation",'','')
             .catch((err) => {
             }); 
       },
+      checksetchange(val){
+      if(val.includes("纠正表面相交")){
+        this.disabledset=true;
+     let myArray=this.checkListset;
+      this.checkListset = myArray.filter(function(item) {return item !== "优化网络"
+});
+      }else{
+         this.disabledset=false;
+      }
+    },
+   facechange(){
+      if(this.facecheckbox){
+        this.disabledface=false;
+      }else{
+        this.disabledface=true;
+      }
+   }
   },
     watch: {
        'animationobj.currentstep' () {
@@ -3598,6 +4060,11 @@ line-height: 30px;
   .el-dialog__wrapper{
           top: 20vh;
   }
+.selecr {
+  .el-form-item__label{
+        font-size: 12px;
+  }
+}
 .btnaniu{
   text-align: right;
 }

+ 46 - 19
src/views/index/FEMLab/fileupload.vue

@@ -182,27 +182,54 @@ export default {
                 })
             });
             this.uploader.on( 'uploadSuccess', ( file ,response) =>{
-                       if(file.ext=='bdf'){
-                        this.gridFileId=response.bfid;
-                          let params = {
-                            transCode: "B00029",
-                            bfid: response.bfid,
-                            };
-                            request(params)
-                                .then((res) => {
-                                    console.log(res)
-                                v_this.files.forEach((fileObj) => {
-                                if ((fileObj.id = file.id)){
-                                    fileObj.msg = "已上传";
-                                    v_this.$emit('upoK')
-                                }
-                                v_this.fembdf(response.bfid);
-                                });
+                console.log(file.ext);
+            console.log(response);
+               this.gridFileId=response.bfid;
+                let params = {
+                    transCode: "B00029",
+                    bfid: response.bfid,
+                };
+                request(params)
+                    .then((res) => {
+                    console.log(res);
+                    v_this.files.forEach((fileObj) => {
+                        if ((fileObj.id = file.id)) {
+                        fileObj.msg = "已上传";
+                        v_this.$emit('upoK')
+                        }
+                        if (file.ext=='bdf') {
+                        v_this.fembdf(response.bfid);
+                        }else{
+                            
+                        }
+                    });
+                    })
+                    .catch((err) => {});
+                // if(file.ext=='bdf'){
+                //      this.gridFileId=response.bfid;
+
+                // }
+                //        if(file.ext=='bdf'){
+                //         this.gridFileId=response.bfid;
+                //           let params = {
+                //             transCode: "B00029",
+                //             bfid: response.bfid,
+                //             };
+                //             request(params)
+                //                 .then((res) => {
+                //                     console.log(res)
+                //                 v_this.files.forEach((fileObj) => {
+                //                 if ((fileObj.id = file.id)){
+                //                     fileObj.msg = "已上传";
+                //                     v_this.$emit('upoK')
+                //                 }
+                //                 v_this.fembdf(response.bfid);
+                //                 });
                                 
-                            })
-                            .catch((err) => {});
+                //             })
+                //             .catch((err) => {});
                      
-                }
+                // }
               
             });
             //

+ 2 - 2
src/views/index/HCFDLab/index.vue

@@ -798,7 +798,7 @@
                  <div v-if="meshval=='2'">
                 <el-form-item
             label="组件"
-            :label-width="formLabelWidth2"
+            :label-width="formLabelWidth5"
           >
                      <el-select
               v-model="hexaval"
@@ -5050,7 +5050,7 @@ export default {
       ],
        meshval:'0',
          meshvallist1:[
-        { value: "0", name: "三行" },
+        { value: "0", name: "三行" },
         { value: "1", name: "四边形" },
         { value: "2", name: "全四边形" },
         { value: "3", name: "局部" },