Objekt_editor_edit.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. /*
  2. Editacni funkce
  3. */
  4. void oe_scale_kontejner(EDIT_KONTEJNER * p_kont, float x, float y, float z);
  5. void oe_prikaz_scale_kontejneru(K_EDITOR * p_cnf);
  6. void oe_centruj_kontejner(EDIT_KONTEJNER * p_kont);
  7. void oe_prikaz_scale_kontejneru_cisla(K_EDITOR * p_cnf);
  8. //void oe_smaz_divoke_vertexy_kontejneru(K_EDITOR *p_cnf, int cislo);
  9. void oe_smaz_divoke_vertexy_kontejneru(EDIT_KONTEJNER * p_kont);
  10. int smaz_divoke_vertexy_objektu_dir(EDIT_OBJEKT * p_obj);
  11. void oe_prikaz_vycisti_kontejner(K_EDITOR * p_cnf);
  12. void oe_prikaz_smaz_divoke_vertexy_kontejneru(K_EDITOR * p_cnf);
  13. void oe_prikaz_vymazat_kontejner(K_EDITOR * p_cnf);
  14. void oe_prikaz_posun_kontejner(K_EDITOR * p_cnf);
  15. void oe_prikaz_kopiruj_kontejner(K_EDITOR * p_cnf);
  16. void oe_prikaz_kopiruj_kontejner_vyber(K_EDITOR * p_cnf);
  17. void oe_prikaz_mazani_kontejneru(K_EDITOR * p_cnf);
  18. void oe_prikaz_slep_kontejner(K_EDITOR * p_cnf);
  19. void oe_prikaz_rozdrob_kontejner(K_EDITOR * p_cnf);
  20. void oe_prikaz_centruj_kontejner(K_EDITOR * p_cnf);
  21. void oe_prikaz_init_matrix_kontejner(K_EDITOR * p_cnf);
  22. void oe_prikaz_rotace_kontejneru(K_EDITOR * p_cnf);
  23. void oe_prikaz_rotace_kontejneru_osove(K_EDITOR * p_cnf, int x, int y, int z);
  24. void oe_prikaz_rotace_kontejneru_cislama(K_EDITOR * p_cnf, float x, float y,
  25. float z);
  26. void oe_prikaz_transformace_kontejneru(K_EDITOR * p_cnf);
  27. void oe_scale_objekt(EDIT_OBJEKT * p_obj, float x, float y, float z);
  28. void oe_prikaz_scale_objektu(K_EDITOR * p_cnf);
  29. void oe_prikaz_slepeni_objektu(K_EDITOR * p_cnf);
  30. void oe_prikaz_rotace_objektu(K_EDITOR * p_cnf);
  31. void oe_prikaz_rotace_objektu_osove(K_EDITOR * p_cnf);
  32. void oe_prikaz_rotace_objektu_cislama(K_EDITOR * p_cnf, float x, float y,
  33. float z);
  34. void oe_prikaz_mazani_objektu(K_EDITOR * p_cnf);
  35. void oe_prikaz_posun_objekt(K_EDITOR * p_cnf);
  36. void oe_prikaz_kopiruj_objekt(K_EDITOR * p_cnf);
  37. EDIT_KONTEJNER *oe_nahraj_game_objekt(K_EDITOR * p_cnf, byte * p_file);
  38. void transf_3d_2d_matrix_float_moje(float p_x, float p_y, float p_z,
  39. float *p_tx, float *p_ty, GLMATRIX * p_mat, dword x_c, dword y_c);;
  40. void oe_prikaz_light_map(K_EDITOR * p_cnf);
  41. void text_test(K_EDITOR * p_cnf, EDIT_OBJEKT * p_obj);
  42. void oe_prikaz_mazani_sceny(K_EDITOR * p_cnf);
  43. void oe_prikaz_smaz_face(K_EDITOR * p_cnf, int korekce);
  44. void oe_smaz_vertex(K_EDITOR * p_cnf, int k, int o, int v);
  45. void oe_prikaz_smaz_vertex(K_EDITOR * p_cnf);
  46. void oe_prikaz_smaz_group_vertex(K_EDITOR * p_cnf);
  47. int oe_smaz_divoke_vertexy_objektu(K_EDITOR * p_cnf, int k, int o);
  48. void oe_prikaz_smaz_divoke_vertexy_objektu(K_EDITOR * p_cnf);
  49. void oe_prikaz_prusecik_cnf(K_EDITOR * p_cnf);
  50. void oe_prikaz_prusecik(K_EDITOR * p_cnf);
  51. void oe_prepis_kontejner_mrizkou(EDIT_KONTEJNER * p_kont, int rus);
  52. void oe_prikaz_sjednot_group_vertex(K_EDITOR * p_cnf);
  53. void oe_prikaz_sesij_group_vertex(K_EDITOR * p_cnf);
  54. void oe_uloz_vertexy_ze_ctverce(K_EDITOR * p_cnf);
  55. void oe_vrat_vertexy_ze_ctverce(K_EDITOR * p_cnf, I_VERTEX ** p_group,
  56. int *p_groupnum);
  57. void oe_prikaz_group_vertex(K_EDITOR * p_cnf);
  58. int oe_je_vertex_v_seznamu(K_EDITOR * p_cnf, int k, int o, int v);
  59. void oe_pridej_vertexy_ze_ctverce(K_EDITOR * p_cnf);
  60. void oe_prikaz_group_vertex_pridej(K_EDITOR * p_cnf);
  61. void oe_prikaz_vyber_vertex(K_EDITOR * p_cnf);
  62. void oe_prikaz_pridej_vertex(K_EDITOR * p_cnf);
  63. void oe_prikaz_vyber_vertex_face(K_EDITOR * p_cnf);
  64. void oe_prikaz_pridej_vertex_face(K_EDITOR * p_cnf);
  65. void oe_prikaz_all_ungroup_vertex(K_EDITOR * p_cnf);
  66. void oe_ungroup_vertex(K_EDITOR * p_cnf, int cislo);
  67. void oe_prikaz_ungroup_aktualni_vertex(K_EDITOR * p_cnf);
  68. void oe_prikaz_ungroup_group_vertex(K_EDITOR * p_cnf);
  69. void oe_prikaz_ungroup_vertex(K_EDITOR * p_cnf);
  70. void oe_pis_vybrany_vertex(K_EDITOR * p_cnf);
  71. void oe_prikaz_vyber_vertexu_nahoru(K_EDITOR * p_cnf);
  72. void oe_prikaz_vyber_vertexu_dolu(K_EDITOR * p_cnf);
  73. void oe_edit_vertex_xyz(K_EDITOR * p_cnf, int i, byte * p_flag, float *p_f);
  74. void oe_nasob_vertex_xyz(K_EDITOR * p_cnf, int i, float x, float y, float z);
  75. void oe_edit_vertex_uv(K_EDITOR * p_cnf, int i, int t, byte * p_flag, float u,
  76. float t2);
  77. void oe_nasob_vertex_uv(K_EDITOR * p_cnf, int i, int t, byte * p_flag,
  78. float u, float t2);
  79. void oe_prikaz_editace_group(K_EDITOR * p_cnf, float *p_f, byte * p_flag);
  80. void oe_prikaz_editace_vertex(K_EDITOR * p_cnf, float *p_f, byte * p_flag);
  81. void oe_prikaz_barva_vertex(K_EDITOR * p_cnf);
  82. void oe_prikaz_nasobeni_group(K_EDITOR * p_cnf, float *p_f, byte * p_flag);
  83. void oe_prikaz_nasobeni_vertex(K_EDITOR * p_cnf, float *p_f, byte * p_flag);
  84. void oe_prikaz_posun_group_vertex(K_EDITOR * p_cnf);
  85. void oe_prikaz_posun_vertex(K_EDITOR * p_cnf);
  86. void oe_prikaz_zvedni_vertex(K_EDITOR * p_cnf);
  87. void oe_prikaz_zvedni_group_vertex(K_EDITOR * p_cnf);
  88. void oe_eliminuj_stejne_group(K_EDITOR * p_cnf);
  89. void oe_vyber_nejblizsi_group_vertex(K_EDITOR * p_cnf);
  90. void oe_prikaz_rozdrob_objekt(K_EDITOR * p_cnf, int vybr_face);
  91. void oe_prikaz_posun_flare(K_EDITOR * p_cnf);
  92. void oe_vyrob_okoli(K_EDITOR * p_cnf);
  93. void oe_uprav_okoli(K_EDITOR * p_cnf);
  94. void oe_tiskni_akt_objekt(K_EDITOR * p_cnf);
  95. void oe_prikaz_pridej_akt_objekt(K_EDITOR * p_cnf, int presun);
  96. void oe_sloz_objekty_do_kontejneru(K_EDITOR * p_cnf, EDIT_KONTEJNER * p_kont,
  97. int presun);
  98. void oe_serad_tri(OBJ_VERTEX * p_list, int num);
  99. int oe_smaz_stejne_vertexy(OBJ_VERTEX * p_list, int num);
  100. int oe_najdi_vertex(OBJ_VERTEX * p_list, int num, OBJ_VERTEX * p_hled);
  101. void oe_prikaz_posun_staticke_svetlo(K_EDITOR * p_cnf);
  102. void oe_prikaz_scale_staticke_svetlo(K_EDITOR * p_cnf);
  103. int oe_najdi_volne_stat_svetlo(K_EDITOR * p_cnf);
  104. void oe_smaz_flare(K_EDITOR * p_cnf, LENS_FLARE * p_flare);
  105. void oe_prikaz_desintegrator(K_EDITOR * p_cnf);
  106. void oe_prikaz_osamostatnit_objekt(K_EDITOR * p_cnf);
  107. void oe_prikaz_vertex_objekt(K_EDITOR * p_cnf);
  108. void oe_prikaz_autoscale_kontejneru(K_EDITOR * p_cnf);
  109. void oe_prikaz_slij_group_vertex(K_EDITOR * p_cnf);
  110. void oe_pridej_groupvertex(K_EDITOR * p_cnf, int k, int o, int v);
  111. void oe_objekt_izolovane_vertexy(K_EDITOR * p_cnf, int k, int o);
  112. void oe_face_izolovane_vertexy(K_EDITOR * p_cnf);
  113. void oe_prikaz_slivacka_group_vertex(K_EDITOR * p_cnf);
  114. void oe_prikaz_decimace_pruhu_body(K_EDITOR * p_cnf);
  115. void oe_prikaz_vyrovnej_group_vertex(K_EDITOR * p_cnf, int level);
  116. void oe_pridej_group_face_list(K_EDITOR * p_cnf, F_VERTEX * p_new, int num,
  117. int flag);
  118. void oe_ungroup_face_vybrany(K_EDITOR * p_cnf);
  119. void oe_ungroup_face_all(K_EDITOR * p_cnf);
  120. void oe_ungroup_face_ctverec(K_EDITOR * p_cnf);
  121. void oe_group_face_pridej(K_EDITOR * p_cnf); // group face pomoci ctverce
  122. void oe_group_face_vyber(K_EDITOR * p_cnf);
  123. F_VERTEX *oe_vrat_face_ze_ctverce(K_EDITOR * p_cnf, int *p_num);
  124. void oe_prikaz_posun_stredu_levelu(K_EDITOR * p_cnf);
  125. void oe_prikaz_scena_oznac_placate_plosky(K_EDITOR * p_cnf);
  126. EDIT_KONTEJNER *oe_slep_kontejnery_vsechny(K_EDITOR * p_cnf);
  127. void oe_prikaz_decimace_sceny(K_EDITOR * p_cnf);
  128. void oe_prikaz_decimace_kontejneru(K_EDITOR * p_cnf);
  129. void oe_prikaz_decimace_vyberu(K_EDITOR * p_cnf);
  130. void oe_prikaz_decimace_trsu(K_EDITOR * p_cnf);
  131. void oe_prikaz_decimace_pruhu(K_EDITOR * p_cnf);
  132. void oe_prikaz_posun_mlhokostky(K_EDITOR * p_cnf);
  133. void oe_prikaz_scale_mlhokostky(K_EDITOR * p_cnf);
  134. void oe_prikaz_slep_kontejnery(K_EDITOR * p_cnf);
  135. void oe_vymaz_flare_svetel_ze_sceny(K_EDITOR * p_cnf,
  136. EDIT_KONTEJNER * p_kont);
  137. void oe_prikaz_add_group(K_EDITOR * p_cnf, float *p_f, byte * p_flag);
  138. void oe_prikaz_add_vertex(K_EDITOR * p_cnf, float *p_f, byte * p_flag);
  139. void setrid_body_ctverec(OBJ_VERTEX * p_body);
  140. void setrid_body_ctverec_bod(BOD * p_body);
  141. void oe_prikaz_teselace_objektu(K_EDITOR * p_cnf);
  142. void oe_prikaz_rozmnoz_texture_koord(K_EDITOR * p_cnf, int src, int dest);
  143. void oe_preindexuj_kontejner(EDIT_KONTEJNER * p_kont);
  144. void oe_prikaz_preindexuj_kontejner(K_EDITOR * p_cnf);
  145. void oe_prikaz_posun_objekt_pivot_point(K_EDITOR * p_cnf);
  146. void oe_prikaz_centr_pivot_point(K_EDITOR * p_cnf);
  147. int oe_vybr_obj_reset(void);
  148. EDIT_OBJEKT *oe_vybr_obj_get(int *p_handle);
  149. EDIT_OBJEKT *oe_vybr_obj_get_ind(int *p_handle, int *p_k, int *p_o);
  150. EDIT_KONTEJNER *oe_vybr_obj_get_kont(int *p_handle);
  151. void oe_prikaz_kost_pridej_start(K_EDITOR * p_cnf);
  152. void oe_prikaz_kost_pridej_navaz(K_EDITOR * p_cnf);
  153. void oe_prikaz_kost_pridej_vertexy(K_EDITOR * p_cnf);
  154. void oe_prikaz_kost_uber_vertexy(K_EDITOR * p_cnf);
  155. void oe_prikaz_kost_smaz(K_EDITOR * p_cnf);
  156. void oe_prikaz_kost_smaz_animaci(K_EDITOR * p_cnf);
  157. void oe_prikaz_kost_posun(K_EDITOR * p_cnf, int pivot);
  158. void oe_prikaz_generuj_flare(K_EDITOR * p_cnf);
  159. void oe_prikaz_kost_kopiruj(K_EDITOR * p_cnf);
  160. void oe_prikaz_zjednodus_objekty(K_EDITOR * p_cnf, int flag);
  161. void oe_stack_zaloha_zrus(HRAN_STACK * p_stack);
  162. void oe_stack_zaloha_vyrob(HRAN_STACK * p_stack, int num);
  163. void oe_stack_zaloha_pridej(HRAN_STACK * p_stack, EDIT_OBJEKT * p_obj, int o,
  164. int k);
  165. void oe_stack_zaloha_obnov(K_EDITOR * p_cnf);
  166. __inline int najdi_group_vertex(I_VERTEX * p_list, int num, int k, int o,
  167. int v)
  168. {
  169. int i;
  170. for (i = 0; i < num; i++) {
  171. if (p_list[i].k == k && p_list[i].o == o && p_list[i].v == v)
  172. return (i);
  173. }
  174. return (K_CHYBA);
  175. }
  176. __inline int najdi_group_face_vertex(F_VERTEX * p_list, int num,
  177. F_VERTEX * p_hled, int flag)
  178. {
  179. int i;
  180. if (flag & GROUP_KONT && !(flag & (GROUP_OBJ | GROUP_FACE))) {
  181. for (i = 0; i < num; i++) {
  182. if (p_list[i].k == p_hled->k)
  183. return (i);
  184. }
  185. return (K_CHYBA);
  186. }
  187. else if (flag & GROUP_KONT && flag & GROUP_OBJ && !(flag & GROUP_FACE)) {
  188. for (i = 0; i < num; i++) {
  189. if (p_list[i].k == p_hled->k && p_list[i].o == p_hled->o)
  190. return (i);
  191. }
  192. return (K_CHYBA);
  193. }
  194. else if (flag & GROUP_KONT && flag & GROUP_OBJ && flag & GROUP_FACE) {
  195. for (i = 0; i < num; i++) {
  196. if (p_list[i].k == p_hled->k && p_list[i].o == p_hled->o
  197. && p_list[i].f == p_hled->f)
  198. return (i);
  199. }
  200. return (K_CHYBA);
  201. }
  202. return (K_CHYBA);
  203. }
  204. __inline void smaz_group_face_vertex(F_VERTEX * p_list, int *p_num, int maz)
  205. {
  206. if (maz < (*p_num) - 1)
  207. memcpy(p_list + maz, p_list + maz + 1,
  208. sizeof(p_list[0]) * ((*p_num) - maz - 1));
  209. if (maz < *p_num)
  210. (*p_num)--;
  211. }
  212. __inline void smaz_group_face_stejne_vertexy(F_VERTEX * p_list, int num,
  213. F_VERTEX * p_new, int *p_newnum, int flag)
  214. {
  215. int i;
  216. for (i = 0; i < *p_newnum; i++) {
  217. if (najdi_group_face_vertex(p_list, num, p_new + i, flag) != K_CHYBA) {
  218. smaz_group_face_vertex(p_new, p_newnum, i);
  219. i--;
  220. }
  221. }
  222. }
  223. #define POSUN_TARGET 0x001
  224. #define POSUN_POZICI 0x002
  225. #define POSUN_ROLL 0x004
  226. #define POSUN_FOV 0x008
  227. #define POSUN_OSA_X 0x010
  228. #define POSUN_OSA_Y 0x020
  229. #define POSUN_OSA_Z 0x040
  230. #define POSUN_ROT 0x080
  231. #define POSUN_SCALE 0x100
  232. #define POSUN_VSE (POSUN_OSA_X|POSUN_OSA_Y|POSUN_OSA_Z)
  233. void oe_prikaz_posun_kameru(K_EDITOR * p_cnf, int bod);
  234. void oe_prikaz_roll_kameru(K_EDITOR * p_cnf);
  235. void oe_prikaz_fov_kameru(K_EDITOR * p_cnf);
  236. void oe_prikaz_kamera_nova(K_EDITOR * p_cnf);
  237. void oe_prikaz_kamera_upravit(K_EDITOR * p_cnf);
  238. void oe_prikaz_kamera_smazat(K_EDITOR * p_cnf);
  239. void oe_prikaz_kamera_animace_nova(K_EDITOR * p_cnf);
  240. void oe_prikaz_kamera_animace_upravit(K_EDITOR * p_cnf);
  241. void oe_prikaz_kamera_animace_smazat(K_EDITOR * p_cnf);
  242. void oe_prikaz_kamera_nahrat(K_EDITOR * p_cnf);
  243. void oe_prikaz_kamera_ulozit(K_EDITOR * p_cnf);
  244. void oe_prikaz_kamera_ulozit_vse(K_EDITOR * p_cnf);
  245. void oe_prikaz_kamera_animace_nahrat(K_EDITOR * p_cnf);
  246. void oe_prikaz_kamera_animace_ulozit(K_EDITOR * p_cnf);
  247. void oe_prikaz_kamera_animace_ulozit_vse(K_EDITOR * p_cnf);
  248. void oe_prikaz_face_invert_kontejner(K_EDITOR * p_cnf);
  249. void oe_prikaz_face_invert_objekt(K_EDITOR * p_cnf);
  250. void oe_prikaz_face_invert_vyber(K_EDITOR * p_cnf);
  251. void oe_prikaz_posun_bb_kamery(K_EDITOR * p_cnf);
  252. void oe_prikaz_scale_bb_kamery(K_EDITOR * p_cnf);
  253. void oe_prikaz_kopiruj_objekt_geometrie(K_EDITOR * p_cnf);
  254. int oe_prikaz_kontroluj_ungroup_vertex(K_EDITOR * p_cnf, int k);
  255. void oe_prikaz_exportuj_scenu(K_EDITOR * p_cnf);
  256. int oe_vybr_kont_reset(void);
  257. EDIT_KONTEJNER *oe_vybr_kont_get(int *p_handle);
  258. int oe_vybr_obj_reset(void);
  259. EDIT_OBJEKT *oe_vybr_obj_get(int *p_handle);
  260. EDIT_OBJEKT *oe_vybr_obj_get_ind(int *p_handle, int *p_k, int *p_o);
  261. EDIT_KONTEJNER *oe_vybr_obj_get_kont(int *p_handle);
  262. int oe_vybr_obj_get_num(void);
  263. void joint_vloz_do_klice(JOINT * p_joint, int flag);
  264. void oe_prikaz_kost_rotace(K_EDITOR * p_cnf);
  265. void oe_prikaz_kost_scale(K_EDITOR * p_cnf);
  266. void oe_kost_smaz_obj(K_EDITOR * p_cnf, EDIT_OBJEKT * p_obj);
  267. void oe_prikaz_smaz_jcf(K_EDITOR * p_cnf);
  268. void oe_prikaz_sjednoceni_vertexu_obj(K_EDITOR * p_cnf);
  269. int oe_hran_vloz_hrany_stack(HRAN_STACK * p_stack, EDIT_OBJEKT * p_obj);
  270. void oe_hran_zrus_hranu_stack(HRAN_STACK * p_stack, HRAN * p_hrana, int v1,
  271. int v2);
  272. int oe_hran_zrus_hranu(HRAN_STACK * p_stack, HRAN * p_hrana,
  273. EDIT_OBJEKT * p_obj, int *p_vmask);
  274. void oe_hran_reset(HRAN_STACK * p_stack);
  275. int oe_hran_vloz(HRAN_STACK * p_stack, int ind1, int ind2, BOD * p_norm);
  276. int oe_hran_setrid_sort(const void *p_h1, const void *p_h2);
  277. void oe_hran_vyhodnot(HRAN_STACK * p_stack, EDIT_OBJEKT * p_obj,
  278. int *p_vmask);
  279. void oe_hran_decimuj(HRAN_STACK * p_stack, GLMATRIX * p_mat,
  280. EDIT_OBJEKT * p_obj, int vertexu);
  281. void oe_hran_pridej_hranici(HRAN_STACK * p_stack, HRAN * p_hran,
  282. EDIT_OBJEKT * p_obj);
  283. float calc_equad_vert(GLMATRIX * p_mat, BOD * p_v);
  284. void calc_equad_obj_mat(HRAN_STACK * p_stack, EDIT_OBJEKT * p_obj,
  285. GLMATRIX * p_mat);
  286. void calc_equad_hrana(OBJ_VERTEX * p_vert, GLMATRIX * p_mat, HRAN * p_hran,
  287. int *p_vmask);
  288. EDIT_OBJEKT *oe_obj_zjednodus(EDIT_OBJEKT * p_obj, int vertexu);
  289. #define VERT_NECHEJ 0x1
  290. #define VERT_SMAZ 0x2
  291. #define VERT_MASK (VERT_NECHEJ|VERT_SMAZ)
  292. int oe_stack_vertexy_pridej(K_EDITOR * p_cnf, EDIT_OBJEKT * p_obj,
  293. HRAN_STACK * p_stack, int k, int o, int flag);
  294. void oe_generator_animaci(K_EDITOR * p_cnf);
  295. void oe_prikaz_flagovac(K_EDITOR * p_cnf);
  296. void oe_prikaz_down_centr_pivot(K_EDITOR * p_cnf);
  297. void oe_prikaz_vycisti_scenu(K_EDITOR * p_cnf);
  298. void oe_prikaz_prevadec_bmp(K_EDITOR * p_cnf);
  299. void oe_prikaz_zvedni_kontejner(K_EDITOR * p_cnf);
  300. void oe_prikaz_zrcadelnik(K_EDITOR * p_cnf);
  301. #define stejny_bod(a,b) (a->x == b->x && a->y == b->y && a->z == b->z)
  302. #define podobny_bod(a,b) (fabsf(a->x-b->x) < 0.001f &&\
  303. fabsf(a->y-b->y) < 0.001f &&\
  304. fabsf(a->z-b->z) < 0.001f)
  305. #define podobny_vec(a,b) (fabsf(a->x-b->x) < 0.001f &&\
  306. fabsf(a->y-b->y) < 0.001f &&\
  307. fabsf(a->z-b->z) < 0.001f)