Esempio n. 1
0
        //-----------------------------------------------------------------------------------------

        // FFD Start
        public bool StartFFDTransform__MeshTRS()
        {
            if (Editor.Select.SelectionType != apSelection.SELECTION_TYPE.Mesh ||
                Editor.Select.Mesh == null ||
                Editor.Select.Mesh.LinkedTextureData == null ||
                Editor.Select.Mesh.LinkedTextureData._image == null ||
                Editor._meshEditMode != apEditor.MESH_EDIT_MODE.MakeMesh ||
                Editor._meshEditeMode_MakeMesh != apEditor.MESH_EDIT_MODE_MAKEMESH.TRS)
            {
                return(false);
            }

            apMesh          mesh             = Editor.Select.Mesh;
            List <apVertex> vertices         = mesh._vertexData;
            List <apVertex> selectedVertices = Editor.VertController.Vertices;

            if (vertices.Count == 0 || selectedVertices.Count == 0)
            {
                return(false);
            }

            List <object>  srcObjectList = new List <object>();
            List <Vector2> worldPosList  = new List <Vector2>();
            apVertex       vert          = null;

            for (int i = 0; i < selectedVertices.Count; i++)
            {
                vert = selectedVertices[i];
                srcObjectList.Add(vert);
                worldPosList.Add(vert._pos - mesh._offsetPos);
            }
            Editor.Gizmos.RegistTransformedObjectList(srcObjectList, worldPosList);            //<<True로 리턴할거면 이 함수를 호출해주자
            return(true);
        }
Esempio n. 2
0
        public void Move__MeshAutoGen(Vector2 curMouseGL, Vector2 curMousePosW, Vector2 deltaMoveW, int btnIndex, bool isFirstMove)
        {
            if (Editor.Select.SelectionType != apSelection.SELECTION_TYPE.Mesh ||
                Editor.Select.Mesh == null ||
                Editor.Select.Mesh.LinkedTextureData == null ||
                Editor.Select.Mesh.LinkedTextureData._image == null ||
                Editor._meshEditMode != apEditor.MESH_EDIT_MODE.MakeMesh ||
                Editor._meshEditeMode_MakeMesh != apEditor.MESH_EDIT_MODE_MAKEMESH.AutoGenerate ||
                !Editor.MeshGenerator.IsScanned)
            {
                return;
            }

            apMesh mesh = Editor.Select.Mesh;
            //Vector2 imageHalfOffset = new Vector2(mesh.LinkedTextureData._width * 0.5f, mesh.LinkedTextureData._height * 0.5f);

            List <apMeshGenMapper.ControlPoint> controlPoints         = Editor.MeshGenerator.Mapper.ControlPoints;
            List <apMeshGenMapper.ControlPoint> selectedControlPoints = Editor.MeshGenerator._selectedControlPoints;

            apMeshGenMapper.ControlPoint curPoint = null;


            for (int i = 0; i < selectedControlPoints.Count; i++)
            {
                curPoint           = selectedControlPoints[i];
                curPoint._pos_Cur += deltaMoveW;
            }

            Editor.SetRepaint();
        }
Esempio n. 3
0
        // Select
        public apGizmos.SelectResult Select__MeshTRS(Vector2 mousePosGL, Vector2 mousePosW, int btnIndex, apGizmos.SELECT_TYPE selectType)
        {
            if (Editor.Select.SelectionType != apSelection.SELECTION_TYPE.Mesh ||
                Editor.Select.Mesh == null ||
                Editor.Select.Mesh.LinkedTextureData == null ||
                Editor.Select.Mesh.LinkedTextureData._image == null ||
                Editor._meshEditMode != apEditor.MESH_EDIT_MODE.MakeMesh ||
                Editor._meshEditeMode_MakeMesh != apEditor.MESH_EDIT_MODE_MAKEMESH.TRS)
            {
                return(null);
            }

            apMesh mesh = Editor.Select.Mesh;
            //Vector2 imageHalfOffset = new Vector2(mesh.LinkedTextureData._width * 0.5f, mesh.LinkedTextureData._height * 0.5f);
            List <apVertex> vertices = mesh._vertexData;

            if (vertices.Count == 0)
            {
                return(null);
            }

            List <apVertex> tmpVertex = null;

            apVertex curVert = null;

            for (int iVert = 0; iVert < vertices.Count; iVert++)
            {
                curVert = vertices[iVert];

                //클릭할 수 있는가
                //if (Editor.Controller.IsVertexClickable(apGL.World2GL(curVert._pos - (mesh._offsetPos + imageHalfOffset)), mousePosGL))
                if (Editor.Controller.IsVertexClickable(apGL.World2GL(curVert._pos - (mesh._offsetPos)), mousePosGL))
                {
                    //일단 리스트에 추가
                    if (tmpVertex == null)
                    {
                        tmpVertex = new List <apVertex>();
                    }
                    tmpVertex.Add(curVert);

                    if (selectType == apGizmos.SELECT_TYPE.New)
                    {
                        //New인 경우에는 1개만 체크한다.
                        break;
                    }
                }
            }
            if (tmpVertex != null)
            {
                Editor.VertController.SelectVertices(tmpVertex, selectType);
                Editor.SetRepaint();
            }
            else if (selectType == apGizmos.SELECT_TYPE.New)
            {
                Editor.VertController.UnselectVertex();
                Editor.SetRepaint();
            }

            return(apGizmos.SelectResult.Main.SetMultiple <apVertex>(Editor.VertController.Vertices));
        }
Esempio n. 4
0
        // Init
        //------------------------------------
        public apRenderVertex(apRenderUnit parentRenderUnit, apMeshGroup parentMeshGroup, apMesh parentMesh, apVertex vertex)
        {
            _parentRenderUnit = parentRenderUnit;
            _parentMeshGroup  = parentMeshGroup;
            _parentMesh       = parentMesh;
            _vertex           = vertex;

            //_isStaticRefreshed = false;
            _isCalculated = false;

            //_matrixStack.Clear();

            //
            _matrix_Static_Vert2Mesh = apMatrix3x3.identity;
            _matrix_Cal_VertLocal    = apMatrix3x3.identity;
            _matrix_MeshTransform    = apMatrix3x3.identity;

            _matrix_Cal_VertWorld = apMatrix3x3.identity;
            _matrix_ToWorld       = apMatrix3x3.identity;
            _pos_World            = Vector2.zero;

            //_cal_VertWorld = Vector2.zero;

            //_matrixHashCode_Static_Vert2Mesh = -1;
            //_matrixHashCode_Calculate = -1;

            //_isMatrixChanged = true;
            //_isUpdateMatrixForce = true;

            _pos_Rigging    = Vector2.zero;
            _weight_Rigging = 0.0f;

            _matrix_Rigging = apMatrix3x3.identity;
        }
Esempio n. 5
0
        //---------------------------------------------------------------------------------------
        public apGizmos.SelectResult MultipleSelect__MeshTRS(Vector2 mousePosGL_Min, Vector2 mousePosGL_Max, Vector2 mousePosW_Min, Vector2 mousePosW_Max, apGizmos.SELECT_TYPE areaSelectType)
        {
            if (Editor.Select.SelectionType != apSelection.SELECTION_TYPE.Mesh ||
                Editor.Select.Mesh == null ||
                Editor.Select.Mesh.LinkedTextureData == null ||
                Editor.Select.Mesh.LinkedTextureData._image == null ||
                Editor._meshEditMode != apEditor.MESH_EDIT_MODE.MakeMesh ||
                Editor._meshEditeMode_MakeMesh != apEditor.MESH_EDIT_MODE_MAKEMESH.TRS)
            {
                return(null);
            }

            apMesh mesh = Editor.Select.Mesh;
            //Vector2 imageHalfOffset = new Vector2(mesh.LinkedTextureData._width * 0.5f, mesh.LinkedTextureData._height * 0.5f);
            List <apVertex> vertices = mesh._vertexData;

            if (vertices.Count == 0)
            {
                return(null);
            }

            List <apVertex> tmpVertex = null;

            apVertex curVert = null;
            Vector2  vertPos = Vector2.zero;

            for (int iVert = 0; iVert < vertices.Count; iVert++)
            {
                curVert = vertices[iVert];

                //클릭할 수 있는가
                //vertPos = curVert._pos - (mesh._offsetPos + imageHalfOffset);
                vertPos = curVert._pos - (mesh._offsetPos);

                bool isSelectable = (mousePosW_Min.x < vertPos.x && vertPos.x < mousePosW_Max.x) &&
                                    (mousePosW_Min.y < vertPos.y && vertPos.y < mousePosW_Max.y);

                if (isSelectable)
                {
                    //일단 리스트에 추가
                    if (tmpVertex == null)
                    {
                        tmpVertex = new List <apVertex>();
                    }
                    tmpVertex.Add(curVert);
                }
            }
            if (tmpVertex != null)
            {
                Editor.VertController.SelectVertices(tmpVertex, areaSelectType);
                Editor.SetRepaint();
            }
            else if (areaSelectType == apGizmos.SELECT_TYPE.New)
            {
                Editor.VertController.UnselectVertex();
                Editor.SetRepaint();
            }

            return(apGizmos.SelectResult.Main.SetMultiple <apVertex>(Editor.VertController.Vertices));
        }
Esempio n. 6
0
        // 단축키 : 버텍스 전체 선택
        private void OnHotKeyEvent__MeshTRS__Ctrl_A(object paramObject)
        {
            if (Editor.Select.SelectionType != apSelection.SELECTION_TYPE.Mesh ||
                Editor.Select.Mesh == null ||
                Editor.Select.Mesh.LinkedTextureData == null ||
                Editor.Select.Mesh.LinkedTextureData._image == null ||
                Editor._meshEditMode != apEditor.MESH_EDIT_MODE.MakeMesh ||
                Editor._meshEditeMode_MakeMesh != apEditor.MESH_EDIT_MODE_MAKEMESH.TRS)
            {
                return;
            }

            apMesh mesh = Editor.Select.Mesh;

            List <apVertex> vertices = mesh._vertexData;

            if (vertices.Count == 0)
            {
                return;
            }
            //전체 선택
            Editor.VertController.SelectVertices(vertices, apGizmos.SELECT_TYPE.Add);
            Editor.SetRepaint();

            Editor.Gizmos.SetSelectResultForce_Multiple <apVertex>(Editor.VertController.Vertices);
        }
Esempio n. 7
0
        public override void ExecuteNext2Prev(apEditor editor)
        {
            try
            {
                switch (_actionType)
                {
                case apUndoManager.ACTION_TYPE.Add:
                {
                    apMesh mesh = _keyObj as apMesh;
                    if (mesh == null)
                    {
                        return;
                    }

                    //Next에서 Prev로 Vertex List를 비교하여 [제거]해준다.
                    //Add의 반대는 Remove
                    Debug.Log("Undo : Add -> Remove");
                }
                break;

                case apUndoManager.ACTION_TYPE.Remove:
                    break;

                case apUndoManager.ACTION_TYPE.Changed:
                    break;
                }
            }
            catch (Exception ex)
            {
                Debug.LogError("Undo Exception : " + ex);
            }
        }
Esempio n. 8
0
        // Functions
        //----------------------------------------------
        /// <summary>
        /// 현재 변수값을 저장한다.
        /// 오브젝트의 현재 값을 그대로 저장한다.
        /// </summary>
        public override void SavePrevStatus()
        {
            Debug.Log("Record Prev Status : Mesh Vertex : " + _actionType + " / " + _label);
            // 액션 타입에 따라 keyObj와 저장된 데이터가 다르다.
            switch (_actionType)
            {
            case apUndoManager.ACTION_TYPE.Add:
            {
                apMesh mesh = _keyObj as apMesh;
                if (mesh == null)
                {
                    return;
                }

                //현재의 VertexData를 기록한다.
                _copiedVertices_Prev.Clear();
                for (int i = 0; i < mesh._vertexData.Count; i++)
                {
                    _copiedVertices_Prev.Add(new CopiedVertexData(mesh._vertexData[i]));
                }
            }
            break;

            case apUndoManager.ACTION_TYPE.Remove:
                break;

            case apUndoManager.ACTION_TYPE.Changed:
                break;
            }
        }
Esempio n. 9
0
        // Scale
        public void Scale__MeshTRS(Vector2 deltaScaleW, bool isFirstScale)
        {
            if (Editor.Select.SelectionType != apSelection.SELECTION_TYPE.Mesh ||
                Editor.Select.Mesh == null ||
                Editor.Select.Mesh.LinkedTextureData == null ||
                Editor.Select.Mesh.LinkedTextureData._image == null ||
                Editor._meshEditMode != apEditor.MESH_EDIT_MODE.MakeMesh ||
                Editor._meshEditeMode_MakeMesh != apEditor.MESH_EDIT_MODE_MAKEMESH.TRS)
            {
                return;
            }

            apMesh mesh = Editor.Select.Mesh;
            //Vector2 imageHalfOffset = new Vector2(mesh.LinkedTextureData._width * 0.5f, mesh.LinkedTextureData._height * 0.5f);
            List <apVertex> vertices         = mesh._vertexData;
            List <apVertex> selectedVertices = Editor.VertController.Vertices;

            if (vertices.Count == 0 || selectedVertices.Count == 0)
            {
                return;
            }

            if (isFirstScale)
            {
                apEditorUtil.SetRecord_Mesh(apUndoGroupData.ACTION.MeshEdit_EditVertex, Editor, mesh, mesh, true);
            }

            apVertex curVert   = null;
            Vector2  centerPos = Vector2.zero;

            for (int i = 0; i < selectedVertices.Count; i++)
            {
                curVert    = selectedVertices[i];
                centerPos += curVert._pos - mesh._offsetPos;
            }
            centerPos /= selectedVertices.Count;

            Vector2 scale = new Vector2(1.0f + deltaScaleW.x, 1.0f + deltaScaleW.y);

            apMatrix3x3 matrix_Rotate = apMatrix3x3.TRS(centerPos, 0, Vector2.one)
                                        * apMatrix3x3.TRS(Vector2.zero, 0.0f, scale)
                                        * apMatrix3x3.TRS(-centerPos, 0, Vector2.one);

            Vector2 posW = Vector2.zero;

            for (int i = 0; i < selectedVertices.Count; i++)
            {
                curVert      = selectedVertices[i];
                posW         = curVert._pos - (mesh._offsetPos);
                posW         = matrix_Rotate.MultiplyPoint(posW);
                curVert._pos = posW + (mesh._offsetPos);
            }

            for (int i = 0; i < selectedVertices.Count; i++)
            {
                mesh.RefreshVertexAutoUV(selectedVertices[i]);
            }

            Editor.SetRepaint();
        }
Esempio n. 10
0
        /// <summary>
        /// 변경된(갱신, 추가, 삭제)된 valueObj를 반영하자
        /// </summary>
        public override void Refresh()
        {
            switch (_actionType)
            {
            case apUndoManager.ACTION_TYPE.Add:
            {
                apMesh mesh = _keyObj as apMesh;
                if (mesh == null)
                {
                    return;
                }

                //변경된 VertexData를 기록한다.
                _copiedVertices_Next.Clear();
                for (int i = 0; i < mesh._vertexData.Count; i++)
                {
                    _copiedVertices_Next.Add(new CopiedVertexData(mesh._vertexData[i]));
                }
            }
            break;

            case apUndoManager.ACTION_TYPE.Remove:
                break;

            case apUndoManager.ACTION_TYPE.Changed:
                break;
            }
        }
Esempio n. 11
0
        // Show Window
        //------------------------------------------------------------------
        public static object ShowDialog(apEditor editor, apMesh targetMesh, FUNC_SELECT_TEXTUREDATA_RESULT funcResult)
        {
            CloseDialog();

            if (editor == null || editor._portrait == null || editor._portrait._controller == null)
            {
                return(null);
            }

            EditorWindow curWindow             = EditorWindow.GetWindow(typeof(apDialog_SelectTextureData), true, "Select Texture", true);
            apDialog_SelectTextureData curTool = curWindow as apDialog_SelectTextureData;

            object loadKey = new object();

            if (curTool != null && curTool != s_window)
            {
                int width  = 500;
                int height = 600;
                s_window          = curTool;
                s_window.position = new Rect((editor.position.xMin + editor.position.xMax) / 2 - (width / 2),
                                             (editor.position.yMin + editor.position.yMax) / 2 - (height / 2),
                                             width, height);
                s_window.Init(editor, targetMesh, loadKey, funcResult);

                return(loadKey);
            }
            else
            {
                return(null);
            }
        }
        public void Link(apModifiedMesh modifiedMesh, apMesh mesh, apVertex vertex)
        {
            _modifiedMesh = modifiedMesh;
            _mesh         = mesh;
            _vertex       = vertex;
            if (_vertex != null)
            {
                _vertIndex = _vertex._index;
            }
            else
            {
                _vertIndex = -1;
            }

            _renderVertex = null;
            if (modifiedMesh._renderUnit != null && _vertex != null)
            {
                _renderVertex = modifiedMesh._renderUnit._renderVerts.Find(delegate(apRenderVertex a)
                {
                    return(a._vertex == _vertex);
                });
            }

            if (_physicParam == null)
            {
                _physicParam = new apPhysicsVertParam();
            }

            _physicParam.Link(modifiedMesh, this);

            RefreshModMeshAndWeights(_modifiedMesh);
        }
Esempio n. 13
0
        public void Clear()
        {
            //if (_isCleared)
            //{
            //	return;
            //}
            _cloneVerts.Clear();
            _crossVerts.Clear();
            _cloneEdges.Clear();
            _mesh          = null;
            _nSelectedVert = 0;
            _nTotalVert    = 0;
            _nTotalEdge    = 0;
            _offset        = 0.0f;
            _isAddOnRuler  = false;
            _isMirrorX     = true;
            _mirrorPos     = 0.0f;
            _srcEdges.Clear();
            _srcVerts.Clear();
            _vert2Verts.Clear();

            _vert2Clone.Clear();
            _clone2Vert.Clear();
            CloneVertex.ClearIndex();

            //_isCleared = true;
        }
Esempio n. 14
0
        public apVertex FindNearestVertex(Vector2 pos, apMesh mesh, float offset, apVertex exceptVert = null)
        {
            apVertex curVert = null;
            apVertex minVert = null;
            float    curDist = 0.0f;
            float    minDist = 0.0f;

            for (int iVert = 0; iVert < mesh._vertexData.Count; iVert++)
            {
                curVert = mesh._vertexData[iVert];
                if (exceptVert == curVert)
                {
                    continue;
                }
                if (Mathf.Abs(curVert._pos.x - pos.x) < offset &&
                    Mathf.Abs(curVert._pos.y - pos.y) < offset)
                {
                    curDist = Mathf.Abs(curVert._pos.x - pos.x) + Mathf.Abs(curVert._pos.y - pos.y);                    //MHT Dist
                    //선택할 수 있다.
                    if (minVert == null || curDist < minDist)
                    {
                        minVert = curVert;
                        minDist = curDist;
                    }
                }
            }
            return(minVert);
        }
Esempio n. 15
0
        public apGizmos.TransformParam PivotReturn__MeshAutoGen()
        {
            if (Editor.Select.SelectionType != apSelection.SELECTION_TYPE.Mesh ||
                Editor.Select.Mesh == null ||
                Editor.Select.Mesh.LinkedTextureData == null ||
                Editor.Select.Mesh.LinkedTextureData._image == null ||
                Editor._meshEditMode != apEditor.MESH_EDIT_MODE.MakeMesh ||
                Editor._meshEditeMode_MakeMesh != apEditor.MESH_EDIT_MODE_MAKEMESH.AutoGenerate ||
                !Editor.MeshGenerator.IsScanned)
            {
                //Debug.LogError("Pivot Failed");
                return(null);
            }
            List <apMeshGenMapper.ControlPoint> selectedControlPoints = Editor.MeshGenerator._selectedControlPoints;

            if (selectedControlPoints.Count == 0)
            {
                //Debug.LogError("Pivot Failed : Count 0");
                return(null);
            }

            apMesh  mesh            = Editor.Select.Mesh;
            Vector2 imageHalfOffset = new Vector2(mesh.LinkedTextureData._width * 0.5f, mesh.LinkedTextureData._height * 0.5f);

            apMeshGenMapper.ControlPoint curPoint = null;
            Vector2 posW = Vector2.zero;

            if (selectedControlPoints.Count == 1)
            {
                curPoint = selectedControlPoints[0];
                posW     = curPoint._pos_Cur - (mesh._offsetPos + imageHalfOffset);

                return(apGizmos.TransformParam.Make(posW, 0.0f, Vector2.one,
                                                    0, Color.black,
                                                    true,
                                                    apMatrix3x3.identity,
                                                    false,
                                                    apGizmos.TRANSFORM_UI.TRS_NoDepth,
                                                    Vector2.zero, 0.0f, Vector2.one));
            }
            else
            {
                Vector2 centerPos = Vector2.zero;

                for (int i = 0; i < selectedControlPoints.Count; i++)
                {
                    curPoint   = selectedControlPoints[i];
                    posW       = curPoint._pos_Cur - (mesh._offsetPos + imageHalfOffset);
                    centerPos += posW;
                }
                centerPos /= selectedControlPoints.Count;
                //Debug.Log("Pivot : Multiple " + centerPos + " (" + selectedControlPoints.Count + ")");
                return(apGizmos.TransformParam.Make(centerPos, 0.0f, Vector2.one,
                                                    0, Color.black, true,
                                                    apMatrix3x3.identity, true, apGizmos.TRANSFORM_UI.TRS_NoDepth,
                                                    Vector2.zero, 0.0f, Vector2.one));
            }
        }
Esempio n. 16
0
        private apMeshEdge GetMeshNearestEdge(Vector2 posGL, apMesh mesh, float offsetGL)
        {
            apMeshEdge curEdge = null;

            //Vector2 posW = apGL.GL2World(posGL) + mesh._offsetPos;

            Vector2 vPos1GL = Vector2.zero;
            Vector2 vPos2GL = Vector2.zero;
            float   minX    = 0.0f;
            float   maxX    = 0.0f;
            float   minY    = 0.0f;
            float   maxY    = 0.0f;
            float   curDist = 0.0f;

            float      minDist = 0.0f;
            apMeshEdge minEdge = null;

            for (int i = 0; i < mesh._edges.Count; i++)
            {
                curEdge = mesh._edges[i];

                if (curEdge._vert1 == null || curEdge._vert2 == null)
                {
                    continue;
                }

                //기본 사각 범위안에 있는지 확인
                vPos1GL = apGL.World2GL(curEdge._vert1._pos - mesh._offsetPos);
                vPos2GL = apGL.World2GL(curEdge._vert2._pos - mesh._offsetPos);

                minX = Mathf.Min(vPos1GL.x, vPos2GL.x);
                maxX = Mathf.Max(vPos1GL.x, vPos2GL.x);
                minY = Mathf.Min(vPos1GL.y, vPos2GL.y);
                maxY = Mathf.Max(vPos1GL.y, vPos2GL.y);

                if (posGL.x < minX || maxX < posGL.x ||
                    posGL.y < minY || maxY < posGL.y)
                {
                    continue;
                }

                curDist = apEditorUtil.DistanceFromLine(
                    vPos1GL,
                    vPos2GL,
                    posGL);

                if (curDist < offsetGL)
                {
                    if (minEdge == null || curDist < minDist)
                    {
                        minDist = curDist;
                        minEdge = curEdge;
                    }
                }
            }
            return(minEdge);
        }
Esempio n. 17
0
        //------------------------------------------------------------------------------------

        // Transform Changed (Pos)
        public void TransformChanged_Position__MeshTRS(Vector2 pos)
        {
            if (Editor.Select.SelectionType != apSelection.SELECTION_TYPE.Mesh ||
                Editor.Select.Mesh == null ||
                Editor.Select.Mesh.LinkedTextureData == null ||
                Editor.Select.Mesh.LinkedTextureData._image == null ||
                Editor._meshEditMode != apEditor.MESH_EDIT_MODE.MakeMesh ||
                Editor._meshEditeMode_MakeMesh != apEditor.MESH_EDIT_MODE_MAKEMESH.TRS)
            {
                return;
            }

            if (Editor.Gizmos.IsFFDMode)
            {
                //FFD 모드에서는 처리가 안된다.
                return;
            }

            apMesh          mesh             = Editor.Select.Mesh;
            List <apVertex> vertices         = mesh._vertexData;
            List <apVertex> selectedVertices = Editor.VertController.Vertices;

            if (vertices.Count == 0 || selectedVertices.Count == 0)
            {
                return;
            }

            apEditorUtil.SetRecord_Mesh(apUndoGroupData.ACTION.MeshEdit_EditVertex, Editor, mesh, mesh, true);

            apVertex curVert   = null;
            Vector2  centerPos = Vector2.zero;

            for (int i = 0; i < selectedVertices.Count; i++)
            {
                curVert    = selectedVertices[i];
                centerPos += curVert._pos - mesh._offsetPos;
            }
            centerPos /= selectedVertices.Count;

            pos -= mesh._offsetPos;

            Vector2 deltaMoveW = pos - centerPos;

            //Debug.Log("Input : " + pos + " / Cur Center : " + centerPos + " >> Delta : " + deltaMoveW);
            for (int i = 0; i < selectedVertices.Count; i++)
            {
                curVert       = selectedVertices[i];
                curVert._pos += deltaMoveW;
            }

            for (int i = 0; i < selectedVertices.Count; i++)
            {
                mesh.RefreshVertexAutoUV(selectedVertices[i]);
            }

            Editor.SetRepaint();
        }
Esempio n. 18
0
        // Init
        //------------------------------------------------------------------
        public void Init(apEditor editor, apMesh targetMesh, object loadKey, FUNC_SELECT_TEXTUREDATA_RESULT funcResult)
        {
            _editor     = editor;
            _loadKey    = loadKey;
            _targetMesh = targetMesh;

            _funcResult = funcResult;

            _textureData = _editor._portrait._textureData;
        }
        public void Init()
        {
            _mesh       = null;
            _curVertex  = null;
            _curPolygon = null;

            _nextVertex           = null;
            _isTmpEdgeWire        = false;
            _tmpEdgeWire_MousePos = Vector2.zero;
        }
Esempio n. 20
0
 // Init
 //--------------------------------------
 public apCalculatedMesh(apMesh mesh)
 {
     _mesh = mesh;
     _localMatrixPerVertex.Clear();
     for (int i = 0; i < _mesh._vertexData.Count; i++)
     {
         _localMatrixPerVertex.Add(_mesh._vertexData[i], apMatrix3x3.identity);
         _worldMatrixPerVertex.Add(_mesh._vertexData[i], apMatrix3x3.identity);
     }
 }
Esempio n. 21
0
        //-----------------------------------------------------------------------------------------

        // Pivot
        public apGizmos.TransformParam PivotReturn__MeshTRS()
        {
            if (Editor.Select.SelectionType != apSelection.SELECTION_TYPE.Mesh ||
                Editor.Select.Mesh == null ||
                Editor.Select.Mesh.LinkedTextureData == null ||
                Editor.Select.Mesh.LinkedTextureData._image == null ||
                Editor._meshEditMode != apEditor.MESH_EDIT_MODE.MakeMesh ||
                Editor._meshEditeMode_MakeMesh != apEditor.MESH_EDIT_MODE_MAKEMESH.TRS)
            {
                return(null);
            }
            if (Editor.VertController.Vertex == null)
            {
                return(null);
            }

            apMesh mesh = Editor.Select.Mesh;

            //Vector2 imageHalfOffset = new Vector2(mesh.LinkedTextureData._width * 0.5f, mesh.LinkedTextureData._height * 0.5f);

            if (Editor.VertController.Vertices.Count == 1)
            {
                //1개 선택되었다.
                apVertex vert = Editor.VertController.Vertices[0];

                return(apGizmos.TransformParam.Make(vert._pos - (mesh._offsetPos),
                                                    0.0f, Vector2.one, 0, Color.black,
                                                    true,
                                                    apMatrix3x3.identity,
                                                    false,
                                                    apGizmos.TRANSFORM_UI.Position2D, vert._pos, 0.0f, Vector2.one));
            }
            else if (Editor.VertController.Vertices.Count > 1)
            {
                apVertex vert      = null;
                Vector2  centerPos = Vector2.zero;
                int      nVert     = Editor.VertController.Vertices.Count;
                for (int i = 0; i < Editor.VertController.Vertices.Count; i++)
                {
                    vert       = Editor.VertController.Vertices[i];
                    centerPos += vert._pos;
                }

                centerPos /= nVert;

                return(apGizmos.TransformParam.Make(centerPos - mesh._offsetPos,
                                                    0.0f, Vector2.one, 0, Color.black,
                                                    true,
                                                    apMatrix3x3.identity,
                                                    true,
                                                    apGizmos.TRANSFORM_UI.Position2D | apGizmos.TRANSFORM_UI.Vertex_Transform, centerPos, 0.0f, Vector2.one));
            }
            return(null);
        }
Esempio n. 22
0
 //----------------------------------------------------------------
 public bool IsOnAxisByMesh(Vector2 pos, apMesh mesh)
 {
     if (mesh._isMirrorX)
     {
         return(Mathf.Abs(pos.x - mesh._mirrorAxis.x) < _editor._meshTRSOption_MirrorOffset);
     }
     else
     {
         return(Mathf.Abs(pos.y - mesh._mirrorAxis.y) < _editor._meshTRSOption_MirrorOffset);
     }
 }
Esempio n. 23
0
        public void Scale__MeshAutoGen(Vector2 deltaScaleW, bool isFirstScale)
        {
            if (Editor.Select.SelectionType != apSelection.SELECTION_TYPE.Mesh ||
                Editor.Select.Mesh == null ||
                Editor.Select.Mesh.LinkedTextureData == null ||
                Editor.Select.Mesh.LinkedTextureData._image == null ||
                Editor._meshEditMode != apEditor.MESH_EDIT_MODE.MakeMesh ||
                Editor._meshEditeMode_MakeMesh != apEditor.MESH_EDIT_MODE_MAKEMESH.AutoGenerate ||
                !Editor.MeshGenerator.IsScanned)
            {
                return;
            }

            apMesh  mesh            = Editor.Select.Mesh;
            Vector2 imageHalfOffset = new Vector2(mesh.LinkedTextureData._width * 0.5f, mesh.LinkedTextureData._height * 0.5f);

            //List<apMeshGenMapper.ControlPoint> controlPoints = Editor.MeshGenerator.Mapper.ControlPoints;
            List <apMeshGenMapper.ControlPoint> selectedControlPoints = Editor.MeshGenerator._selectedControlPoints;

            if (selectedControlPoints.Count <= 1)
            {
                return;
            }

            apMeshGenMapper.ControlPoint curPoint = null;

            Vector2 posW      = Vector2.zero;
            Vector2 centerPos = Vector2.zero;

            for (int i = 0; i < selectedControlPoints.Count; i++)
            {
                curPoint   = selectedControlPoints[i];
                posW       = curPoint._pos_Cur - (mesh._offsetPos + imageHalfOffset);
                centerPos += posW;
            }
            centerPos /= selectedControlPoints.Count;

            Vector2 scale = new Vector2(1.0f + deltaScaleW.x, 1.0f + deltaScaleW.y);

            apMatrix3x3 matrix_Scale = apMatrix3x3.TRS(centerPos, 0, Vector2.one)
                                       * apMatrix3x3.TRS(Vector2.zero, 0, scale)
                                       * apMatrix3x3.TRS(-centerPos, 0, Vector2.one);


            for (int i = 0; i < selectedControlPoints.Count; i++)
            {
                curPoint          = selectedControlPoints[i];
                posW              = curPoint._pos_Cur - (mesh._offsetPos + imageHalfOffset);
                posW              = matrix_Scale.MultiplyPoint(posW);
                curPoint._pos_Cur = posW + (mesh._offsetPos + imageHalfOffset);
            }

            Editor.SetRepaint();
        }
Esempio n. 24
0
        public void DrawMeshEdgeOnly(apMesh mesh, apMatrix3x3 matrix)
        {
            try
            {
                //0. 메시, 텍스쳐가 없을 때
                //if (mesh == null || mesh._textureData == null || mesh._textureData._image == null)//이전 코드
                if (mesh == null || mesh.LinkedTextureData == null || mesh.LinkedTextureData._image == null)                //변경 코드
                {
                    return;
                }

                //1. 모든 메시를 보여줄때 (또는 클리핑된 메시가 없을 때) =>
                Color meshEdgeColor       = new Color(1.0f, 0.5f, 0.0f, 0.9f);
                Color meshHiddenEdgeColor = new Color(1.0f, 1.0f, 0.0f, 0.7f);

                matrix *= mesh.Matrix_VertToLocal;


                Vector2 pos0 = Vector2.zero, pos1 = Vector2.zero;
                if (mesh._edges.Count > 0)
                {
                    _matBatch.SetPass_Color();
                    _matBatch.SetClippingSize(_glScreenClippingSize);
                    GL.Begin(GL.LINES);
                    for (int i = 0; i < mesh._edges.Count; i++)
                    {
                        pos0 = matrix.MultiplyPoint(mesh._edges[i]._vert1._pos);
                        pos1 = matrix.MultiplyPoint(mesh._edges[i]._vert2._pos);

                        DrawLine(pos0, pos1, meshEdgeColor, false);
                    }

                    for (int iPoly = 0; iPoly < mesh._polygons.Count; iPoly++)
                    {
                        for (int iHE = 0; iHE < mesh._polygons[iPoly]._hidddenEdges.Count; iHE++)
                        {
                            apMeshEdge hiddenEdge = mesh._polygons[iPoly]._hidddenEdges[iHE];

                            pos0 = matrix.MultiplyPoint(hiddenEdge._vert1._pos);
                            pos1 = matrix.MultiplyPoint(hiddenEdge._vert2._pos);

                            DrawLine(pos0, pos1, meshHiddenEdgeColor, false);
                        }
                    }

                    GL.End();
                }
            }
            catch (Exception ex)
            {
                Debug.LogException(ex);
            }
        }
Esempio n. 25
0
 public Vector2 GetMirrorPosByMesh(Vector2 pos, apMesh mesh)
 {
     if (mesh._isMirrorX)
     {
         pos.x = mesh._mirrorAxis.x - (pos.x - mesh._mirrorAxis.x);
     }
     else
     {
         pos.y = mesh._mirrorAxis.y - (pos.y - mesh._mirrorAxis.y);
     }
     return(pos);
 }
Esempio n. 26
0
 public Vector2 GetAxisPosToSnap(Vector2 pos, apMesh mesh)
 {
     if (mesh._isMirrorX)
     {
         pos.x = mesh._mirrorAxis.x;
     }
     else
     {
         pos.y = mesh._mirrorAxis.y;
     }
     return(pos);
 }
Esempio n. 27
0
        private void OnTextureDataSelected(bool isSuccess, apMesh targetMesh, object loadKey, apTextureData resultTextureData)
        {
            if (!isSuccess)
            {
                _loadKey_TextureSelect = null;
                return;
            }

            if (_loadKey_TextureSelect != loadKey)
            {
                _loadKey_TextureSelect = null;
                return;
            }

            _loadKey_TextureSelect = null;

            apEditorUtil.SetRecord_Modifier(apUndoGroupData.ACTION.Modifier_SettingChanged, _editor, _modifier, _modMesh._extraValue, false);

            //일단 초기화
            _modMesh._extraValue._textureDataID     = -1;
            _modMesh._extraValue._linkedTextureData = null;
            _dstTexureData = null;


            if (_modMesh != null && _modMesh._isMeshTransform && _modMesh._transform_Mesh != null)
            {
                if (resultTextureData != null)
                {
                    _modMesh._extraValue._textureDataID = resultTextureData._uniqueID;
                }
            }


            if (_modMesh._extraValue._textureDataID >= 0)
            {
                _dstTexureData = _portrait.GetTexture(_modMesh._extraValue._textureDataID);
                _modMesh._extraValue._linkedTextureData = _dstTexureData;

                if (_dstTexureData == null)
                {
                    _modMesh._extraValue._textureDataID = -1;
                }
            }

            RefreshImagePreview();

            Repaint();


            _meshGroup.RefreshModifierLink();            //<<Modifier Link를 다시 해야한다.
            _editor.SetRepaint();
        }
        public void Clear()
        {
            _action     = ACTION.None;
            _saveTarget = SAVE_TARGET.None;
            _portrait   = null;
            _mesh       = null;
            _meshGroup  = null;
            _modifier   = null;

            _keyObject        = null;
            _isCallContinuous = false;            //여러 항목을 동시에 처리하는 Batch 액션 중인가

            _lastUndoTime = DateTime.Now;
        }
Esempio n. 29
0
        public void RemoveMirrorVertex(apVertex removedVertex, apMesh mesh, bool isShift)
        {
            ClearMovedVertex();
            if (removedVertex == null)
            {
                return;
            }
            Vector2  mirrorPos           = GetMirrorPosByMesh(removedVertex._pos, mesh);
            apVertex removableMirrorVert = FindNearestVertex(mirrorPos, mesh, 2.0f, removedVertex);            //<<아주 좁은 범위

            if (removableMirrorVert != null)
            {
                mesh.RemoveVertex(removableMirrorVert, isShift);
            }
        }
        // Functions
        //-----------------------------------------------
        public void SetMesh(apMesh mesh)
        {
            if (_mesh != mesh)
            {
                _mesh       = mesh;
                _curVertex  = null;
                _curPolygon = null;

                UnselectNextVertex();

                _isTmpEdgeWire                   = false;
                _isTmpEdgeWireCrossEdge          = false;
                _isTmpEdgeWireCrossEdge_Multiple = false;
                _tmpEdgeWire_MousePos            = Vector2.zero;
                _tmpEdgeWireMultipleCrossPoints.Clear();
            }
        }