void Import(VPaintGroup paintable) { foreach (var layer in paintable.GetLayerStack().layers) { VPaint.Instance.layerStack.layers.Add(layer.Clone()); } VPaint.Instance.layerStack.Sanitize(); VPaint.Instance.ReloadLayers(); }
// int layerToImport = -1; public override void OnValidatedGUI() { // IVPaintable paintable = VPaint.GetIVPaintable(Selection.activeGameObject); // if(paintable != null) // { // var obj = paintable as UnityEngine.Object; // if(EditorUtility.IsPersistent(obj)) paintable = null; // } // if(paintable == VPaint.Instance.layerCache) paintable = null; VPaintGroup paintable = null; if (Selection.activeGameObject) { paintable = Selection.activeGameObject.GetComponent <VPaintGroup>(); } GUIStyle style = GetWordWrappedLabel(); GUILayout.Label("Select a VPaint Group to import into the currently selected layer stack.", style); GUILayout.Space(10); EditorGUILayout.ObjectField(new GUIContent("Import Target:"), paintable, typeof(VPaintGroup), true); // List<string> layerNames = new List<string>(); // layerNames.Add("All Layers"); // if(paintable != null) { // foreach(var l in paintable.GetLayerStack().layers) { // layerNames.Add(l.name); // } // GUI.enabled = true; // }else{ // layerToImport = -1; // GUI.enabled = false; // } // layerToImport = EditorGUILayout.Popup("Import Layers", layerToImport+1, layerNames.ToArray())-1; GUILayout.FlexibleSpace(); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUI.enabled = paintable != null; if (GUILayout.Button("Import")) { Import(paintable); } EditorGUILayout.EndHorizontal(); maxSize = new Vector2(400, 120); }
public virtual void CachePaintGroup(VPaintGroup grp) { foreach (var obj in storageObjects) { GameObject.DestroyImmediate(obj, true); } storageObjects.Clear(); layerStack = grp.layerStack.Clone(); try { var swaps = new Dictionary <VPaintObject, VPaintStorageObject>(); for (int i = 0; i < grp.colorers.Count; i++) { EditorUtility.DisplayProgressBar("Caching VPaint Data", "Transferring color data", (float)i / grp.colorers.Count); var obj = grp.colorers[i]; var t = CreateStorageObject(obj); AssetDatabase.AddObjectToAsset(t, this); swaps.Add(obj, t); storageObjects.Add(t); } for (int i = 0; i < layerStack.layers.Count; i++) { float offset = (float)i / layerStack.layers.Count; float factor = ((float)(i + 1) / layerStack.layers.Count) - offset; var layer = layerStack.layers[i]; for (int d = 0; d < layer.paintData.Count; d++) { EditorUtility.DisplayProgressBar("Caching VPaint Data", "Updating layer data", offset + ((float)d / layer.paintData.Count) * factor); var data = layer.paintData[d]; var vp = data.vpaintObject as VPaintObject; if (!vp) { continue; } if (!swaps.ContainsKey(vp)) { data.vpaintObject = null; continue; } data.colorer = swaps[vp]; } } for (int i = 0; i < grp.vertexCache.Count; i++) { EditorUtility.DisplayProgressBar("Copying Vertex Cache", "Copying cache " + i, (float)i / grp.vertexCache.Count); var cache = grp.vertexCache[i]; var t = CreateStorageObject(cache.vpaintObject); AssetDatabase.AddObjectToAsset(t, this); storageObjects.Add(t); vertexCache.Add(new VPaintVertexCache() { obj = t, vertices = cache.vertices }); } }finally{ EditorUtility.ClearProgressBar(); } EditorUtility.SetDirty(this); }