Script.cpp
上传用户:yunyi28
上传日期:2021-04-25
资源大小:6978k
文件大小:5k
源码类别:

分形几何

开发平台:

Visual C++

  1. #include "Script.h"
  2. #include "Data.h"
  3. bool LoadTreeTypes(char *tree_path)
  4. {
  5. FILE *pTree = NULL;
  6. char line[MAX_LINE_SIZE]; //当前行
  7. char *token = NULL; //用于字符串处理
  8. pTree = fopen(tree_path,"r");
  9. if(pTree == NULL)
  10. {
  11. MessageBox(NULL,NULL,"Open ini file Failed",NULL);
  12. return false;
  13. }
  14. while (!feof(pTree)) //文件结束,退出处理
  15. {
  16. fgets(line,MAX_LINE_SIZE,pTree);
  17. if(strstr(line,"#End")) //读到"#End",退出处理
  18. {
  19. break;
  20. }
  21. //忽略注释行
  22. else if(strstr(line,"//"))
  23. {continue;}
  24. else if(strstr(line,"@TreeType"))
  25. {
  26. TreeType t;
  27. while(!strstr(line,"@/TreeType"))
  28. {
  29. fgets(line,MAX_LINE_SIZE,pTree);
  30. if(strstr(line,"Name"))
  31. {
  32. token=strtok(line," ");
  33. token=strtok(NULL," ");
  34. strcpy(t.name,token);
  35. }
  36. if(strstr(line,"base0"))
  37. {
  38. token=strtok(line," ");
  39. token=strtok(NULL," ");
  40. t.ti.base[0] = token;
  41. }
  42. else if(strstr(line,"base1"))
  43. {
  44. token=strtok(line," ");
  45. token=strtok(NULL," ");
  46. t.ti.base[1] = token;
  47. }
  48. else if(strstr(line,"base2"))
  49. {
  50. token=strtok(line," ");
  51. token=strtok(NULL," ");
  52. t.ti.base[2] = token;
  53. }
  54. else if(strstr(line,"numBase"))
  55. {
  56. token=strtok(line," ");
  57. token=strtok(NULL," ");
  58. t.ti.numBase = atoi(token);
  59. }
  60. else if(strstr(line,"maxAlpha"))
  61. {
  62. token=strtok(line," ");
  63. token=strtok(NULL," ");
  64. t.ti.maxAlpha = atoi(token);
  65. }
  66. else if(strstr(line,"minAlpha"))
  67. {
  68. token=strtok(line," ");
  69. token=strtok(NULL," ");
  70. t.ti.minAlpha = atoi(token);
  71. }
  72. else if(strstr(line,"maxBeta"))
  73. {
  74. token=strtok(line," ");
  75. token=strtok(NULL," ");
  76. t.ti.maxBeta = atoi(token);
  77. }
  78. else if(strstr(line,"minBeta"))
  79. {
  80. token=strtok(line," ");
  81. token=strtok(NULL," ");
  82. t.ti.minBeta = atoi(token);
  83. }
  84. else if(strstr(line,"depth"))
  85. {
  86. token=strtok(line," ");
  87. token=strtok(NULL," ");
  88. t.ti.depth = atoi(token);
  89. }
  90. else if(strstr(line,"radius"))
  91. {
  92. token=strtok(line," ");
  93. token=strtok(NULL," ");
  94. t.ti.r= atof(token);
  95. }
  96. else if(strstr(line,"rfade"))
  97. {
  98. token=strtok(line," ");
  99. token=strtok(NULL," ");
  100. t.ti.rfade= atof(token);
  101. }
  102. else if(strstr(line,"length"))
  103. {
  104. token=strtok(line," ");
  105. token=strtok(NULL," ");
  106. t.ti.l = atof(token);
  107. }
  108. else if(strstr(line,"lfade"))
  109. {
  110. token=strtok(line," ");
  111. token=strtok(NULL," ");
  112. t.ti.lfade = atof(token);
  113. }
  114. else if(strstr(line,"bfade"))
  115. {
  116. token=strtok(line," ");
  117. token=strtok(NULL," ");
  118. t.ti.bfade = atof(token);
  119. }
  120. else if(strstr(line,"sizeleaf"))
  121. {
  122. token=strtok(line," ");
  123. token=strtok(NULL," ");
  124. t.ti.sizeleaf = atof(token);
  125. }
  126. else{continue;}
  127. }
  128. treeType.push_back(t);
  129. continue;
  130. }
  131. }
  132. fclose(pTree);
  133. return true;
  134. }
  135. bool LoadTreePos(char *treePos_path)
  136. {
  137. FILE *pTreePos = NULL;
  138. char line[MAX_LINE_SIZE]; //当前行
  139. char *token = NULL; //用于字符串处理
  140. int x,y,z;  //坐标
  141. pTreePos = fopen(treePos_path,"r");
  142. if(pTreePos == NULL)
  143. {
  144. MessageBox(NULL,NULL,"Open ini file Failed",NULL);
  145. return false;
  146. }
  147. while (!feof(pTreePos)) //文件结束,退出处理
  148. {
  149. fgets(line,MAX_LINE_SIZE,pTreePos);
  150. if(strstr(line,"#End")) //读到"#End",退出处理
  151. {
  152. break;
  153. }
  154. //忽略注释行
  155. else if(strstr(line,"//"))
  156. {continue;}
  157. else if(strstr(line,"@Tree"))
  158. {
  159. TreeInfo *ti;
  160. while(!strstr(line,"@/Tree"))
  161. {
  162. fgets(line,MAX_LINE_SIZE,pTreePos);
  163. if(strstr(line,"Position"))
  164. {
  165. token=strtok(line," ");
  166. token=strtok(NULL," ");
  167. x = atoi(token);
  168. token = strtok(NULL," ");
  169. z = atoi(token);
  170. y = 0;
  171. }
  172. else if(strstr(line,"Type"))
  173. {
  174. token=strtok(line," ");
  175. token=strtok(NULL," ");
  176. list<TreeType>::iterator i=treeType.begin();
  177. while(i!=treeType.end())
  178. {
  179. if(strstr(i->name,token))
  180. {
  181. ti = &(i->ti);
  182. Tree *tr = new Tree();
  183. tr->center.x = x;
  184. tr->center.y = y;
  185. tr->center.z = z;
  186. tr->InitTree(ti);
  187. tr->InitTreeInfo();
  188. tr->BuildTree();
  189. trees.push_back(*tr);
  190. break;
  191. }
  192. i++;
  193. }
  194. if(strstr(i->name,token))
  195. {
  196. ti = &(i->ti);
  197. Tree *tr = new Tree();
  198. tr->center.x = x;
  199. tr->center.y = y;
  200. tr->center.z = z;
  201. tr->InitTree(ti);
  202. tr->InitTreeInfo();
  203. tr->BuildTree();
  204. trees.push_back(*tr);
  205. break;
  206. }
  207. }
  208. else {continue;}
  209. }
  210. continue;
  211. }
  212. }
  213. fclose(pTreePos);
  214. return true;
  215. }