2017-01-16 08:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*  mesh_instance_3d_editor_plugin.cpp                                   */  
						 
					
						
							
								
									
										
										
										
											2017-01-16 08:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                       This file is part of:                           */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                           GODOT ENGINE                                */  
						 
					
						
							
								
									
										
										
										
											2017-08-27 14:16:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*                      https://godotengine.org                          */  
						 
					
						
							
								
									
										
										
										
											2017-01-16 08:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2021-01-01 20:13:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.                 */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).   */  
						 
					
						
							
								
									
										
										
										
											2017-01-16 08:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*                                                                       */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Permission is hereby granted, free of charge, to any person obtaining */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* a copy of this software and associated documentation files (the       */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* "Software"), to deal in the Software without restriction, including   */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* without limitation the rights to use, copy, modify, merge, publish,   */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* distribute, sublicense, and/or sell copies of the Software, and to    */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* permit persons to whom the Software is furnished to do so, subject to */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* the following conditions:                                             */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                                                                       */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* The above copyright notice and this permission notice shall be        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* included in all copies or substantial portions of the Software.       */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                                                                       */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2018-01-05 00:50:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "mesh_instance_3d_editor_plugin.h" 
  
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-24 15:17:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "editor/editor_scale.h" 
  
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "node_3d_editor_plugin.h" 
  
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "scene/3d/collision_shape_3d.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "scene/3d/navigation_region_3d.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "scene/3d/physics_body_3d.h" 
  
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "scene/gui/box_container.h" 
  
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  MeshInstance3DEditor : : _node_removed ( Node  * p_node )  {  
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_node  = =  node )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-02 01:20:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										node  =  nullptr ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										options - > hide ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  MeshInstance3DEditor : : edit ( MeshInstance3D  * p_mesh )  {  
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									node  =  p_mesh ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  MeshInstance3DEditor : : _menu_option ( int  p_option )  {  
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									Ref < Mesh >  mesh  =  node - > get_mesh ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( mesh . is_null ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										err_dialog - > set_text ( TTR ( " Mesh is empty! " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									switch  ( p_option )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  MENU_OPTION_CREATE_STATIC_TRIMESH_BODY :  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											EditorSelection  * editor_selection  =  EditorNode : : get_singleton ( ) - > get_editor_selection ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											UndoRedo  * ur  =  EditorNode : : get_singleton ( ) - > get_undo_redo ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											List < Node  * >  selection  =  editor_selection - > get_selected_node_list ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-12-15 12:04:21 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( selection . is_empty ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Ref < Shape3D >  shape  =  mesh - > create_trimesh_shape ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												if  ( shape . is_null ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													err_dialog - > set_text ( TTR ( " Couldn't create a Trimesh collision shape. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
													return ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												CollisionShape3D  * cshape  =  memnew ( CollisionShape3D ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												cshape - > set_shape ( shape ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												StaticBody3D  * body  =  memnew ( StaticBody3D ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												body - > add_child ( cshape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Node  * owner  =  node  = =  get_tree ( ) - > get_edited_scene_root ( )  ?  node  :  node - > get_owner ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												ur - > create_action ( TTR ( " Create Static Trimesh Body " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												ur - > add_do_method ( node ,  " add_child " ,  body ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > add_do_method ( body ,  " set_owner " ,  owner ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > add_do_method ( cshape ,  " set_owner " ,  owner ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												ur - > add_do_reference ( body ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												ur - > add_undo_method ( node ,  " remove_child " ,  body ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												ur - > commit_action ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											ur - > create_action ( TTR ( " Create Static Trimesh Body " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											for  ( List < Node  * > : : Element  * E  =  selection . front ( ) ;  E ;  E  =  E - > next ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												MeshInstance3D  * instance  =  Object : : cast_to < MeshInstance3D > ( E - > get ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												if  ( ! instance )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
													continue ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Ref < Mesh >  m  =  instance - > get_mesh ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												if  ( m . is_null ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
													continue ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Ref < Shape3D >  shape  =  m - > create_trimesh_shape ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												if  ( shape . is_null ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
													continue ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												CollisionShape3D  * cshape  =  memnew ( CollisionShape3D ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												cshape - > set_shape ( shape ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												StaticBody3D  * body  =  memnew ( StaticBody3D ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												body - > add_child ( cshape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Node  * owner  =  instance  = =  get_tree ( ) - > get_edited_scene_root ( )  ?  instance  :  instance - > get_owner ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												ur - > add_do_method ( instance ,  " add_child " ,  body ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > add_do_method ( body ,  " set_owner " ,  owner ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > add_do_method ( cshape ,  " set_owner " ,  owner ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												ur - > add_do_reference ( body ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												ur - > add_undo_method ( instance ,  " remove_child " ,  body ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > commit_action ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE :  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( node  = =  get_tree ( ) - > get_edited_scene_root ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												err_dialog - > set_text ( TTR ( " This doesn't work on scene root! " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Ref < Shape3D >  shape  =  mesh - > create_trimesh_shape ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( shape . is_null ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											CollisionShape3D  * cshape  =  memnew ( CollisionShape3D ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											cshape - > set_shape ( shape ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 17:42:52 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											cshape - > set_transform ( node - > get_transform ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Node  * owner  =  node - > get_owner ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											UndoRedo  * ur  =  EditorNode : : get_singleton ( ) - > get_undo_redo ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											ur - > create_action ( TTR ( " Create Trimesh Static Shape " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											ur - > add_do_method ( node - > get_parent ( ) ,  " add_child " ,  cshape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > add_do_method ( node - > get_parent ( ) ,  " move_child " ,  cshape ,  node - > get_index ( )  +  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > add_do_method ( cshape ,  " set_owner " ,  owner ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											ur - > add_do_reference ( cshape ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											ur - > add_undo_method ( node - > get_parent ( ) ,  " remove_child " ,  cshape ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											ur - > commit_action ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-07 12:14:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  MENU_OPTION_CREATE_SINGLE_CONVEX_COLLISION_SHAPE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  MENU_OPTION_CREATE_SIMPLIFIED_CONVEX_COLLISION_SHAPE :  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( node  = =  get_tree ( ) - > get_edited_scene_root ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > set_text ( TTR ( " Can't create a single convex collision shape for the scene root. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-07 12:14:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											bool  simplify  =  ( p_option  = =  MENU_OPTION_CREATE_SIMPLIFIED_CONVEX_COLLISION_SHAPE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Ref < Shape3D >  shape  =  mesh - > create_convex_shape ( true ,  simplify ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( shape . is_null ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												err_dialog - > set_text ( TTR ( " Couldn't create a single convex collision shape. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											UndoRedo  * ur  =  EditorNode : : get_singleton ( ) - > get_undo_redo ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-07 12:14:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( simplify )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > create_action ( TTR ( " Create Simplified Convex Shape " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > create_action ( TTR ( " Create Single Convex Shape " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											CollisionShape3D  * cshape  =  memnew ( CollisionShape3D ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											cshape - > set_shape ( shape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cshape - > set_transform ( node - > get_transform ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Node  * owner  =  node - > get_owner ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > add_do_method ( node - > get_parent ( ) ,  " add_child " ,  cshape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > add_do_method ( node - > get_parent ( ) ,  " move_child " ,  cshape ,  node - > get_index ( )  +  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > add_do_method ( cshape ,  " set_owner " ,  owner ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > add_do_reference ( cshape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > add_undo_method ( node - > get_parent ( ) ,  " remove_child " ,  cshape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > commit_action ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-07 12:14:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  MENU_OPTION_CREATE_MULTIPLE_CONVEX_COLLISION_SHAPES :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( node  = =  get_tree ( ) - > get_edited_scene_root ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												err_dialog - > set_text ( TTR ( " Can't create multiple convex collision shapes for the scene root. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Vector < Ref < Shape3D > >  shapes  =  mesh - > convex_decompose ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! shapes . size ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > set_text ( TTR ( " Couldn't create any collision shapes. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											UndoRedo  * ur  =  EditorNode : : get_singleton ( ) - > get_undo_redo ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											ur - > create_action ( TTR ( " Create Multiple Convex Shapes " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											for  ( int  i  =  0 ;  i  <  shapes . size ( ) ;  i + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												CollisionShape3D  * cshape  =  memnew ( CollisionShape3D ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												cshape - > set_shape ( shapes [ i ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-02 15:08:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												cshape - > set_transform ( node - > get_transform ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 17:46:04 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Node  * owner  =  node - > get_owner ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > add_do_method ( node - > get_parent ( ) ,  " add_child " ,  cshape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > add_do_method ( node - > get_parent ( ) ,  " move_child " ,  cshape ,  node - > get_index ( )  +  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > add_do_method ( cshape ,  " set_owner " ,  owner ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > add_do_reference ( cshape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												ur - > add_undo_method ( node - > get_parent ( ) ,  " remove_child " ,  cshape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > commit_action ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  MENU_OPTION_CREATE_NAVMESH :  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Ref < NavigationMesh >  nmesh  =  memnew ( NavigationMesh ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( nmesh . is_null ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											nmesh - > create_from_mesh ( mesh ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											NavigationRegion3D  * nmi  =  memnew ( NavigationRegion3D ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											nmi - > set_navigation_mesh ( nmesh ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Node  * owner  =  node  = =  get_tree ( ) - > get_edited_scene_root ( )  ?  node  :  node - > get_owner ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											UndoRedo  * ur  =  EditorNode : : get_singleton ( ) - > get_undo_redo ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > create_action ( TTR ( " Create Navigation Mesh " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											ur - > add_do_method ( node ,  " add_child " ,  nmi ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > add_do_method ( nmi ,  " set_owner " ,  owner ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ur - > add_do_reference ( nmi ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											ur - > add_undo_method ( node ,  " remove_child " ,  nmi ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											ur - > commit_action ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  MENU_OPTION_CREATE_OUTLINE_MESH :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											outline_dialog - > popup_centered ( Vector2 ( 200 ,  90 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  MENU_OPTION_CREATE_UV2 :  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-12 21:10:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Ref < ArrayMesh >  mesh2  =  node - > get_mesh ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! mesh2 . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > set_text ( TTR ( " Contained Mesh is not of type ArrayMesh. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-02-12 21:10:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Error  err  =  mesh2 - > lightmap_unwrap ( node - > get_global_transform ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if  ( err  ! =  OK )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												err_dialog - > set_text ( TTR ( " UV Unwrap failed, mesh may not be manifold? " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  MENU_OPTION_DEBUG_UV1 :  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-12 21:10:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Ref < Mesh >  mesh2  =  node - > get_mesh ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! mesh2 . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > set_text ( TTR ( " No mesh to debug. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											_create_uv_lines ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  MENU_OPTION_DEBUG_UV2 :  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-12 21:10:08 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Ref < Mesh >  mesh2  =  node - > get_mesh ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! mesh2 . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > set_text ( TTR ( " No mesh to debug. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											_create_uv_lines ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  MeshInstance3DEditorEdgeSort  {  
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Vector2  a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Vector2  b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  operator < ( const  MeshInstance3DEditorEdgeSort  & p_b )  const  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( a  = =  p_b . a )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return  b  <  p_b . b ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return  a  <  p_b . a ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									MeshInstance3DEditorEdgeSort ( )  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									MeshInstance3DEditorEdgeSort ( const  Vector2  & p_a ,  const  Vector2  & p_b )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( p_a  <  p_b )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											a  =  p_a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											b  =  p_b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											b  =  p_a ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											a  =  p_b ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  MeshInstance3DEditor : : _create_uv_lines ( int  p_layer )  {  
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Ref < Mesh >  mesh  =  node - > get_mesh ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_COND ( ! mesh . is_valid ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Set < MeshInstance3DEditorEdgeSort >  edges ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									uv_lines . clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  mesh - > get_surface_count ( ) ;  i + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( mesh - > surface_get_primitive_type ( i )  ! =  Mesh : : PRIMITIVE_TRIANGLES )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											continue ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Array  a  =  mesh - > surface_get_arrays ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-17 18:06:54 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Vector < Vector2 >  uv  =  a [ p_layer  = =  0  ?  Mesh : : ARRAY_TEX_UV  :  Mesh : : ARRAY_TEX_UV2 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( uv . size ( )  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											err_dialog - > set_text ( TTR ( " Model has no UV in this layer " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-17 18:06:54 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										const  Vector2  * r  =  uv . ptr ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-17 18:06:54 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Vector < int >  indices  =  a [ Mesh : : ARRAY_INDEX ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-02 01:20:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										const  int  * ri  =  nullptr ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										int  ic ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( indices . size ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ic  =  indices . size ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-17 18:06:54 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											ri  =  indices . ptr ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ic  =  uv . size ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for  ( int  j  =  0 ;  j  <  ic ;  j  + =  3 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											for  ( int  k  =  0 ;  k  <  3 ;  k + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												MeshInstance3DEditorEdgeSort  edge ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-31 13:50:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												if  ( ri )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													edge . a  =  r [ ri [ j  +  k ] ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													edge . b  =  r [ ri [ j  +  ( ( k  +  1 )  %  3 ) ] ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													edge . a  =  r [ j  +  k ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													edge . b  =  r [ j  +  ( ( k  +  1 )  %  3 ) ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												if  ( edges . has ( edge ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													continue ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												uv_lines . push_back ( edge . a ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												uv_lines . push_back ( edge . b ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												edges . insert ( edge ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									debug_uv_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  MeshInstance3DEditor : : _debug_uv_draw ( )  {  
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( uv_lines . size ( )  = =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									debug_uv - > set_clip_contents ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									debug_uv - > draw_rect ( Rect2 ( Vector2 ( ) ,  debug_uv - > get_size ( ) ) ,  Color ( 0.2 ,  0.2 ,  0.0 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									debug_uv - > draw_set_transform ( Vector2 ( ) ,  0 ,  debug_uv - > get_size ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									debug_uv - > draw_multiline ( uv_lines ,  Color ( 1.0 ,  0.8 ,  0.7 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  MeshInstance3DEditor : : _create_outline_mesh ( )  {  
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									Ref < Mesh >  mesh  =  node - > get_mesh ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( mesh . is_null ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 18:22:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										err_dialog - > set_text ( TTR ( " MeshInstance3D lacks a Mesh. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-20 19:57:21 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( mesh - > get_surface_count ( )  = =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 18:22:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										err_dialog - > set_text ( TTR ( " Mesh has not surface to create outlines from. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-01 22:06:47 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									}  else  if  ( mesh - > get_surface_count ( )  = =  1  & &  mesh - > surface_get_primitive_type ( 0 )  ! =  Mesh : : PRIMITIVE_TRIANGLES )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 18:22:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										err_dialog - > set_text ( TTR ( " Mesh primitive type is not PRIMITIVE_TRIANGLES. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-20 19:57:21 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-04 01:16:14 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Ref < Mesh >  mesho  =  mesh - > create_outline ( outline_size - > get_value ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( mesho . is_null ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 18:22:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										err_dialog - > set_text ( TTR ( " Could not create outline. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-06 14:00:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										err_dialog - > popup_centered ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									MeshInstance3D  * mi  =  memnew ( MeshInstance3D ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									mi - > set_mesh ( mesho ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Node  * owner  =  node - > get_owner ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( get_tree ( ) - > get_edited_scene_root ( )  = =  node )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										owner  =  node ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									UndoRedo  * ur  =  EditorNode : : get_singleton ( ) - > get_undo_redo ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ur - > create_action ( TTR ( " Create Outline " ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ur - > add_do_method ( node ,  " add_child " ,  mi ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ur - > add_do_method ( mi ,  " set_owner " ,  owner ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ur - > add_do_reference ( mi ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ur - > add_undo_method ( node ,  " remove_child " ,  mi ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ur - > commit_action ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  MeshInstance3DEditor : : _bind_methods ( )  {  
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								MeshInstance3DEditor : : MeshInstance3DEditor ( )  {  
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options  =  memnew ( MenuButton ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-25 10:27:33 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > set_switch_on_hover ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Node3DEditor : : get_singleton ( ) - > add_control_to_menu_panel ( options ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-01 14:32:20 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > set_text ( TTR ( " Mesh " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-17 18:22:52 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > set_icon ( EditorNode : : get_singleton ( ) - > get_gui_base ( ) - > get_theme_icon ( SNAME ( " MeshInstance3D " ) ,  SNAME ( " EditorIcons " ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_item ( TTR ( " Create Trimesh Static Body " ) ,  MENU_OPTION_CREATE_STATIC_TRIMESH_BODY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 18:22:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > set_item_tooltip ( options - > get_popup ( ) - > get_item_count ( )  -  1 ,  TTR ( " Creates a StaticBody3D and assigns a polygon-based collision shape to it automatically. \n This is the most accurate (but slowest) option for collision detection. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_separator ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_item ( TTR ( " Create Trimesh Collision Sibling " ) ,  MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > set_item_tooltip ( options - > get_popup ( ) - > get_item_count ( )  -  1 ,  TTR ( " Creates a polygon-based collision shape. \n This is the most accurate (but slowest) option for collision detection. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-26 22:25:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_item ( TTR ( " Create Single Convex Collision Sibling " ) ,  MENU_OPTION_CREATE_SINGLE_CONVEX_COLLISION_SHAPE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > set_item_tooltip ( options - > get_popup ( ) - > get_item_count ( )  -  1 ,  TTR ( " Creates a single convex collision shape. \n This is the fastest (but least accurate) option for collision detection. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-07 12:14:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_item ( TTR ( " Create Simplified Convex Collision Sibling " ) ,  MENU_OPTION_CREATE_SIMPLIFIED_CONVEX_COLLISION_SHAPE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									options - > get_popup ( ) - > set_item_tooltip ( options - > get_popup ( ) - > get_item_count ( )  -  1 ,  TTR ( " Creates a simplified convex collision shape. \n This is similar to single collision shape, but can result in a simpler geometry in some cases, at the cost of accuracy. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-31 16:30:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_item ( TTR ( " Create Multiple Convex Collision Siblings " ) ,  MENU_OPTION_CREATE_MULTIPLE_CONVEX_COLLISION_SHAPES ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-07 12:14:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > set_item_tooltip ( options - > get_popup ( ) - > get_item_count ( )  -  1 ,  TTR ( " Creates a polygon-based collision shape. \n This is a performance middle-ground between a single convex collision and a polygon-based collision. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_separator ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_item ( TTR ( " Create Navigation Mesh " ) ,  MENU_OPTION_CREATE_NAVMESH ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_separator ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-22 19:36:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_item ( TTR ( " Create Outline Mesh... " ) ,  MENU_OPTION_CREATE_OUTLINE_MESH ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > set_item_tooltip ( options - > get_popup ( ) - > get_item_count ( )  -  1 ,  TTR ( " Creates a static outline mesh. The outline mesh will have its normals flipped automatically. \n This can be used instead of the StandardMaterial Grow property when using that property isn't possible. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_separator ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_item ( TTR ( " View UV1 " ) ,  MENU_OPTION_DEBUG_UV1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_item ( TTR ( " View UV2 " ) ,  MENU_OPTION_DEBUG_UV2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									options - > get_popup ( ) - > add_item ( TTR ( " Unwrap UV2 for Lightmap/AO " ) ,  MENU_OPTION_CREATE_UV2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									options - > get_popup ( ) - > connect ( " id_pressed " ,  callable_mp ( this ,  & MeshInstance3DEditor : : _menu_option ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									outline_dialog  =  memnew ( ConfirmationDialog ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									outline_dialog - > set_title ( TTR ( " Create Outline Mesh " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-14 18:37:30 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									outline_dialog - > get_ok_button ( ) - > set_text ( TTR ( " Create " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									VBoxContainer  * outline_dialog_vbc  =  memnew ( VBoxContainer ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									outline_dialog - > add_child ( outline_dialog_vbc ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-10 01:49:55 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									//outline_dialog->set_child_rect(outline_dialog_vbc);
 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									outline_size  =  memnew ( SpinBox ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									outline_size - > set_min ( 0.001 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									outline_size - > set_max ( 1024 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									outline_size - > set_step ( 0.001 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-04 01:16:14 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									outline_size - > set_value ( 0.05 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									outline_dialog_vbc - > add_margin_child ( TTR ( " Outline Size: " ) ,  outline_size ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									add_child ( outline_dialog ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									outline_dialog - > connect ( " confirmed " ,  callable_mp ( this ,  & MeshInstance3DEditor : : _create_outline_mesh ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err_dialog  =  memnew ( AcceptDialog ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									add_child ( err_dialog ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									debug_uv_dialog  =  memnew ( AcceptDialog ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-27 10:31:55 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									debug_uv_dialog - > set_title ( TTR ( " UV Channel Debug " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									add_child ( debug_uv_dialog ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									debug_uv  =  memnew ( Control ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									debug_uv - > set_custom_minimum_size ( Size2 ( 600 ,  600 )  *  EDSCALE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									debug_uv - > connect ( " draw " ,  callable_mp ( this ,  & MeshInstance3DEditor : : _debug_uv_draw ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-09 14:11:26 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									debug_uv_dialog - > add_child ( debug_uv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  MeshInstance3DEditorPlugin : : edit ( Object  * p_object )  {  
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									mesh_editor - > edit ( Object : : cast_to < MeshInstance3D > ( p_object ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  MeshInstance3DEditorPlugin : : handles ( Object  * p_object )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-03-26 18:49:16 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  p_object - > is_class ( " MeshInstance3D " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  MeshInstance3DEditorPlugin : : make_visible ( bool  p_visible )  {  
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									if  ( p_visible )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mesh_editor - > options - > show ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mesh_editor - > options - > hide ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-02 01:20:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										mesh_editor - > edit ( nullptr ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								MeshInstance3DEditorPlugin : : MeshInstance3DEditorPlugin ( EditorNode  * p_node )  {  
						 
					
						
							
								
									
										
										
										
											2017-03-05 16:44:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									editor  =  p_node ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									mesh_editor  =  memnew ( MeshInstance3DEditor ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-28 19:51:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									editor - > get_main_control ( ) - > add_child ( mesh_editor ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									mesh_editor - > options - > hide ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								MeshInstance3DEditorPlugin : : ~ MeshInstance3DEditorPlugin ( )  {  
						 
					
						
							
								
									
										
										
										
											2016-05-23 17:10:26 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}