PhysicsNode &PhysicsNode::operator= (const PhysicsNode &o) { Node::operator= (o); body->setSize(o.body->getSize()); body->setMass(o.body->getMass()); body->setBody(o.body->getBody()); render_body = o.render_body; set2d(o.object_2d); invalidateMatrix(); return *this; }
TTErr TTSampleMatrix::poke(const TTRowID index, const TTColumnID channel, const TTSampleValue value) { TTRowID p_index = index; TTColumnID p_channel = channel; TTBoolean weAreNotInBounds = makeInBounds(p_index,p_channel); // out of range values are wrapped if (weAreNotInBounds) { // don't go poking around out of bounds return kTTErrOutOfBounds; } else { set2d(p_index, p_channel, value); return kTTErrNone; } }
TTErr TTSampleMatrix::fill(const TTValue& value, TTValue& unusedOutput) { TTSymbol fillAlgorithm = value; if (fillAlgorithm == kTTSym_sine) { for (TTUInt16 channel=0; channel<mNumChannels; channel++) { for (TTUInt64 i=0; i<mLengthInSamples; i++) set2d(i+1, channel+1, sin(kTTTwoPi * (i / (TTFloat64(mLengthInSamples) - 1.0)))); } } else if (fillAlgorithm == kTTSym_sineMod) { // (modulator version: ranges from 0.0 to 1.0, rather than -1.0 to 1.0) for (TTUInt16 channel=0; channel<mNumChannels; channel++) { for (TTUInt64 i=0; i<mLengthInSamples; i++) set2d(i+1, channel+1, 0.5 + (0.5 * sin(kTTTwoPi * (i / (TTFloat64(mLengthInSamples) - 1.0))))); } } else if (fillAlgorithm == kTTSym_cosine) { for (TTUInt16 channel=0; channel<mNumChannels; channel++) { for (TTUInt64 i=0; i<mLengthInSamples; i++) set2d(i+1, channel+1, cos(kTTTwoPi * (i / (TTFloat64(mLengthInSamples) - 1.0)))); } } else if (fillAlgorithm == kTTSym_cosineMod) { for (TTUInt16 channel=0; channel<mNumChannels; channel++) { for (TTUInt64 i=0; i<mLengthInSamples; i++) set2d(i+1, channel+1, 0.5 + (0.5 * cos(kTTTwoPi * (i / (TTFloat64(mLengthInSamples) - 1.0))))); } } else if (fillAlgorithm == kTTSym_ramp) { for (TTUInt16 channel=0; channel<mNumChannels; channel++) { for (TTUInt64 i=0; i<mLengthInSamples; i++) set2d(i+1, channel+1, -1.0 + (2.0 * (float(i) / mLengthInSamples))); } } else if (fillAlgorithm == kTTSym_rampMod) { for (TTUInt16 channel=0; channel<mNumChannels; channel++) { for (TTUInt64 i=0; i<mLengthInSamples; i++) set2d(i+1, channel+1, float(i) / mLengthInSamples); } } else if (fillAlgorithm == kTTSym_sawtooth) { for (TTUInt16 channel=0; channel<mNumChannels; channel++) { for (TTUInt64 i=0; i<mLengthInSamples; i++) set2d(mLengthInSamples-i, channel+1, -1.0 + (2.0 * (float(i) / mLengthInSamples))); } } else if (fillAlgorithm == kTTSym_sawtoothMod) { for (TTUInt16 channel=0; channel<mNumChannels; channel++) { for (TTUInt64 i=0; i<mLengthInSamples; i++) set2d(mLengthInSamples-i, channel+1, float(i) / mLengthInSamples); } } else if (fillAlgorithm == kTTSym_triangle) { for (TTUInt16 channel=0; channel<mNumChannels; channel++) { for (TTUInt32 i=0; i < mLengthInSamples/2; i++) { set2d(i+1, channel+1, -1.0 + (4.0 * (float(i) / mLengthInSamples))); set2d(mLengthInSamples-i, channel+1, -1.0 + (4.0 * (float(i) / mLengthInSamples))); } } } else if (fillAlgorithm == kTTSym_triangleMod) { for (TTUInt16 channel=0; channel<mNumChannels; channel++) { for (TTUInt32 i=0; i < mLengthInSamples/2; i++) { set2d(i+1, channel+1, -1.0 + (4.0 * (float(i) / mLengthInSamples))); set2d(mLengthInSamples-i, channel+1, -1.0 + (4.0 * (float(i) / mLengthInSamples))); } } } return kTTErrNone; }
TTErr TTSampleMatrix::poke(const TTUInt64 index, const TTUInt16 channel, const TTSampleValue value) { // TODO: perhaps we should range check the input here first... set2d(index, channel, value); return kTTErrNone; }
TTErr TTSampleMatrix::fill(const TTValue& value, TTValue& unusedOutput) { TTSymbol fillAlgorithm = value; TTSampleValue tempSample = 0.; TTRowID tempIndex = 0; if (fillAlgorithm == kTTSym_sine) { for (TTColumnID channel=0; channel<mNumChannels; channel++) { for (TTRowID i=0; i<mLengthInSamples; i++) set2d(i, channel, sin(kTTTwoPi * (i / (TTFloat64(mLengthInSamples) - 1.0)))); } } else if (fillAlgorithm == kTTSym_sineMod) { // (modulator version: ranges from 0.0 to 1.0, rather than -1.0 to 1.0) for (TTColumnID channel=0; channel<mNumChannels; channel++) { for (TTRowID i=0; i<mLengthInSamples; i++) set2d(i, channel, 0.5 + (0.5 * sin(kTTTwoPi * (i / (TTFloat64(mLengthInSamples) - 1.0))))); } } else if (fillAlgorithm == kTTSym_cosine) { for (TTColumnID channel=0; channel<mNumChannels; channel++) { for (TTRowID i=0; i<mLengthInSamples; i++) set2d(i, channel, cos(kTTTwoPi * (i / (TTFloat64(mLengthInSamples) - 1.0)))); } } else if (fillAlgorithm == kTTSym_cosineMod) { for (TTColumnID channel=0; channel<mNumChannels; channel++) { for (TTRowID i=0; i<mLengthInSamples; i++) set2d(i, channel, 0.5 + (0.5 * cos(kTTTwoPi * (i / (TTFloat64(mLengthInSamples) - 1.0))))); } } else if (fillAlgorithm == kTTSym_ramp) { for (TTColumnID channel=0; channel<mNumChannels; channel++) { for (TTRowID i=0; i<mLengthInSamples; i++) set2d(i, channel, -1.0 + (2.0 * (float(i) / mLengthInSamples))); } } else if (fillAlgorithm == kTTSym_rampMod) { for (TTColumnID channel=0; channel<mNumChannels; channel++) { for (TTRowID i=0; i<mLengthInSamples; i++) set2d(i, channel, float(i) / mLengthInSamples); } } else if (fillAlgorithm == kTTSym_sawtooth) { for (TTColumnID channel=0; channel<mNumChannels; channel++) { for (TTRowID i=0; i<mLengthInSamples; i++) set2d(mLengthInSamples-i, channel, -1.0 + (2.0 * (float(i) / mLengthInSamples))); } } else if (fillAlgorithm == kTTSym_sawtoothMod) { for (TTColumnID channel=0; channel<mNumChannels; channel++) { for (TTRowID i=0; i<mLengthInSamples; i++) set2d(mLengthInSamples-i, channel, float(i) / mLengthInSamples); } } else if (fillAlgorithm == kTTSym_triangle) { for (TTColumnID channel=0; channel<mNumChannels; channel++) { tempIndex = 3*mLengthInSamples/4; for (TTRowID i=0; i < mLengthInSamples/4; i++) { tempSample = -1.0 + (4.0 * (float(i) / mLengthInSamples)); set2d(i+tempIndex, channel, tempSample); set2d(tempIndex-i, channel, tempSample); } tempIndex = mLengthInSamples/2; for (TTRowID i=0; i < mLengthInSamples/4; i++) { tempSample = 4.0 * (float(i) / mLengthInSamples); set2d(i, channel, tempSample); set2d(tempIndex-i, channel, tempSample); } } } else if (fillAlgorithm == kTTSym_triangleMod) { for (TTColumnID channel=0; channel<mNumChannels; channel++) { for (TTRowID i=0; i < mLengthInSamples/2; i++) { set2d(i, channel, -1.0 + (4.0 * (float(i) / mLengthInSamples))); set2d(mLengthInSamples-i, channel, -1.0 + (4.0 * (float(i) / mLengthInSamples))); } } } return kTTErrNone; }
int main() { //! [freemanChainFromImage-imageImport] typedef DGtal::ImageContainerBySTLVector< Z2i::Domain, unsigned char> Image; std::string filename = examplesPath + "samples/circleR10modif.pgm"; Image image = DGtal::PNMReader<Image>::importPGM(filename); //! [freemanChainFromImage-imageImport] //![freemanChainFromImage-ksspace] Z2i::KSpace ks; ks.init( image.domain().lowerBound(), image.domain().upperBound(), true ); //![freemanChainFromImage-ksspace] //! [freemanChainFromImage-setAppend] Z2i::DigitalSet set2d (image.domain()); SetPredicate<Z2i::DigitalSet> set2dPredicate( set2d ); SetFromImage<Z2i::DigitalSet>::append<Image>(set2d, image, 1, 255); //! [freemanChainFromImage-setAppend] //! [freemanChainFromImage-displaySet] Board2D aBoard; aBoard << set2d; aBoard << image.domain(); //! [freemanChainFromImage-displaySet] //! [freemanChainFromImage-adj] SurfelAdjacency<2> sAdj( true ); //! [freemanChainFromImage-adj] //! [freemanChainFromImage-extraction] std::vector< std::vector< Z2i::Point > > vectContoursBdryPointels; Surfaces<Z2i::KSpace>::extractAllPointContours4C( vectContoursBdryPointels, ks, set2dPredicate, sAdj ); //! [freemanChainFromImage-extraction] GradientColorMap<int> cmap_grad( 0, (const int)vectContoursBdryPointels.size() ); cmap_grad.addColor( Color( 50, 50, 255 ) ); cmap_grad.addColor( Color( 255, 0, 0 ) ); cmap_grad.addColor( Color( 255, 255, 10 ) ); cmap_grad.addColor( Color( 25, 255, 255 ) ); cmap_grad.addColor( Color( 255, 25, 255 ) ); cmap_grad.addColor( Color( 25, 25, 25 ) ); //! [freemanChainFromImage-fcConstruction] for(unsigned int i=0; i<vectContoursBdryPointels.size(); i++){ // Constructing and displaying FreemanChains from contours. FreemanChain<Z2i::Integer> fc (vectContoursBdryPointels.at(i)); //! [freemanChainFromImage-fcConstruction] //! [freemanChainFromImage-fcdysplay] aBoard << SetMode( fc.className(), "InterGrid" ); aBoard<< CustomStyle( fc.className(), new CustomColors( cmap_grad(i), Color::None ) ); aBoard << fc; //! [freemanChainFromImage-fcdysplay] } aBoard.saveEPS("freemanChainFromImage.eps"); return 0; }