167 |
|
|
168 |
template <class Blender> ZVec point(float fract, const Blender &blend, ZVec *intern = 0) { |
template <class Blender> ZVec point(float fract, const Blender &blend, ZVec *intern = 0) { |
169 |
if(type == CLEAVE) { |
if(type == CLEAVE) { |
|
if(intern) *intern = ctr; |
|
170 |
if(fract < .5) { |
if(fract < .5) { |
171 |
// Angle of real current sample |
// Angle of real current sample |
172 |
float ang = lerp(aa, aang, 2*fract); |
float ang = lerp(aa, aang, 2*fract); |
186 |
f); |
f); |
187 |
p.z = lerp(ctr.z, za, ((p-ctr).length() - r) / (this->da-r)); |
p.z = lerp(ctr.z, za, ((p-ctr).length() - r) / (this->da-r)); |
188 |
|
|
189 |
|
if(intern) { |
190 |
|
if(fract < .47) { |
191 |
|
*intern = p-ctr; |
192 |
|
intern->z = 0; |
193 |
|
*intern -= intern->dot(a.dirconn.cw90()) * a.dirconn.cw90(); |
194 |
|
intern->z = p.z - ctr.z; |
195 |
|
if(intern->length() <= r) *intern = ZVec(0,0,0); |
196 |
|
*intern += ctr; |
197 |
|
} else { |
198 |
|
*intern = ctr; |
199 |
|
} |
200 |
|
} |
201 |
|
|
202 |
//DBG(dbg_fillets) << "f<.5: "<<ang<<" "<<ra<<" "<<rb<<" "<< |
//DBG(dbg_fillets) << "f<.5: "<<ang<<" "<<ra<<" "<<rb<<" "<< |
203 |
// p <<"\n"; |
// p <<"\n"; |
204 |
return p; |
return p; |
222 |
f); |
f); |
223 |
p.z = lerp(ctr.z, zb, ((p-ctr).length() - r) / (this->db-r)); |
p.z = lerp(ctr.z, zb, ((p-ctr).length() - r) / (this->db-r)); |
224 |
|
|
225 |
|
if(intern) { |
226 |
|
if(fract < .47) { |
227 |
|
*intern = p-ctr; |
228 |
|
intern->z = 0; |
229 |
|
*intern -= intern->dot(b.dirconn.cw90()) * b.dirconn.cw90(); |
230 |
|
intern->z = p.z - ctr.z; |
231 |
|
if(intern->length() <= r) *intern = ZVec(0,0,0); |
232 |
|
*intern += ctr; |
233 |
|
} else { |
234 |
|
*intern = ctr; |
235 |
|
} |
236 |
|
} |
237 |
|
|
238 |
|
|
239 |
|
|
240 |
return p; |
return p; |
241 |
|
|
242 |
} |
} |
263 |
} |
} |
264 |
ZVec res = ctr + d * resr; |
ZVec res = ctr + d * resr; |
265 |
if(intern) { |
if(intern) { |
266 |
if(fract > .48 && fract < .52) { |
if(fract < .47) { |
|
*intern = ctr; |
|
|
} else if(ra > rb) { |
|
267 |
*intern = d*resr; |
*intern = d*resr; |
268 |
*intern -= intern->dot(a.dirconn.cw90()) * a.dirconn.cw90(); |
*intern -= intern->dot(a.dirconn.cw90()) * a.dirconn.cw90(); |
269 |
intern->z = z - ctr.z; |
intern->z = z - ctr.z; |
270 |
if(intern->length() <= r) *intern = ZVec(0,0,0); |
if(intern->length() <= r) *intern = ZVec(0,0,0); |
271 |
*intern += ctr; |
*intern += ctr; |
272 |
|
} else if(fract < .53) { |
273 |
|
*intern = ctr; |
274 |
} else { |
} else { |
275 |
*intern = d*resr; |
*intern = d*resr; |
276 |
*intern -= intern->dot(b.dirconn.cw90()) * b.dirconn.cw90(); |
*intern -= intern->dot(b.dirconn.cw90()) * b.dirconn.cw90(); |