⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xdr_cptc_msh.c

📁 算断裂的
💻 C
字号:
#include "MshFmt2.h"
#include "cptc_geomsh_utils.h"
#include <stdio.h>

/* -------------------------------------------------------------------- */

bool_t xdr_Cptc_Mnode(XDR* xdrs, Cptc_Mnode* t) {
  int i;
  if (!xdr_int(xdrs, &t -> id)) return (FALSE);
  for (i = 0; i < 3; ++i) {
    if (!xdr_double(xdrs, &(t -> coord[i]))) return (FALSE);
  }
  return (TRUE);
   
}

bool_t xdr_Cptc_NodeCurveInc(XDR* xdrs, Cptc_NodeCurveInc* t) {
  if (!xdr_int(xdrs, &t -> id)) return (FALSE);
  if (!xdr_int(xdrs, &t -> curve_index)) return (FALSE);
  if (!xdr_double(xdrs, &t -> param)) return (FALSE);
  return (TRUE);
}


bool_t xdr_Cptc_NodePatchInc(XDR* xdrs, Cptc_NodePatchInc* t) {
  if (!xdr_int(xdrs, &t -> id)) return (FALSE);
  if (!xdr_int(xdrs, &t -> patch_index)) return (FALSE);
  if (!xdr_double(xdrs, &t -> param[0])) return (FALSE);
  if (!xdr_double(xdrs, &t -> param[1])) return (FALSE);
  return (TRUE);
}

bool_t xdr_Cptc_MeshTopVertexInfo(XDR* xdrs, Cptc_MeshTopVertexInfo* t) {
  if (!xdr_int(xdrs, &t -> vtx)) return (FALSE);
  return (TRUE);
}


typedef Cptc_Global_Node Cptc_xdrmesh_c_int2[2];
typedef Cptc_Global_Node Cptc_xdrmesh_c_int3[3];
typedef Cptc_Global_Node Cptc_xdrmesh_c_int4[4];
typedef Cptc_Global_Node Cptc_xdrmesh_c_int5[5];
typedef Cptc_Global_Node Cptc_xdrmesh_c_int6[6];
typedef Cptc_Global_Node Cptc_xdrmesh_c_int8[8];


bool_t xdr_Cptc_MeshTopEdgeInfo(XDR* xdrs, Cptc_MeshTopEdgeInfo* t) {
  int i, j;
  if (!xdr_int(xdrs, &t -> num_mnode)) return (FALSE);
  if (xdrs->x_op == XDR_DECODE) {
    t -> incs = 
      (Cptc_NodeCurveInc *) cptc_malloc((t -> num_mnode) * sizeof(Cptc_NodeCurveInc));
  }
  for (i = 0; i < t -> num_mnode; ++i) {
    if (!xdr_Cptc_NodeCurveInc(xdrs, &(t -> incs[i]))) return (FALSE);
  }
  if (!xdr_int(xdrs, &t -> num_medge)) return (FALSE);
  if (xdrs->x_op == XDR_DECODE) {
    t -> edgelist = 
      (Cptc_xdrmesh_c_int2*) cptc_malloc((t -> num_medge) * sizeof(Cptc_xdrmesh_c_int2));
  }
  for (i = 0; i < t -> num_medge; ++i) {
    for (j = 0; j < 2; ++j)
      if (!xdr_int(xdrs, &(t -> edgelist[i][j]))) return (FALSE);
  }
  return (TRUE);
}

bool_t xdr_Cptc_MeshTopSurfaceInfo(XDR* xdrs, Cptc_MeshTopSurfaceInfo* t) {
  int i, j;
  if (!xdr_int(xdrs, &t -> num_mnode)) return (FALSE);
  if (xdrs->x_op == XDR_DECODE) {
    t -> incs = 
      (Cptc_NodePatchInc *) cptc_malloc((t -> num_mnode) * sizeof(Cptc_NodePatchInc));
  }
  for (i = 0; i < t -> num_mnode; ++i) {
    if (!xdr_Cptc_NodePatchInc(xdrs, &(t -> incs[i]))) return (FALSE);
  }
  if (!xdr_int(xdrs, &t -> num_mtrifacet)) return (FALSE);
  if (xdrs->x_op == XDR_DECODE) {
    t -> trifacetlist = 
      (Cptc_xdrmesh_c_int3*) cptc_malloc((t -> num_mtrifacet) * sizeof(Cptc_xdrmesh_c_int3));
  }
  for (i = 0; i < t -> num_mtrifacet; ++i) {
    for (j = 0; j < 3; ++j)
      if (!xdr_int(xdrs, &(t -> trifacetlist[i][j]))) return (FALSE);
  }
  if (!xdr_int(xdrs, &t -> num_mquadfacet)) return (FALSE);
  if (xdrs->x_op == XDR_DECODE) {
    t -> quadfacetlist = 
      (Cptc_xdrmesh_c_int4*) cptc_malloc((t -> num_mquadfacet) * sizeof(Cptc_xdrmesh_c_int4));
  }
  for (i = 0; i < t -> num_mquadfacet; ++i) {
    for (j = 0; j < 4; ++j)
      if (!xdr_int(xdrs, &(t -> quadfacetlist[i][j]))) return (FALSE);
  }
  return (TRUE);
}



bool_t xdr_Cptc_MeshTopRegionInfo(XDR* xdrs, Cptc_MeshTopRegionInfo* t) {
  int i, j;
  if (!xdr_int(xdrs, &t -> num_tet)) return (FALSE);
  if (xdrs->x_op == XDR_DECODE) {
    t -> tets = 
      (Cptc_xdrmesh_c_int4 *) cptc_malloc((t -> num_tet) * sizeof(Cptc_xdrmesh_c_int4));
  }
  for (i = 0; i < t -> num_tet; ++i) {
    for (j = 0; j < 4; ++j)
      if (!xdr_int(xdrs, &t -> tets[i][j])) return (FALSE);
  }
  if (!xdr_int(xdrs, &t -> num_pyramid)) return (FALSE);
  if (xdrs->x_op == XDR_DECODE) {
    t -> pyramids = 
      (Cptc_xdrmesh_c_int5 *) cptc_malloc((t -> num_pyramid) * sizeof(Cptc_xdrmesh_c_int5));
  }
  for (i = 0; i < t -> num_pyramid; ++i) {
    for (j = 0; j < 5; ++j)
      if (!xdr_int(xdrs, &t -> pyramids[i][j])) return (FALSE);
  }
  if (!xdr_int(xdrs, &t -> num_prism)) return (FALSE);
  if (xdrs->x_op == XDR_DECODE) {
    t -> prisms = 
      (Cptc_xdrmesh_c_int6 *) cptc_malloc((t -> num_prism) * sizeof(Cptc_xdrmesh_c_int6));
  }
  for (i = 0; i < t -> num_prism; ++i) {
    for (j = 0; j < 6; ++j)
      if (!xdr_int(xdrs, &t -> prisms[i][j])) return (FALSE);
  }
  if (!xdr_int(xdrs, &t -> num_hex)) return (FALSE);
  if (xdrs->x_op == XDR_DECODE) {
    t -> hexs = 
      (Cptc_xdrmesh_c_int8 *) cptc_malloc((t -> num_hex) * sizeof(Cptc_xdrmesh_c_int8));
  }
  for (i = 0; i < t -> num_hex; ++i) {
    for (j = 0; j < 8; ++j)
      if (!xdr_int(xdrs, &t -> hexs[i][j])) return (FALSE);
  }
  return (TRUE);
}


/* -------------------------------------------------------------------- */

bool_t xdr_Cptc_MshDesc(XDR* xdrs, Cptc_MshDesc** mshp)
{
  int i;
  unsigned int stringlen;
  Cptc_MshDesc* msh;

  if (xdrs -> x_op == XDR_DECODE) {
    msh = (Cptc_MshDesc*)cptc_malloc(sizeof(Cptc_MshDesc));
    *mshp = msh;
  }
  else {
    msh = *mshp;
  }

  if (!xdr_int(xdrs, &msh->intrinsic_dimension)) 
    return (FALSE);
  if (!xdr_int(xdrs, &msh->embedded_dimension)) 
    return (FALSE);
  if (!xdr_int(xdrs, &msh->num_nodes)) 
    return (FALSE);
  if (!xdr_int(xdrs, &msh->num_elems)) 
    return (FALSE);
  if (!xdr_int(xdrs, &msh->num_top_vertices)) 
    return (FALSE);
  if (!xdr_int(xdrs, &msh->num_top_edges)) 
    return (FALSE);
  if (!xdr_int(xdrs, &msh->num_top_surfaces)) 
    return (FALSE);
  if (!xdr_int(xdrs, &msh->num_top_regions)) 
    return (FALSE);
  if (!xdr_int(xdrs, &msh -> num_prop_val))
    return (FALSE);
  if (xdrs -> x_op == XDR_DECODE) {
    msh -> props = (char**) cptc_malloc(msh -> num_prop_val * sizeof(char*));
    msh -> vals = (char**) cptc_malloc(msh -> num_prop_val * sizeof(char*));
  }
  for (i = 0; i < msh -> num_prop_val; ++i) {
    if (xdrs -> x_op != XDR_DECODE)
      stringlen = strlen(msh -> props[i]);
    if (!xdr_u_int(xdrs, &stringlen)) return (FALSE);
    if (xdrs -> x_op == XDR_DECODE) {
      msh -> props[i] = (char*) cptc_malloc((stringlen + 1) * sizeof(char));
    }
    if (!xdr_string(xdrs, &(msh -> props[i]), stringlen)) return (FALSE);  

    if (xdrs -> x_op != XDR_DECODE)
      stringlen = strlen(msh -> vals[i]);
    if (!xdr_u_int(xdrs, &stringlen)) return (FALSE);  
    if (xdrs -> x_op == XDR_DECODE) {
      msh -> vals[i] = (char*) cptc_malloc((stringlen + 1) * sizeof(char));
    }
    if (!xdr_string(xdrs, &(msh -> vals[i]), stringlen)) return (FALSE);  
  }
  if (xdrs -> x_op == XDR_DECODE) 
    msh -> nodes = (Cptc_Mnode*) cptc_malloc((msh -> num_nodes) * sizeof(Cptc_Mnode));
  for (i = 0; i < msh -> num_nodes; ++i) { 
    if (!xdr_Cptc_Mnode(xdrs, &(msh -> nodes[i])))
      return (FALSE);
  }
  if (xdrs -> x_op == XDR_DECODE) {
    msh -> vtxinfo = (Cptc_MeshTopVertexInfo*) 
      cptc_malloc(msh -> num_top_vertices * sizeof(Cptc_MeshTopVertexInfo));
  }
  for (i = 0; i < msh -> num_top_vertices; ++i) {
    if (!xdr_Cptc_MeshTopVertexInfo(xdrs, &(msh -> vtxinfo[i])))
      return (FALSE);
  }
  if (xdrs -> x_op == XDR_DECODE) {
    msh -> edgeinfo = (Cptc_MeshTopEdgeInfo*) 
      cptc_malloc(msh -> num_top_edges * sizeof(Cptc_MeshTopEdgeInfo));
  }
  for (i = 0; i < msh -> num_top_edges; ++i) {
    if (!xdr_Cptc_MeshTopEdgeInfo(xdrs, &(msh -> edgeinfo[i])))
      return (FALSE);
  }
  if (xdrs -> x_op == XDR_DECODE) {
    msh -> surfinfo = (Cptc_MeshTopSurfaceInfo*) 
      cptc_malloc(msh -> num_top_surfaces * sizeof(Cptc_MeshTopSurfaceInfo));
  }
  for (i = 0; i < msh -> num_top_surfaces; ++i) {
    if (!xdr_Cptc_MeshTopSurfaceInfo(xdrs, &(msh -> surfinfo[i])))
      return (FALSE);
  }
  if (xdrs -> x_op == XDR_DECODE) {
    msh -> regioninfo = (Cptc_MeshTopRegionInfo*) 
      cptc_malloc(msh -> num_top_regions * sizeof(Cptc_MeshTopRegionInfo));
  }
  for (i = 0; i < msh -> num_top_regions; ++i) {
    if (!xdr_Cptc_MeshTopRegionInfo(xdrs, &(msh -> regioninfo[i])))
      return (FALSE);
  }
  return (TRUE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -