private void UpdateStretch()
    {
        Vector3 pos   = obj.worldToLocalMatrix.MultiplyPoint(sceneManager.rightControllerPosition);
        MPoint  a     = activeEdges[0].start;
        MPoint  b     = activeEdges[0].end;
        MPoint  c     = activeEdges[1].end;
        float   width = Vector3.Distance(a.position, b.position);
        Vector3 p     = MHelperFunctions.VectorL2P(pos, activeEdges[0].direction, a.position);

        p = ReviseLength(p, width);
        c.SetPosition(p + b.position);
        if (activeFace != null && activeFace.IsValid())
        {
            activeFace.Render(obj.localToWorldMatrix);
            foreach (MLinearEdge edge in activeEdges)
            {
                edge.Render(obj.localToWorldMatrix);
            }
            a.Render(obj.localToWorldMatrix);
            b.Render(obj.localToWorldMatrix);
            c.Render(obj.localToWorldMatrix);
            activeTextMesh.GetComponentInChildren <TextMesh>().text = "1:" + (p.magnitude / width).ToString();
            activeTextMesh.transform.position = sceneManager.rightControllerPosition + MDefinitions.DEFAULT_ACTIVE_TEXT_OFFSET;
            if (sceneManager.camera != null)
            {
                activeTextMesh.transform.rotation = Quaternion.LookRotation((sceneManager.camera.transform.position - activeTextMesh.transform.position) * -1, Vector3.up);
            }
        }
        else
        {
            activeTextMesh.GetComponentInChildren <TextMesh>().text = "";
        }
    }
    private void UpdateConnecting()
    {
        Vector3 pos = curObj.worldToLocalMatrix.MultiplyPoint(sceneManager.rightControllerPosition);
        MPoint  p   = selectedEntity[0] as MPoint;

        if (sceneManager.activeEntity.entity != null)
        {
            pos = sceneManager.activeEntity.entity.GetProjection(p.position, pos);
        }
        activePoint.SetPosition(pos);
        if (activeEdge == null)
        {
            activeEdge = new MLinearEdge(p, activePoint);
            activeEdge.entityStatus = MEntity.MEntityStatus.ACTIVE;
            activeEdge.end.edges.Add(activeEdge);
        }
        activePoint.Render(curObj.localToWorldMatrix);
        if (activeEdge != null && activeEdge.IsValid())
        {
            activeEdge.Render(curObj.localToWorldMatrix);
        }
    }
    private void UpdateActivePointPosition()
    {
        Vector3 pos    = sceneManager.rightControllerPosition;
        MEntity entity = sceneManager.activeEntity.entity;

        if (entity != null)
        {
            pos = entity.SpecialPointFind(curObj.worldToLocalMatrix.MultiplyPoint(pos));
        }
        else
        {
            pos = curObj.worldToLocalMatrix.MultiplyPoint(pos);
        }
        activePoint.SetPosition(pos);
        activePoint.Render(curObj.localToWorldMatrix);
    }
示例#4
0
    private void UpdateAdjustAngle()
    {
        validAngle = false;
        Vector3      pos   = curObj.worldToLocalMatrix.MultiplyPoint(sceneManager.rightControllerPosition);
        MPolygonFace polyf = selectFace as MPolygonFace;

        pos = MHelperFunctions.PointProjectionInFace(pos, polyf.normal, anglePoints[0].position);
        Vector3 axisPoint  = anglePoints[2].position;
        Vector3 dir1       = pos - axisPoint;
        Vector3 dir2       = anglePoints[0].position - axisPoint;
        Vector3 dir3       = anglePoints[1].position - axisPoint;
        float   totalAngle = MHelperFunctions.CalcRadAngle(dir2, dir3);
        float   angle1     = MHelperFunctions.CalcRadAngle(dir2, dir1);
        float   angle2     = MHelperFunctions.CalcRadAngle(dir3, dir1);

        if (Mathf.Abs(angle1 + angle2 - totalAngle) < MDefinitions.VECTOR3_PRECISION)
        {
            dir1 = ReviseAngle(dir1, dir2, dir3);
            Vector3 intersect = new Vector3();
            foreach (MLinearEdge le in polyf.edgeList)
            {
                if (le.start == anglePoints[2] || le.end == anglePoints[2])
                {
                    continue;
                }
                Vector3 v;
                if (MHelperFunctions.LineLineIntersection(out v, le.start.position, le.direction, anglePoints[2].position, dir1))
                {
                    if (Vector3.Dot(le.start.position - v, le.end.position - v) <= 0)
                    {
                        validAngle = true;
                        intersect  = v;
                        break;
                    }
                }
            }
            if (validAngle)
            {
                activePoint.SetPosition(intersect);
                activeTextMesh.GetComponentInChildren <TextMesh>().text = MHelperFunctions.CalcRealAngle(dir1, dir2).ToString() + " " + MHelperFunctions.CalcRealAngle(dir1, dir3).ToString();
                activeTextMesh.transform.position = sceneManager.rightControllerPosition + MDefinitions.DEFAULT_ACTIVE_TEXT_OFFSET;
                if (sceneManager.camera != null)
                {
                    activeTextMesh.transform.rotation = Quaternion.LookRotation((sceneManager.camera.transform.position - activeTextMesh.transform.position) * -1, Vector3.up);
                }
                if (activeEdge == null)
                {
                    activeEdge = new MLinearEdge(anglePoints[2], activePoint);
                    activeEdge.entityStatus = MEntity.MEntityStatus.ACTIVE;
                    activeEdge.end.edges.Add(activeEdge);
                }
                activePoint.Render(curObj.localToWorldMatrix);
                if (activeEdge != null && activeEdge.IsValid())
                {
                    activeEdge.Render(curObj.localToWorldMatrix);
                }
            }
        }
        if (!validAngle)
        {
            activeTextMesh.GetComponentInChildren <TextMesh>().text = "";
        }
    }