📄 vrmlobject.cpp
字号:
#include "VRMLobject.h"#include "math.h"//class VRMLobject:void VRMLobject_relese(VRMLobject *This){ //relese the linked lists: Point3D *tmpP1 = This->PointListHead; Point3D *tmpP2; Triangle *tmpT1 = This->TriangleListHead; Triangle *tmpT2; while (tmpP1) { tmpP2 = tmpP1; tmpP1 = tmpP1->next; free(tmpP2); } while (tmpT1) { tmpT2 = tmpT1; tmpT1 = tmpT1->next; free(tmpT2); }}void VRMLobject_WriteTo(VRMLobject *This, FILE *outfile){ This->PointListHead = 0; This->PointListTail = 0; This->TriangleListHead = 0; This->TriangleListTail = 0; This->MyOutFile = outfile; This->NbPoints = 0; This->NbTri = 0; This->N = 0;}void VRMLobject_AddPoint(VRMLobject *This, Point3D *APoint3D){ //printf("adding a point to the object...\n"); if (This->PointListHead==0) { This->PointListHead = new_Point3D(APoint3D); This->PointListTail = This->PointListHead; } else { This->PointListTail->next = new_Point3D(APoint3D); This->PointListTail = This->PointListTail->next; } This->NbPoints++; This->PointListTail->next = 0;}void VRMLobject_AddTriangle(VRMLobject *This, Triangle *ATriangle){ printf("adding a triangle to the object...\n"); if (This->TriangleListHead==0) { This->TriangleListHead = new_Triangle(ATriangle); This->TriangleListTail = This->TriangleListHead; } else { This->TriangleListTail->next = new_Triangle(ATriangle); This->TriangleListTail = This->TriangleListTail->next; } This->NbTri++; This->TriangleListTail->next = 0;}void VRMLobject_AddTriangleList(VRMLobject *This, TriangleList *ATriangleList){ printf("adding a triangle list to the object...\n"); This->TriangleListHead = ATriangleList->Head; This->TriangleListTail = ATriangleList->Tail; ATriangleList->Head = 0; ATriangleList->Tail = 0; This->NbTri = VRMLobject_CountNbTri(This);}int VRMLobject_CountNbTri(VRMLobject *This){ int Nb = 0; Triangle *tmp = This->TriangleListHead; while (tmp) { Nb++; tmp = tmp->next; } return Nb;}void VRMLobject_SaveToFileAsVRML1(VRMLobject *This){ const char *String1 =
"#VRML V1.0 ascii\n" "Separator { #Produced by the marchin cubes algorithm\n" " #Implemented by Marcus Hewat, all rights reserved\n" "Info {string \"Generated by Marcus Hewat's marching cubes implementation\"}\n" "DEF front PerspectiveCamera {\n" "position 0.5 0.5 2.5\n" "orientation 0 0 1 0\n" "focalDistance 5\n" "heightAngle 0.785398}\n" "DEF top PerspectiveCamera {\n" "position 0.5 2 0.5\n" "orientation 1 0 0 -1.57\n" "focalDistance 5\n" "heightAngle 0.785398}\n" "DEF under PerspectiveCamera {\n" "position 0.5 -1.5 0.5\n" "orientation 1 0 0 1.57\n" "focalDistance 5\n" "heightAngle 0.785398}\n" "DEF left PerspectiveCamera {\n" "position 2 0.5 0.5\n" "orientation 0 1 0 1.57\n" "focalDistance 5\n" "heightAngle 0.785398}\n" "DEF right PerspectiveCamera {\n" "position -1 0.5 0.5\n" "orientation 0 1 0 -1.57\n" "focalDistance 5\n" "heightAngle 0.785398}\n" " Material {diffuseColor 0 0.8 0.2}\n" " NormalBinding {value PER_VERTEX}\n" " Coordinate3 {\n" " point [\n"; const char *String2 = "]\n" " }\n" " IndexedFaceSet {\n" " #clockwise from the outside:\n" " coordIndex [ \n"; const char *String3 = "\n" " ]\n" " }\n" "}\n"; Point3D *tmp1 = This->PointListHead; Triangle *tmp2 = This->TriangleListHead; fprintf(This->MyOutFile,String1); while (tmp1!=0) {
fprintf(This->MyOutFile,"%f %f %f,\n",tmp1->x,tmp1->y,tmp1->z); tmp1 = tmp1->next; }
fprintf(This->MyOutFile,String2); while (tmp2!=0) {
fprintf(This->MyOutFile,"%i, %i, %i, -1,\n",tmp2->b,tmp2->a,tmp2->c); tmp2 = tmp2->next; }
fprintf(This->MyOutFile,String3);
}
void VRMLobject_SaveToFileAsOff(VRMLobject *This){ Point3D *tmp1 = This->PointListHead; Triangle *tmp2 = This->TriangleListHead; printf("writing off file...\n"); printf("%i %i %i\n",This->NbPoints,This->NbTri,This->N); fprintf(This->MyOutFile,"%i %i %i\n",This->NbPoints,This->NbTri,This->N); while (tmp1!=0) { Point3D_write(tmp1, This->MyOutFile); tmp1 = tmp1->next; } while (tmp2!=0) { Triangle_write(tmp2, This->MyOutFile); tmp2 = tmp2->next; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -