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

📄 file.cpp

📁 最新osg包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    Lib3dsMesh *p;    Lib3dsChunk c;        for (p=file->meshes; p!=0; p=p->next) {      c.chunk=LIB3DS_NAMED_OBJECT;      if (!lib3ds_chunk_write_start(&c,f)) {        return(LIB3DS_FALSE);      }      lib3ds_string_write(p->name,f);      lib3ds_mesh_write(p,f);      if (!lib3ds_chunk_write_end(&c,f)) {        return(LIB3DS_FALSE);      }    }  }  if (!lib3ds_chunk_write_end(&c,f)) {    return(LIB3DS_FALSE);  }  return(LIB3DS_TRUE);}static Lib3dsBoolnodes_write(Lib3dsNode *node, Lib3dsFile *file, FILE *f){  {    Lib3dsNode *p;    for (p=node->childs; p!=0; p=p->next) {      if (!lib3ds_node_write(p, file, f)) {        return(LIB3DS_FALSE);      }      nodes_write(p, file, f);    }  }  return(LIB3DS_TRUE);}static Lib3dsBoolkfdata_write(Lib3dsFile *file, FILE *f){  Lib3dsChunk c;    c.chunk=LIB3DS_KFDATA;  if (!lib3ds_chunk_write_start(&c,f)) {    return(LIB3DS_FALSE);  }    { /*---- LIB3DS_KFHDR ----*/    Lib3dsChunk c;    c.chunk=LIB3DS_KFHDR;    c.size=6 + 2 + strlen(file->name)+1 +4;    lib3ds_chunk_write(&c,f);    lib3ds_intw_write(file->keyf_revision,f);    lib3ds_string_write(file->name, f);    lib3ds_intd_write(file->frames, f);  }  { /*---- LIB3DS_KFSEG ----*/    Lib3dsChunk c;    c.chunk=LIB3DS_KFSEG;    c.size=14;    lib3ds_chunk_write(&c,f);    lib3ds_intd_write(file->segment_from,f);    lib3ds_intd_write(file->segment_to,f);  }  { /*---- LIB3DS_KFCURTIME ----*/    Lib3dsChunk c;    c.chunk=LIB3DS_KFCURTIME;    c.size=10;    lib3ds_chunk_write(&c,f);    lib3ds_intd_write(file->current_frame,f);  }  lib3ds_viewport_write(&file->viewport_keyf, f);    {    Lib3dsNode *p;    for (p=file->nodes; p!=0; p=p->next) {      if (!lib3ds_node_write(p, file, f)) {        return(LIB3DS_FALSE);      }      if (!nodes_write(p, file, f)) {        return(LIB3DS_FALSE);      }    }  }    if (!lib3ds_chunk_write_end(&c,f)) {    return(LIB3DS_FALSE);  }  return(LIB3DS_TRUE);}/*! * \ingroup file */Lib3dsBoollib3ds_file_write(Lib3dsFile *file, FILE *f){  Lib3dsChunk c;  c.chunk=LIB3DS_M3DMAGIC;  if (!lib3ds_chunk_write_start(&c,f)) {    LIB3DS_ERROR_LOG;    return(LIB3DS_FALSE);  }  { /*---- LIB3DS_M3D_VERSION ----*/    Lib3dsChunk c;    c.chunk=LIB3DS_M3D_VERSION;    c.size=10;    lib3ds_chunk_write(&c,f);    lib3ds_dword_write(file->mesh_version, f);  }  if (!mdata_write(file, f)) {    return(LIB3DS_FALSE);  }  if (!kfdata_write(file, f)) {    return(LIB3DS_FALSE);  }  if (!lib3ds_chunk_write_end(&c,f)) {    return(LIB3DS_FALSE);  }  return(LIB3DS_TRUE);}/*! * \ingroup file */voidlib3ds_file_insert_material(Lib3dsFile *file, Lib3dsMaterial *material){  Lib3dsMaterial *p,*q;    ASSERT(file);  ASSERT(material);  ASSERT(!material->next);  q=0;  for (p=file->materials; p!=0; p=p->next) {    if (strcmp(material->name, p->name)<0) {      break;    }    q=p;  }  if (!q) {    material->next=file->materials;    file->materials=material;  }  else {    material->next=q->next;    q->next=material;  }}/*! * \ingroup file */voidlib3ds_file_remove_material(Lib3dsFile *file, Lib3dsMaterial *material){  Lib3dsMaterial *p,*q;  ASSERT(file);  ASSERT(material);  ASSERT(file->materials);  for (p=0,q=file->materials; q; p=q,q=q->next) {    if (q==material) {      break;    }  }  if (!q) {    ASSERT(LIB3DS_FALSE);    return;  }  if (!p) {    file->materials=material->next;  }  else {    p->next=q->next;  }  material->next=0;}/*! * \ingroup file */Lib3dsMaterial*lib3ds_file_material_by_name(Lib3dsFile *file, const char *name){  Lib3dsMaterial *p;  ASSERT(file);  for (p=file->materials; p!=0; p=p->next) {    if (strcmp(p->name,name)==0) {      return(p);    }  }  return(0);}/*! * \ingroup file */voidlib3ds_file_dump_materials(Lib3dsFile *file){  Lib3dsMaterial *p;  ASSERT(file);  for (p=file->materials; p!=0; p=p->next) {    lib3ds_material_dump(p);  }}/*! * \ingroup file */voidlib3ds_file_insert_mesh(Lib3dsFile *file, Lib3dsMesh *mesh){  Lib3dsMesh *p,*q;    ASSERT(file);  ASSERT(mesh);  ASSERT(!mesh->next);  q=0;  for (p=file->meshes; p!=0; p=p->next) {    if (strcmp(mesh->name, p->name)<0) {      break;    }    q=p;  }  if (!q) {    mesh->next=file->meshes;    file->meshes=mesh;  }  else {    mesh->next=q->next;    q->next=mesh;  }}/*! * \ingroup file */voidlib3ds_file_remove_mesh(Lib3dsFile *file, Lib3dsMesh *mesh){  Lib3dsMesh *p,*q;  ASSERT(file);  ASSERT(mesh);  ASSERT(file->meshes);  for (p=0,q=file->meshes; q; p=q,q=q->next) {    if (q==mesh) {      break;    }  }  if (!q) {    ASSERT(LIB3DS_FALSE);    return;  }  if (!p) {    file->meshes=mesh->next;  }  else {    p->next=q->next;  }  mesh->next=0;}/*! * \ingroup file */Lib3dsMesh*lib3ds_file_mesh_by_name(Lib3dsFile *file, const char *name){  Lib3dsMesh *p;  ASSERT(file);  for (p=file->meshes; p!=0; p=p->next) {    if (strcmp(p->name,name)==0) {      return(p);    }  }  return(0);}/*! * \ingroup file */voidlib3ds_file_dump_meshes(Lib3dsFile *file){  Lib3dsMesh *p;  ASSERT(file);  for (p=file->meshes; p!=0; p=p->next) {    lib3ds_mesh_dump(p);  }}static voiddump_instances(Lib3dsNode *node, const char* parent){  Lib3dsNode *p;  char name[255];  ASSERT(node);  ASSERT(parent);  strcpy(name, parent);  strcat(name, ".");  strcat(name, node->name);  if (node->type==LIB3DS_OBJECT_NODE) {    printf("  %s : %s\n", name, node->data.object.instance);  }  for (p=node->childs; p!=0; p=p->next) {    dump_instances(p, parent);  }}/*! * \ingroup file */voidlib3ds_file_dump_instances(Lib3dsFile *file){  Lib3dsNode *p;  ASSERT(file);  for (p=file->nodes; p!=0; p=p->next) {    dump_instances(p,"");  }}/*! * \ingroup file */voidlib3ds_file_insert_camera(Lib3dsFile *file, Lib3dsCamera *camera){  Lib3dsCamera *p,*q;    ASSERT(file);  ASSERT(camera);  ASSERT(!camera->next);  q=0;  for (p=file->cameras; p!=0; p=p->next) {    if (strcmp(camera->name, p->name)<0) {      break;    }    q=p;  }  if (!q) {    camera->next=file->cameras;    file->cameras=camera;  }  else {    camera->next=q->next;    q->next=camera;  }}/*! * \ingroup file */voidlib3ds_file_remove_camera(Lib3dsFile *file, Lib3dsCamera *camera){  Lib3dsCamera *p,*q;  ASSERT(file);  ASSERT(camera);  ASSERT(file->cameras);  for (p=0,q=file->cameras; q; p=q,q=q->next) {    if (q==camera) {      break;    }  }  if (!q) {    ASSERT(LIB3DS_FALSE);    return;  }  if (!p) {    file->cameras=camera->next;  }  else {    p->next=q->next;  }  camera->next=0;}/*! * \ingroup file */Lib3dsCamera*lib3ds_file_camera_by_name(Lib3dsFile *file, const char *name){  Lib3dsCamera *p;  ASSERT(file);  for (p=file->cameras; p!=0; p=p->next) {    if (strcmp(p->name,name)==0) {      return(p);    }  }  return(0);}/*! * \ingroup file */voidlib3ds_file_dump_cameras(Lib3dsFile *file){  Lib3dsCamera *p;  ASSERT(file);  for (p=file->cameras; p!=0; p=p->next) {    lib3ds_camera_dump(p);  }}/*! * \ingroup file */voidlib3ds_file_insert_light(Lib3dsFile *file, Lib3dsLight *light){  Lib3dsLight *p,*q;    ASSERT(file);  ASSERT(light);  ASSERT(!light->next);  q=0;  for (p=file->lights; p!=0; p=p->next) {    if (strcmp(light->name, p->name)<0) {      break;    }    q=p;  }  if (!q) {    light->next=file->lights;    file->lights=light;  }  else {    light->next=q->next;    q->next=light;  }}/*! * \ingroup file */voidlib3ds_file_remove_light(Lib3dsFile *file, Lib3dsLight *light){  Lib3dsLight *p,*q;  ASSERT(file);  ASSERT(light);  ASSERT(file->lights);  for (p=0,q=file->lights; q; p=q,q=q->next) {    if (q==light) {      break;    }  }  if (!q) {    ASSERT(LIB3DS_FALSE);    return;  }  if (!p) {    file->lights=light->next;  }  else {    p->next=q->next;  }  light->next=0;}/*! * \ingroup file */Lib3dsLight*lib3ds_file_light_by_name(Lib3dsFile *file, const char *name){  Lib3dsLight *p;  ASSERT(file);  for (p=file->lights; p!=0; p=p->next) {    if (strcmp(p->name,name)==0) {      return(p);    }  }  return(0);}/*! * \ingroup file */voidlib3ds_file_dump_lights(Lib3dsFile *file){  Lib3dsLight *p;  ASSERT(file);  for (p=file->lights; p!=0; p=p->next) {    lib3ds_light_dump(p);  }}/*! * \ingroup file */voidlib3ds_file_bounding_box(Lib3dsFile *file, Lib3dsVector min, Lib3dsVector max){  Lib3dsBool init=LIB3DS_FALSE;  {    Lib3dsVector lmin, lmax;    Lib3dsMesh *p=file->meshes;    if (!init && p) {      init = LIB3DS_TRUE;      lib3ds_mesh_bounding_box(p, min, max);      p = p->next;      }    while (p) {      lib3ds_mesh_bounding_box(p, lmin, lmax);      lib3ds_vector_min(min, lmin);      lib3ds_vector_max(max, lmax);      p=p->next;    }  }  {    Lib3dsCamera *p=file->cameras;    if (!init && p) {      init = LIB3DS_TRUE;      lib3ds_vector_copy(min, p->position);      lib3ds_vector_copy(max, p->position);    }    while (p) {      lib3ds_vector_min(min, p->position);      lib3ds_vector_max(max, p->position);      lib3ds_vector_min(min, p->target);      lib3ds_vector_max(max, p->target);      p=p->next;    }  }  {    Lib3dsLight *p=file->lights;    if (!init && p) {      init = LIB3DS_TRUE;      lib3ds_vector_copy(min, p->position);      lib3ds_vector_copy(max, p->position);    }    while (p) {      lib3ds_vector_min(min, p->position);      lib3ds_vector_max(max, p->position);      if (p->spot_light) {        lib3ds_vector_min(min, p->spot);        lib3ds_vector_max(max, p->spot);      }      p=p->next;    }  }}  /*! * \ingroup file */Lib3dsNode*lib3ds_file_node_by_name(Lib3dsFile *file, const char* name, Lib3dsNodeTypes type){  Lib3dsNode *p,*q;  ASSERT(file);  for (p=file->nodes; p!=0; p=p->next) {    if ((p->type==type) && (strcmp(p->name, name)==0)) {      return(p);    }    q=lib3ds_node_by_name(p, name, type);    if (q) {      return(q);    }  }  return(0);}/*! * \ingroup file */Lib3dsNode*lib3ds_file_node_by_id(Lib3dsFile *file, Lib3dsWord node_id){  Lib3dsNode *p,*q;  ASSERT(file);  for (p=file->nodes; p!=0; p=p->next) {    if (p->node_id==node_id) {      return(p);    }    q=lib3ds_node_by_id(p, node_id);    if (q) {      return(q);    }  }  return(0);}/*! * \ingroup file */voidlib3ds_file_insert_node(Lib3dsFile *file, Lib3dsNode *node){  Lib3dsNode *parent,*p,*n;    ASSERT(node);  ASSERT(!node->next);  ASSERT(!node->parent);  parent=0;  if (node->parent_id!=LIB3DS_NO_PARENT) {    parent=lib3ds_file_node_by_id(file, node->parent_id);  }  node->parent=parent;    if (!parent) {    for (p=0,n=file->nodes; n!=0; p=n,n=n->next) {      if (strcmp(n->name, node->name)>0) {        break;      }    }    if (!p) {      node->next=file->nodes;      file->nodes=node;    }    else {      node->next=p->next;      p->next=node;    }  }  else {    for (p=0,n=parent->childs; n!=0; p=n,n=n->next) {      if (strcmp(n->name, node->name)>0) {        break;      }    }    if (!p) {      node->next=parent->childs;      parent->childs=node;    }    else {      node->next=p->next;      p->next=node;    }  }  if (node->node_id!=LIB3DS_NO_PARENT) {    for (n=file->nodes; n!=0; n=p) {      p=n->next;      if (n->parent_id==node->node_id) {        lib3ds_file_remove_node(file, n);        lib3ds_file_insert_node(file, n);      }    }  }}/*! * \ingroup file */Lib3dsBoollib3ds_file_remove_node(Lib3dsFile *file, Lib3dsNode *node){  Lib3dsNode *p,*n;  if (node->parent) {    for (p=0,n=node->parent->childs; n; p=n,n=n->next) {      if (n==node) {        break;      }    }    if (!n) {      return(LIB3DS_FALSE);    }        if (!p) {      node->parent->childs=n->next;    }    else {      p->next=n->next;    }  }  else {    for (p=0,n=file->nodes; n; p=n,n=n->next) {      if (n==node) {        break;      }    }    if (!n) {      return(LIB3DS_FALSE);    }        if (!p) {      file->nodes=n->next;    }    else {      p->next=n->next;    }  }  return(LIB3DS_TRUE);}/*! * \ingroup file */voidlib3ds_file_dump_nodes(Lib3dsFile *file){  Lib3dsNode *p;  ASSERT(file);  for (p=file->nodes; p!=0; p=p->next) {    lib3ds_node_dump(p,1);  }}/*!\typedef Lib3dsFile  \ingroup file  \sa _Lib3dsFile*/

⌨️ 快捷键说明

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