Project

General

Profile

Download (4.76 KB) Statistics
| Branch: | Revision:

distorted-objectlib / src / main / java / org / distorted / objectlib / helpers / FactoryBandagedPyraminx.java @ c7c72305

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2023 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8
///////////////////////////////////////////////////////////////////////////////////////////////////
9

    
10
package org.distorted.objectlib.helpers;
11

    
12
import static org.distorted.objectlib.main.TwistyObject.SQ3;
13
import static org.distorted.objectlib.main.TwistyObject.SQ6;
14

    
15
import org.distorted.library.type.Static3D;
16
import org.distorted.objectlib.touchcontrol.TouchControlTetrahedron;
17

    
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19

    
20
public class FactoryBandagedPyraminx extends FactoryBandaged
21
  {
22
  private static FactoryBandagedPyraminx mThis;
23

    
24
///////////////////////////////////////////////////////////////////////////////////////////////////
25

    
26
  private FactoryBandagedPyraminx()
27
    {
28

    
29
    }
30

    
31
///////////////////////////////////////////////////////////////////////////////////////////////////
32
// TODO
33

    
34
  public float[] elementVertices(int ax, boolean left, int element)
35
    {
36
    return null;
37
    }
38

    
39
///////////////////////////////////////////////////////////////////////////////////////////////////
40
// (vertices,indices) define a cubit face. Return its 'diameter', i.e. max distance between vertices.
41

    
42
  float faceDiameter(float[][] vertices, int[][] indices)
43
    {
44
    /*
45
    float maxX = -dX;
46
    float minX =  dX;
47
    float maxY = -dY;
48
    float minY =  dY;
49
    float maxZ = -dZ;
50
    float minZ =  dZ;
51

    
52
    for (int[] ind : indices)
53
      for(int index : ind)
54
        {
55
        float[] v = vertices[index];
56

    
57
        if (v[0] > maxX) maxX = v[0];
58
        if (v[0] < minX) minX = v[0];
59
        if (v[1] > maxY) maxY = v[1];
60
        if (v[1] < minY) minY = v[1];
61
        if (v[2] > maxZ) maxZ = v[2];
62
        if (v[2] < minZ) minZ = v[2];
63
        }
64

    
65
    float diffX = maxX-minX;
66
    float diffY = maxY-minY;
67
    float diffZ = maxZ-minZ;
68

    
69
    return diffX>diffY ? Math.max(diffX,diffZ) : Math.max(diffY,diffZ);
70

    
71
     */
72
    return 0;
73
    }
74

    
75
///////////////////////////////////////////////////////////////////////////////////////////////////
76
// PUBLIC API
77

    
78
  public static FactoryBandagedPyraminx getInstance()
79
    {
80
    if( mThis==null ) mThis = new FactoryBandagedPyraminx();
81
    return mThis;
82
    }
83

    
84
///////////////////////////////////////////////////////////////////////////////////////////////////
85

    
86
  public float[][] getCuts(int[] numLayers)
87
    {
88
    int numL = numLayers[0];
89
    float[][] ret = new float[4][numL-1];
90

    
91
    for(int i=0; i<numL-1; i++)
92
      {
93
      float cut = (1.0f+i-numL/4.0f)*(SQ6/3);
94
      ret[0][i] = cut;
95
      ret[1][i] = cut;
96
      ret[2][i] = cut;
97
      ret[3][i] = cut;
98
      }
99

    
100
    return ret;
101
    }
102

    
103
///////////////////////////////////////////////////////////////////////////////////////////////////
104

    
105
  public Static3D[] getNormals()
106
    {
107
    return TouchControlTetrahedron.FACE_AXIS;
108
    }
109

    
110
///////////////////////////////////////////////////////////////////////////////////////////////////
111

    
112
  public float[][] getRotAxis()
113
    {
114
    return new float[][]
115
            {
116
                    {     0, SQ3/3, SQ6/3 },
117
                    {     0, SQ3/3,-SQ6/3 },
118
                    {-SQ6/3,-SQ3/3,     0 },
119
                    { SQ6/3,-SQ3/3,     0 },
120
            };
121
    }
122

    
123
///////////////////////////////////////////////////////////////////////////////////////////////////
124

    
125
  public float[] getDist3D()
126
    {
127
    return TouchControlTetrahedron.D3D;
128
    }
129

    
130
///////////////////////////////////////////////////////////////////////////////////////////////////
131

    
132
  public float[][] getBands(boolean iconMode)
133
    {
134
    float height= iconMode ? 0.001f : 0.048f;
135
    int[] angle = {60,50,40,32,28,23};
136
    float R     = 0.2f;
137
    float S     = 0.5f;
138
    int extraI  = 0;
139
    int extraV  = 0;
140

    
141
    int numVertA= mNumLayers[0]>=5 ? 3 : (mNumLayers[0]==4 ? 4:5);
142
    int numVertI= mNumLayers[0]>=5 ? 2 : 3;
143

    
144
    return new float[][] { {  0.001f,angle[0],R,S,numVertI,extraV,extraI},
145
            {height  ,angle[1],R,S,numVertA,extraV,extraI},
146
            {height/2,angle[2],R,S,numVertA,extraV,extraI},
147
            {height/3,angle[3],R,S,numVertA,extraV,extraI},
148
            {height/4,angle[4],R,S,numVertA,extraV,extraI},
149
            {height/5,angle[5],R,S,numVertA,extraV,extraI} };
150
    }
151
  }
(5-5/17)