فهرست منبع

Append shape stubs

luboslenco 3 روز پیش
والد
کامیت
c2f63843ca
2فایلهای تغییر یافته به همراه57 افزوده شده و 112 حذف شده
  1. 13 10
      paint/sources/project.ts
  2. 44 102
      paint/sources/tab_meshes.ts

+ 13 - 10
paint/sources/project.ts

@@ -93,19 +93,22 @@ function project_save_as(save_and_quit: bool = false) {
 	});
 }
 
+function project_fetch_default_meshes() {
+	if (project_mesh_list == null) {
+		project_mesh_list = file_read_directory(path_data() + path_sep + "meshes");
+		for (let i: i32 = 0; i < project_mesh_list.length; ++i) {
+			let s: string = project_mesh_list[i];
+			project_mesh_list[i] = substring(project_mesh_list[i], 0, s.length - 4); // Trim .arm
+		}
+		array_push(project_mesh_list, "plane");
+		array_push(project_mesh_list, "sphere");
+	}
+}
+
 function project_new_box() {
 	ui_box_show_custom(function () {
 		if (ui_tab(ui_handle(__ID__), tr("New Project"))) {
-			if (project_mesh_list == null) {
-				project_mesh_list = file_read_directory(path_data() + path_sep + "meshes");
-				for (let i: i32 = 0; i < project_mesh_list.length; ++i) {
-					let s: string = project_mesh_list[i];
-					project_mesh_list[i] = substring(project_mesh_list[i], 0, s.length - 4); // Trim .arm
-				}
-				array_push(project_mesh_list, "plane");
-				array_push(project_mesh_list, "sphere");
-			}
-
+			project_fetch_default_meshes();
 			ui_row2();
 			let h_project_type: ui_handle_t = ui_handle(__ID__);
 			if (h_project_type.init) {

+ 44 - 102
paint/sources/tab_meshes.ts

@@ -21,9 +21,20 @@ function tab_meshes_draw(htab: ui_handle_t) {
 				if (ui_menu_button(tr("Replace Existing"), map_get(config_keymap, "file_import_assets"))) {
 					project_import_mesh(true);
 				}
-				if (ui_menu_button(tr("Append"))) {
+				if (ui_menu_button(tr("Append File"))) {
 					project_append_mesh();
 				}
+
+				// project_fetch_default_meshes();
+				// if (ui_menu_button(tr("Append Shape"))) {
+				// 	ui_menu_draw(function () {
+				// 		for (let i: i32 = 0; i < project_mesh_list.length; ++i) {
+				// 			if (ui_menu_button(project_mesh_list[i])) {
+				// 				tab_meshes_append_shape(project_mesh_list[i]);
+				// 			}
+				// 		}
+				// 	});
+				// }
 			});
 		}
 		if (ui.is_hovered) ui_tooltip(tr("Import mesh file"));
@@ -333,46 +344,28 @@ function tab_meshes_draw(htab: ui_handle_t) {
 	}
 }
 
-function tab_meshes_set_default_mesh(name: string) {
-	let mo: mesh_object_t = null;
-	if (name == ".Plane" || name == ".Sphere") {
-		let res: i32 = config_raw.rp_supersample > 1.0 ? 2048 : 1024;
-		let mesh: raw_mesh_t = name == ".Plane" ? geom_make_plane(1, 1, res, res) : geom_make_uv_sphere(1.0, res, math_floor(res / 2), false, 2.0);
-		let raw: mesh_data_t = {
-			name: "Tessellated",
-			vertex_arrays: [
-				{ values: mesh.posa, attrib: "pos", data: "short4norm" },
-				{ values: mesh.nora, attrib: "nor", data: "short2norm" },
-				{ values: mesh.texa, attrib: "tex", data: "short2norm" }
-			],
-			index_array: mesh.inda,
-			scale_pos: mesh.scale_pos,
-			scale_tex: mesh.scale_tex
-		};
-		let md: mesh_data_t = mesh_data_create(raw);
-		mo = mesh_object_create(md, context_raw.paint_object.material);
-		array_remove(scene_meshes, mo);
-		mo.base.name = "Tessellated";
-	}
-	else {
-		mo = scene_get_child(name).ext;
-	}
-
-	mo.base.visible = true;
-	context_raw.ddirty = 2;
-	context_raw.paint_object = mo;
-	project_paint_objects[0] = mo;
-	if (ui_header_worktab.position == space_type_t.SPACE3D) {
-		scene_meshes = [mo];
-	}
-
-	render_path_raytrace_ready = false;
+function tab_meshes_append_shape(mesh_name: string) {
+	let blob: buffer_t = iron_load_blob(data_path() + "meshes/" + mesh_name + ".arm");
+	let raw: scene_t = armpack_decode(blob);
+	util_mesh_ext_pack_uvs(raw.mesh_datas[0].vertex_arrays[2].values);
+	let md: mesh_data_t = mesh_data_create(raw.mesh_datas[0]);
+	md._.handle = md.name;
+	let mo: mesh_object_t = scene_add_mesh_object(md, project_paint_objects[0].material);
+	mo.base.name = md.name;
+	let o: obj_t = {};
+	o._ = { _gc: raw };
+	mo.base.raw = o;
+	map_set(data_cached_meshes, md._.handle, md);
+	array_push(project_paint_objects, mo);
+	// tab_scene_import_mesh_done();
+	// sys_notify_on_next_frame(function(mo: mesh_object_t) {
+	// 	tab_scene_select_object(mo);
+	// }, mo);
 }
 
 ////
 
 let tab_scene_line_counter: i32 = 0;
-let tab_scene_new_meshes: string[] = null;
 let _tab_scene_paint_object_length: i32 = 1;
 
 function tab_scene_select_object(mo: mesh_object_t) {
@@ -499,79 +492,28 @@ function tab_scene_draw_list(list_handle: ui_handle_t, current_object: object_t)
 	}
 }
 
-function tab_scene_new_object(mesh_name: string) {
-	let blob: buffer_t = iron_load_blob(data_path() + "meshes/" + mesh_name);
-	let raw: scene_t = armpack_decode(blob);
-	util_mesh_ext_pack_uvs(raw.mesh_datas[0].vertex_arrays[2].values);
-	let md: mesh_data_t = mesh_data_create(raw.mesh_datas[0]);
-	md._.handle = md.name;
-	let mo: mesh_object_t = scene_add_mesh_object(md, project_paint_objects[0].material);
-	mo.base.name = md.name;
-	let o: obj_t = {};
-	o._ = { _gc: raw };
-	mo.base.raw = o;
-	map_set(data_cached_meshes, md._.handle, md);
-	array_push(project_paint_objects, mo);
-	tab_scene_import_mesh_done();
-	sys_notify_on_next_frame(function(mo: mesh_object_t) {
-		tab_scene_select_object(mo);
-	}, mo);
-}
-
-function tab_scene_new_menu() {
-	for (let i: i32 = 0; i < tab_scene_new_meshes.length; ++i) {
-		let mesh_name: string = tab_scene_new_meshes[i];
-		if (ui_menu_button(mesh_name)) {
-			tab_scene_new_object(mesh_name);
-		}
-	}
-}
-
 function tab_scene_draw(htab: ui_handle_t) {
 	if (ui_tab(htab, tr("Scene"))) {
 
-		ui_begin_sticky();
-
-		let row: f32[] = [1 / 4, 1 / 4];
-		ui_row(row);
-
-		if (ui_button("New")) {
-			if (tab_scene_new_meshes == null) {
-				tab_scene_new_meshes = file_read_directory(path_data() + path_sep + "meshes");
-			}
-
-			ui_menu_draw(tab_scene_new_menu);
-		}
+		tab_scene_line_counter = 0;
 
-		if (ui_button("Import")) {
-			project_import_mesh(false, tab_scene_import_mesh_done);
+		let scene: object_t = _scene_root.children[0];
+		for (let i: i32 = 0; i < scene.children.length; ++i) {
+			let c: object_t = scene.children[i];
+			tab_scene_draw_list(ui_handle(__ID__), c);
 		}
 
-		ui_end_sticky();
-
-		{
-			ui._y -= UI_ELEMENT_OFFSET();
-
-			tab_scene_line_counter = 0;
-
-			let scene: object_t = _scene_root.children[0];
-			for (let i: i32 = 0; i < scene.children.length; ++i) {
-				let c: object_t = scene.children[i];
-				tab_scene_draw_list(ui_handle(__ID__), c);
-			}
-
-			// Select object with arrow keys
-			if (ui.is_key_pressed && ui.key_code == key_code_t.DOWN) {
-				let i: i32 = array_index_of(project_paint_objects, context_raw.selected_object.ext);
-				if (i < project_paint_objects.length - 1) {
-					tab_scene_select_object(project_paint_objects[i + 1]);
-				}
+		// Select object with arrow keys
+		if (ui.is_key_pressed && ui.key_code == key_code_t.DOWN) {
+			let i: i32 = array_index_of(project_paint_objects, context_raw.selected_object.ext);
+			if (i < project_paint_objects.length - 1) {
+				tab_scene_select_object(project_paint_objects[i + 1]);
 			}
-			if (ui.is_key_pressed && ui.key_code == key_code_t.UP) {
-				let i: i32 = array_index_of(project_paint_objects, context_raw.selected_object.ext);
-				if (i > 1) {
-					tab_scene_select_object(project_paint_objects[i - 1]);
-				}
+		}
+		if (ui.is_key_pressed && ui.key_code == key_code_t.UP) {
+			let i: i32 = array_index_of(project_paint_objects, context_raw.selected_object.ext);
+			if (i > 1) {
+				tab_scene_select_object(project_paint_objects[i - 1]);
 			}
 		}
 	}