예제 #1
0
MVertex_ptr MVs_Merge_R3R4(MVertex_ptr v1, MVertex_ptr v2, int topoflag) {
  int idx, gdim, gid, nsets;
  MFace_ptr   face;
  Mesh_ptr    mesh;
  List_ptr    vfaces2;
  MSet_ptr    mset;

  mesh = MV_Mesh(v1);
  gid = MV_GEntID(v1);
  gdim = MV_GEntDim(v1);

  if (mesh != MF_Mesh(v2)) {
    MSTK_Report("MVs_Join","Vertices not from same mesh",MSTK_ERROR);
    return 0;
  }
  else if (topoflag) { /* Make sure model topology is not violated */ 
    if (gid != MV_GEntID(v2) || gdim != MV_GEntDim(v2)) {
      MSTK_Report("MFs_Join","Faces not from same geometric entity",MSTK_ERROR);
      return 0;
    }
  }

  vfaces2 = MV_Faces(v2);

  if (vfaces2) {

    idx = 0;
    while ((face = List_Next_Entry(vfaces2,&idx)))
      MF_Replace_Vertex(face,v2,v1);

    List_Delete(vfaces2);
  }

  nsets = MESH_Num_MSets(mesh);
  if(nsets) {
    idx = 0;
    while ((mset = (MSet_ptr) MESH_Next_MSet(mesh,&idx))) {
      if (MSet_Contains(mset, v2)) {
        if(MSet_Contains(mset, v1))
          MSet_Rem(mset, v2);
        else
          MSet_Replace(mset, v2, v1);
      }
    }
  }
  
  MV_Delete(v2,1);

  return v1;
}
예제 #2
0
MVertex_ptr MVs_Merge_R1R2(MVertex_ptr v1, MVertex_ptr v2, int topoflag) {
  int i, idx, gdim, gid;
  MFace_ptr   face;
  MRegion_ptr region;
  Mesh_ptr    mesh;
  List_ptr    vfaces2, vregions2;

  mesh = MV_Mesh(v1);
  gid = MV_GEntID(v1);
  gdim = MV_GEntDim(v1);

  if (mesh != MF_Mesh(v2)) {
    MSTK_Report("MVs_Join","Vertices not from same mesh",MSTK_ERROR);
    return 0;
  }
  else if (topoflag) { /* make sure geometric model topology is not violated */
    if (gid != MV_GEntID(v2) || gdim != MV_GEntDim(v2)) {
      MSTK_Report("MFs_Join","Faces not from same geometric entity",MSTK_ERROR);
      return 0;
    }
  }


  vfaces2 = MV_Faces(v2);

  if (vfaces2) {

    idx = 0;
    while ((face = List_Next_Entry(vfaces2,&idx)))
      MF_Replace_Vertex(face,v2,v1);

    List_Delete(vfaces2);
  }

  
  vregions2 = MV_Regions(v2);

  if (vregions2) {

    idx = 0;
    while ((region = List_Next_Entry(vregions2,&idx)))
      MR_Replace_Vertex(region,v2,v1);

    List_Delete(vregions2);
  }

  MV_Delete(v2,0);

  return v1;
}