63 |
63 |
private Static2D mCenterSta;
|
64 |
64 |
|
65 |
65 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
66 |
// requires knowledge about effect nature
|
|
67 |
|
|
68 |
private int getDimension()
|
|
69 |
{
|
|
70 |
switch(mName)
|
|
71 |
{
|
|
72 |
case SWIRL :
|
|
73 |
case SINK : return 1;
|
|
74 |
case DISTORT:
|
|
75 |
case DEFORM : return 3;
|
|
76 |
}
|
|
77 |
|
|
78 |
return 0;
|
|
79 |
}
|
|
80 |
|
|
81 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
82 |
// requires knowledge about effect nature
|
|
83 |
|
|
84 |
public void apply(DistortedObject object)
|
|
85 |
{
|
|
86 |
switch(mName)
|
|
87 |
{
|
|
88 |
case DISTORT: object.distort(mDyn3, mCenterDyn, mRegionDyn); break;
|
|
89 |
case DEFORM : object.deform (mDyn3, mCenterDyn ); break;
|
|
90 |
case SINK : object.sink (mDyn1, mCenterDyn, mRegionDyn); break;
|
|
91 |
case SWIRL : object.swirl (mDyn1, mCenterDyn, mRegionDyn); break;
|
|
92 |
}
|
|
93 |
}
|
|
94 |
|
|
95 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
96 |
// requires knowledge about effect nature
|
66 |
97 |
|
67 |
98 |
public boolean supportsRegion()
|
68 |
99 |
{
|
69 |
100 |
return mName == EffectNames.DEFORM ? false : true;
|
70 |
101 |
}
|
71 |
102 |
|
|
103 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
104 |
// requires knowledge about effect nature
|
|
105 |
|
|
106 |
private void fillStatics()
|
|
107 |
{
|
|
108 |
switch(mName)
|
|
109 |
{
|
|
110 |
case DISTORT:
|
|
111 |
case DEFORM : float l = mAct.get().getWidth()/50.0f;
|
|
112 |
float x = (mInter[0]-50)*l;
|
|
113 |
float y = (mInter[1]-50)*l;
|
|
114 |
float z = (mInter[2]-50)*l;
|
|
115 |
mSta3.set(x,y,z);
|
|
116 |
break;
|
|
117 |
case SINK : mSta1.set(mInter[0] > 50 ? 50.0f/(100.01f-mInter[0]) : mInter[0] / 50.0f);
|
|
118 |
break;
|
|
119 |
case SWIRL : mSta1.set( 3.6f*(mInter[0]-50) );
|
|
120 |
break;
|
|
121 |
}
|
|
122 |
}
|
|
123 |
|
|
124 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
125 |
// requires knowledge about effect nature
|
|
126 |
|
|
127 |
private void setDefaultInter()
|
|
128 |
{
|
|
129 |
switch(mName)
|
|
130 |
{
|
|
131 |
case DISTORT:
|
|
132 |
case DEFORM : mInter[0] = 50;
|
|
133 |
mInter[1] = 50;
|
|
134 |
mInter[2] = 50;
|
|
135 |
break;
|
|
136 |
case SINK :
|
|
137 |
case SWIRL : mInter[0] = 50;
|
|
138 |
break;
|
|
139 |
}
|
|
140 |
}
|
|
141 |
|
|
142 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
143 |
// requires knowledge about effect nature
|
|
144 |
|
|
145 |
private void setText()
|
|
146 |
{
|
|
147 |
String text = mName.name();
|
|
148 |
|
|
149 |
if( mName==EffectNames.DISTORT || mName==EffectNames.DEFORM)
|
|
150 |
{
|
|
151 |
int f1 = (int)mSta3.getX();
|
|
152 |
int f2 = (int)mSta3.getY();
|
|
153 |
int f3 = (int)mSta3.getZ();
|
|
154 |
text += " ("+f1+","+f2+","+f3+")";
|
|
155 |
}
|
|
156 |
else
|
|
157 |
{
|
|
158 |
float f1 = ((int)(mSta1.getX()*100))/100.0f;
|
|
159 |
text += " ("+f1+")";
|
|
160 |
}
|
|
161 |
|
|
162 |
mText.setText(text);
|
|
163 |
}
|
|
164 |
|
72 |
165 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
73 |
166 |
|
74 |
167 |
private void fillCenterStatics()
|
... | ... | |
137 |
230 |
mTextRegion.setText("region ("+f0+","+f1+","+f2+","+f3+")");
|
138 |
231 |
}
|
139 |
232 |
|
140 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
141 |
|
|
142 |
|
private void fillStatics()
|
143 |
|
{
|
144 |
|
switch(mName)
|
145 |
|
{
|
146 |
|
case DISTORT:
|
147 |
|
case DEFORM : Vertex3DActivity act = mAct.get();
|
148 |
|
float l = act.getWidth()/50.0f;
|
149 |
|
float x = (mInter[0]-50)*l;
|
150 |
|
float y = (mInter[1]-50)*l;
|
151 |
|
float z = (mInter[2]-50)*l;
|
152 |
|
mSta3.set(x,y,z);
|
153 |
|
break;
|
154 |
|
case SINK : mSta1.set(mInter[0] > 50 ? 50.0f/(100.01f-mInter[0]) : mInter[0] / 50.0f);
|
155 |
|
break;
|
156 |
|
case SWIRL : mSta1.set( 3.6f*(mInter[0]-50) );
|
157 |
|
break;
|
158 |
|
}
|
159 |
|
}
|
160 |
|
|
161 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
162 |
|
|
163 |
|
private void setDefaultInter()
|
164 |
|
{
|
165 |
|
switch(mName)
|
166 |
|
{
|
167 |
|
case DISTORT:
|
168 |
|
case DEFORM : mInter[0] = 50;
|
169 |
|
mInter[1] = 50;
|
170 |
|
mInter[2] = 50;
|
171 |
|
break;
|
172 |
|
case SINK :
|
173 |
|
case SWIRL : mInter[0] = 50;
|
174 |
|
break;
|
175 |
|
}
|
176 |
|
}
|
177 |
|
|
178 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
179 |
|
|
180 |
|
private void setText()
|
181 |
|
{
|
182 |
|
String text = mName.name();
|
183 |
|
|
184 |
|
if( mName==EffectNames.DISTORT || mName==EffectNames.DEFORM)
|
185 |
|
{
|
186 |
|
int f1 = (int)mSta3.getX();
|
187 |
|
int f2 = (int)mSta3.getY();
|
188 |
|
int f3 = (int)mSta3.getZ();
|
189 |
|
text += " ("+f1+","+f2+","+f3+")";
|
190 |
|
}
|
191 |
|
else
|
192 |
|
{
|
193 |
|
float f1 = ((int)(mSta1.getX()*100))/100.0f;
|
194 |
|
text += " ("+f1+")";
|
195 |
|
}
|
196 |
|
|
197 |
|
mText.setText(text);
|
198 |
|
}
|
199 |
|
|
200 |
233 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
201 |
234 |
|
202 |
235 |
public Vertex3DEffect(EffectNames name, Vertex3DActivity act)
|
... | ... | |
204 |
237 |
mAct = new WeakReference<>(act);
|
205 |
238 |
mName = name;
|
206 |
239 |
|
207 |
|
if( mName==EffectNames.SINK || mName==EffectNames.SWIRL )
|
|
240 |
mDimension = getDimension();
|
|
241 |
|
|
242 |
if( mDimension==1 )
|
208 |
243 |
{
|
209 |
|
mDimension = 1;
|
210 |
244 |
mDyn1 = new Dynamic1D();
|
211 |
245 |
mSta1 = new Static1D(0);
|
212 |
246 |
mDyn1.add(mSta1);
|
213 |
247 |
mDyn3 = null;
|
214 |
248 |
}
|
215 |
|
else
|
|
249 |
else if( mDimension==3 )
|
216 |
250 |
{
|
217 |
|
mDimension = 3;
|
218 |
251 |
mDyn3 = new Dynamic3D();
|
219 |
252 |
mSta3 = new Static3D(0,0,0);
|
220 |
253 |
mDyn3.add(mSta3);
|
221 |
254 |
mDyn1 = null;
|
222 |
255 |
}
|
|
256 |
else
|
|
257 |
{
|
|
258 |
throw new RuntimeException("unsupported effect");
|
|
259 |
}
|
223 |
260 |
|
224 |
261 |
mInter = new int[mDimension];
|
225 |
262 |
mSeekID= new int[mDimension];
|
... | ... | |
348 |
385 |
mSeekCenterID[0] = seek[0].getId();
|
349 |
386 |
mSeekCenterID[1] = seek[1].getId();
|
350 |
387 |
|
351 |
|
mTextCenter = (TextView)center.findViewById(R.id.effectCenterText);
|
|
388 |
mTextCenter = (TextView)center.findViewById(R.id.effectCenterText);
|
352 |
389 |
|
353 |
390 |
setDefaultCenterInter();
|
354 |
391 |
|
... | ... | |
363 |
400 |
return center;
|
364 |
401 |
}
|
365 |
402 |
|
366 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
367 |
|
|
368 |
|
public void apply(DistortedObject object)
|
369 |
|
{
|
370 |
|
switch(mName)
|
371 |
|
{
|
372 |
|
case DISTORT: object.distort(mDyn3, mCenterDyn, mRegionDyn); break;
|
373 |
|
case DEFORM : object.deform (mDyn3, mCenterDyn ); break;
|
374 |
|
case SINK : object.sink (mDyn1, mCenterDyn, mRegionDyn); break;
|
375 |
|
case SWIRL : object.swirl (mDyn1, mCenterDyn, mRegionDyn); break;
|
376 |
|
}
|
377 |
|
}
|
378 |
|
|
379 |
403 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
380 |
404 |
|
381 |
405 |
public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
|
Vertex3D: make the Activity independent of Effects