Project

General

Profile

« Previous | Next » 

Revision 45aedaa7

Added by Leszek Koltunski 10 months ago

Progress with a generic FactoryBandaged.

View differences:

src/main/java/org/distorted/objectlib/bandaged/FactoryBandagedPyraminx.java
14 14
import static org.distorted.objectlib.main.TwistyObject.SQ6;
15 15

  
16 16
import org.distorted.library.type.Static3D;
17
import org.distorted.objectlib.touchcontrol.TouchControlDodecahedron;
18 17
import org.distorted.objectlib.touchcontrol.TouchControlTetrahedron;
19 18

  
20 19
///////////////////////////////////////////////////////////////////////////////////////////////////
21 20

  
22 21
public class FactoryBandagedPyraminx extends FactoryBandaged
23 22
  {
24
  private static final float[][] TET_VER =
25
          {
26
                  {    0,-SQ2/4,-0.5f },
27
                  {    0,-SQ2/4, 0.5f },
28
                  { 0.5f, SQ2/4,    0 },
29
                  {-0.5f, SQ2/4,    0 }
30
          };
31
  private static final float[][] OCT_VER =
32
          {
33
                  {    0, SQ2/2,    0 },
34
                  {    0,-SQ2/2,    0 },
35
                  { 0.5f,     0, 0.5f },
36
                  { 0.5f,     0,-0.5f },
37
                  {-0.5f,     0,-0.5f },
38
                  {-0.5f,     0, 0.5f },
39
          };
40

  
41 23
  private static FactoryBandagedPyraminx mThis;
42 24

  
43 25
///////////////////////////////////////////////////////////////////////////////////////////////////
......
57 39

  
58 40
///////////////////////////////////////////////////////////////////////////////////////////////////
59 41

  
60
  private float[] tetVertices(int ax, boolean left, float[] pos)
42
  public float[][] getVertices(int variant)
61 43
    {
62
    if( !left )
44
    if( variant==0 )
63 45
      {
64
      int i1=-1,i2=-1,i3=-1;
65

  
66
      switch(ax)
67
        {
68
        case 0: i1=1; i2=2; i3=3; break;
69
        case 1: i1=0; i2=3; i3=2; break;
70
        case 2: i1=0; i2=1; i3=3; break;
71
        case 3: i1=0; i2=2; i3=1; break;
72
        }
73

  
74
      float[] T1 = TET_VER[i1];
75
      float[] T2 = TET_VER[i2];
76
      float[] T3 = TET_VER[i3];
77

  
78
      return new float[] { pos[0]+T1[0], pos[1]+T1[1], pos[2]+T1[2],
79
                           pos[0]+T2[0], pos[1]+T2[1], pos[2]+T2[2],
80
                           pos[0]+T3[0], pos[1]+T3[1], pos[2]+T3[2] };
46
      return new float[][] { { 0.5f,0.0f,0.5f},{ 0.5f,0.0f,-0.5f},{-0.5f,0.0f,-0.5f},{-0.5f,0.0f,0.5f},{ 0.0f,SQ2/2,0.0f},{ 0.0f,-SQ2/2,0.0f} };
47
      }
48
    else
49
      {
50
      return new float[][] { {-0.5f, SQ2/4, 0.0f},{ 0.5f, SQ2/4, 0.0f},{ 0.0f,-SQ2/4, 0.5f},{ 0.0f,-SQ2/4,-0.5f} };
81 51
      }
82

  
83
    return null;
84 52
    }
85 53

  
86 54
///////////////////////////////////////////////////////////////////////////////////////////////////
87 55

  
88
  private float[] octVertices(int ax, boolean left, float[] pos)
56
  public int[][] getIndices(int variant)
89 57
    {
90
    int i1=-1,i2=-1,i3=-1;
91

  
92
    if( left )
58
    if( variant==0 )
93 59
      {
94
      switch(ax)
95
        {
96
        case 0: i1=1; i2=4; i3=3; break;
97
        case 1: i1=1; i2=2; i3=5; break;
98
        case 2: i1=0; i2=2; i3=3; break;
99
        case 3: i1=0; i2=4; i3=5; break;
100
        }
60
      return new int[][] { {3,0,4},{0,1,4},{1,2,4},{2,3,4},{5,0,3},{5,1,0},{5,2,1},{5,3,2} };
101 61
      }
102 62
    else
103 63
      {
104
      switch(ax)
105
        {
106
        case 0: i1=0; i2=5; i3=2; break;
107
        case 1: i1=0; i2=3; i3=4; break;
108
        case 2: i1=1; i2=5; i3=4; break;
109
        case 3: i1=1; i2=3; i3=2; break;
110
        }
64
      return new int[][] { {2,1,0},{3,0,1},{3,2,0},{2,3,1} };
111 65
      }
112

  
113
    float[] T1 = OCT_VER[i1];
114
    float[] T2 = OCT_VER[i2];
115
    float[] T3 = OCT_VER[i3];
116

  
117
    return new float[] { pos[0]+T1[0], pos[1]+T1[1], pos[2]+T1[2],
118
                         pos[0]+T2[0], pos[1]+T2[1], pos[2]+T2[2],
119
                         pos[0]+T3[0], pos[1]+T3[1], pos[2]+T3[2] };
120
    }
121

  
122
///////////////////////////////////////////////////////////////////////////////////////////////////
123

  
124
  public float[] elementVertices(int ax, boolean left, int element)
125
    {
126
    int variant = mElements[element].getVariant();
127
    float[] pos = mElements[element].getPos();
128

  
129
    if( variant==0 ) return octVertices(ax,left,pos);
130
    else             return tetVertices(ax,left,pos);
131
    }
132

  
133
///////////////////////////////////////////////////////////////////////////////////////////////////
134

  
135
  public boolean elementFaceNotNull(int ax, boolean left, int element)
136
    {
137
    int variant = mElements[element].getVariant();
138
    return ( variant==0 || !left );
139 66
    }
140 67

  
141 68
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff