📄 file.cpp
字号:
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 + -