void SoNodeToName::evaluate()
{   
    // make room as necessary
    SO_ENGINE_OUTPUT(output, SoMFString, setNum(input.getNum()));
    int next = 0;
    for( int i = 0; i < input.getNum(); i++ )
    {
        SoNode * node = input[i];
        if( node == NULL || node->getName() == "" )
        {
            if(  compact.getValue() == FALSE )
            {
                SO_ENGINE_OUTPUT(output, SoMFString, set1Value(next, ""));
                next++;
            }
        }
        else
        {
            SO_ENGINE_OUTPUT(output, SoMFString, set1Value(next, node->getName().getString()));
            next++;
        }        
    }
    // truncate as necessary
    SO_ENGINE_OUTPUT(output, SoMFString, setNum(next));
}
Exemple #2
0
void
SoMFColor::set1HSVValue(int index, const float hsv[3])
{
    SbColor	c;

    c.setHSVValue(hsv);
    set1Value(index, c);
}
Exemple #3
0
void
SoMFColor::set1HSVValue(int index, float h, float s, float v)
{
    SbColor	c;

    c.setHSVValue(h, s, v);
    set1Value(index, c);
}
void
SoBoolOperation::evaluate()
//
////////////////////////////////////////////////////////////////////////
{
    int	na = a.getNum();
    int nb = b.getNum();
    int noperation = operation.getNum();
    int nout = max(na,nb,noperation);
    SO_ENGINE_OUTPUT(output, SoMFBool, setNum(nout));
    SO_ENGINE_OUTPUT(inverse, SoMFBool, setNum(nout));

    for (int i=0; i<nout; i++) {
	SbBool va = a[clamp(i,na)];
	SbBool vb = b[clamp(i,nb)];
	SbBool result;
	switch (operation[clamp(i,noperation)]) {
	case CLEAR:		result = FALSE;			break;
	case SET:		result = TRUE;			break;
	case A:			result = va;			break;
	case NOT_A:		result = !va;			break;
	case B:			result = vb;			break;
	case NOT_B:		result = !vb;			break;
	case A_OR_B:		result = va || vb;		break;
	case NOT_A_OR_B:	result = (!va) || vb;		break;
	case A_OR_NOT_B:	result = va || (!vb);		break;
	case NOT_A_OR_NOT_B:	result = (!va) || (!vb);	break;
	case A_AND_B:		result = va && vb;		break;
	case NOT_A_AND_B:	result = (!va) && (vb);		break;
	case A_AND_NOT_B:	result = va && (!vb);		break;
	case NOT_A_AND_NOT_B:	result = (!va) && (!vb);	break;
	case A_EQUALS_B:	result = (va == vb);		break;
	case A_NOT_EQUALS_B:	result = (va != vb);		break;
	}

	SO_ENGINE_OUTPUT(output, SoMFBool, set1Value(i, result));
	SO_ENGINE_OUTPUT(inverse, SoMFBool, set1Value(i, !result));
    }
}
Exemple #5
0
// Documented in superclass.
void
SoDecomposeMatrix::evaluate()
{
  int num = this->matrix.getNum();

  SO_ENGINE_OUTPUT(translation,SoMFVec3f,setNum(num));
  SO_ENGINE_OUTPUT(rotation,SoMFRotation,setNum(num));
  SO_ENGINE_OUTPUT(scaleFactor,SoMFVec3f,setNum(num));
  SO_ENGINE_OUTPUT(scaleOrientation,SoMFRotation,setNum(num));

  int i;
  SbVec3f translationVal,scaleFactorVal;
  SbRotation rotationVal,scaleOrientationVal;
  for (i = 0; i < num; i++) {
    SbVec3f c = (i < center.getNum()) ? center[i] : SbVec3f(0.0f, 0.0f, 0.0f);
    this->matrix[i].getTransform(translationVal,rotationVal,scaleFactorVal,
                                 scaleOrientationVal, c);
    SO_ENGINE_OUTPUT(translation,SoMFVec3f,set1Value(i,translationVal));
    SO_ENGINE_OUTPUT(rotation,SoMFRotation,set1Value(i,rotationVal));
    SO_ENGINE_OUTPUT(scaleFactor,SoMFVec3f,set1Value(i,scaleFactorVal));
    SO_ENGINE_OUTPUT(scaleOrientation,SoMFRotation,
                     set1Value(i,scaleOrientationVal));
  }
}
Exemple #6
0
void MFInt32::setValue(jobject field, int bConstField) {
	assert(field);
	JNIEnv		*jniEnv			= getJniEnv();
	jclass		classid			= bConstField ? getConstFieldID() : getFieldID();
	jmethodID	getSizeMethod	= bConstField ? getConstGetSizeMethodID() : getGetSizeMethodID();
	jmethodID	getValueMethod	= bConstField ? getConstGet1ValueMethodID() : getGet1ValueMethodID();
	assert(classid && getValueMethod);

	jint	jsize	= jniEnv->CallIntMethod(field, getSizeMethod);
	int		size	= getSize();

	for (int n=0; n<jsize; n++) {
		jint value = jniEnv->CallIntMethod(field, getValueMethod, n);
		if (n < size)
			set1Value(0, value);
		else
			addValue(value);
	}
}
Exemple #7
0
// Documented in superclass.
void
SoComposeMatrix::evaluate()
{
  int numTranslation = this->translation.getNum();
  int numRotation = this->rotation.getNum();
  int numScaleFactor = this->scaleFactor.getNum();
  int numScaleOrientation = this->scaleOrientation.getNum();
  int numCenter = this->center.getNum();

  int numOut = numTranslation > numRotation? numTranslation:numRotation;
  int numOut2 =
    numScaleFactor>numScaleOrientation?numScaleFactor:numScaleOrientation;
  numOut2 = numOut2>numCenter?numOut2:numCenter;
  numOut = numOut>numOut2?numOut:numOut2;

  SO_ENGINE_OUTPUT(matrix,SoMFMatrix,setNum(numOut));

  int i;

  for (i=0;i<numOut;i++) {
    const SbVec3f translationVal=
      i<numTranslation?this->translation[i]:this->translation[numTranslation-1];
    const SbVec3f scaleFactorVal=
      i<numScaleFactor?this->scaleFactor[i]:this->scaleFactor[numScaleFactor-1];
    const SbVec3f centerVal=i<numCenter?this->center[i]:this->center[numCenter-1];
    const SbRotation rotationVal=
      i<numRotation?this->rotation[i]:this->rotation[numRotation-1];
    const SbRotation scaleOrientationVal=
      i<numScaleOrientation?
      this->scaleOrientation[i]:this->scaleOrientation[numScaleOrientation-1];

    SbMatrix mat;
    mat.setTransform(translationVal,rotationVal,scaleFactorVal,
                     scaleOrientationVal,centerVal);
    SO_ENGINE_OUTPUT(matrix,SoMFMatrix,set1Value(i,mat));
  }
}
void
SoDoubleCalculator::evaluate()
//
////////////////////////////////////////////////////////////////////////
{
    if (reparse) {
	parser->clear();
	SbBool OK = TRUE;
        int i;
	for (i=0; i<expression.getNum(); i++) {
	    if (!parser->parse(expression[i].getString())) {
		OK = FALSE;
		break;
	    }
	}
	if (! OK) {
#ifdef DEBUG
	    SoDebugError::post("SoDoubleCalculator::evaluate",
			       "Invalid expression '%s'",
			       expression[i].getString());
#endif /* DEBUG */

	    expression.setValue("");
	    parser->clear();
	}
	reparse = FALSE;
    }

    int max = 0;
    int	na = a.getNum(); if (na > max) max = na;
    int nb = b.getNum(); if (nb > max) max = nb;
    int nc = c.getNum(); if (nc > max) max = nc;
    int nd = d.getNum(); if (nd > max) max = nd;
    int ne = e.getNum(); if (ne > max) max = ne;
    int nf = f.getNum(); if (nf > max) max = nf;
    int ng = g.getNum(); if (ng > max) max = ng;
    int nh = h.getNum(); if (nh > max) max = nh;

    int	nA = A.getNum(); if (nA > max) max = nA;
    int nB = B.getNum(); if (nB > max) max = nB;
    int nC = C.getNum(); if (nC > max) max = nC;
    int nD = D.getNum(); if (nD > max) max = nD;
    int nE = E.getNum(); if (nE > max) max = nE;
    int nF = F.getNum(); if (nF > max) max = nF;
    int nG = G.getNum(); if (nG > max) max = nG;
    int nH = H.getNum(); if (nG > max) max = nH;

    int nout = max;
    SO_ENGINE_OUTPUT(oa, SoMFDouble, setNum(nout));
    SO_ENGINE_OUTPUT(ob, SoMFDouble, setNum(nout));
    SO_ENGINE_OUTPUT(oc, SoMFDouble, setNum(nout));
    SO_ENGINE_OUTPUT(od, SoMFDouble, setNum(nout));
    SO_ENGINE_OUTPUT(oA, SoMFDouble, setNum(nout));
    SO_ENGINE_OUTPUT(oB, SoMFDouble, setNum(nout));
    SO_ENGINE_OUTPUT(oC, SoMFDouble, setNum(nout));
    SO_ENGINE_OUTPUT(oD, SoMFDouble, setNum(nout));

    for (int i=0; i<nout; i++) {
	va = a[clamp(i,na)];
	vb = b[clamp(i,nb)];
	vc = c[clamp(i,nc)];
	vd = d[clamp(i,nd)];
	ve = e[clamp(i,ne)];
	vf = f[clamp(i,nf)];
	vg = g[clamp(i,ng)];
	vh = h[clamp(i,nh)];
	vA = A[clamp(i,nA)];
	vB = B[clamp(i,nB)];
	vC = C[clamp(i,nC)];
	vD = D[clamp(i,nD)];
	vE = E[clamp(i,nE)];
	vF = F[clamp(i,nF)];
	vG = G[clamp(i,nG)];
	vH = H[clamp(i,nH)];
	ova = 0;
	ovb = 0;
	ovc = 0;
	ovd = 0;
	ovA = SbVec3f(0,0,0);
	ovB = SbVec3f(0,0,0);
	ovC = SbVec3f(0,0,0);
	ovD = SbVec3f(0,0,0);

	parser->eval();

	SO_ENGINE_OUTPUT(oa, SoMFDouble, set1Value(i, ova));
	SO_ENGINE_OUTPUT(ob, SoMFDouble, set1Value(i, ovb));
	SO_ENGINE_OUTPUT(oc, SoMFDouble, set1Value(i, ovc));
	SO_ENGINE_OUTPUT(od, SoMFDouble, set1Value(i, ovd));
	SO_ENGINE_OUTPUT(oA, SoMFVec3f, set1Value(i, ovA));
	SO_ENGINE_OUTPUT(oB, SoMFVec3f, set1Value(i, ovB));
	SO_ENGINE_OUTPUT(oC, SoMFVec3f, set1Value(i, ovC));
	SO_ENGINE_OUTPUT(oD, SoMFVec3f, set1Value(i, ovD));
    }
}
void
SoXipComposeVec6::evaluate()
{
	SO_ENGINE_OUTPUT(outVOI, SoMFInt32, setNum(6));

	// intersection of plane and volume

	SO_ENGINE_OUTPUT(outVOI, SoMFInt32, set1Value(0, xmin.getValue()) );
	SO_ENGINE_OUTPUT(outVOI, SoMFInt32, set1Value(1, xmax.getValue()) );

	SO_ENGINE_OUTPUT(outVOI, SoMFInt32, set1Value(2, ymin.getValue()) );
	SO_ENGINE_OUTPUT(outVOI, SoMFInt32, set1Value(3, ymax.getValue()) );

	SO_ENGINE_OUTPUT(outVOI, SoMFInt32, set1Value(4, zmin.getValue()) );
	SO_ENGINE_OUTPUT(outVOI, SoMFInt32, set1Value(5, zmax.getValue()) );
	
	// Reset outputs
    SO_ENGINE_OUTPUT( numSlices, SoSFShort, setValue(0) );
    SO_ENGINE_OUTPUT( output, SoXipSFDataImage, setValue(0) );

	SoXipDataImage* imageData = image.getValue();
	if( mImageData != imageData )
	{
		mImageData = image.getValue();

		// Reset previous outputs
		mOutputs.setNum(0);

		if( mImageData )
		{
			SbXipImage* image = mImageData->get();
			if( !image )
				return ;

			// Initialize outputs
			unsigned int numSlices = image->getDimStored()[2];			
			mOutputs.setNum( numSlices );

			for( unsigned int i = 0; i < numSlices; ++ i )
				mOutputs.set1Value( i, 0 );
		}
	}

	if( imageData )
	{
		SbXipImage* image = mImageData->get();
		if( !image )
			return ;

		SbXipImageDimensions dimensions = image->getDimStored();

		SbXipImageDimensions sliceDimensions = dimensions;
		sliceDimensions[2] = 1;

		int sliceIndex = this->sliceIndex.getValue();
		if( sliceIndex < 0 || sliceIndex >= dimensions[2] )
			return ;

		if( mOutputs[sliceIndex] == 0 )
		{
			// Compute the model matrix of the selected frame
			SbMatrix sliceModelMatrix = image->getModelMatrix();
			sliceModelMatrix[2][0] /= dimensions[2];
			sliceModelMatrix[2][1] /= dimensions[2];
			sliceModelMatrix[2][2] /= dimensions[2];

			sliceModelMatrix[3][0] += sliceIndex * sliceModelMatrix[2][0];
			sliceModelMatrix[3][1] += sliceIndex * sliceModelMatrix[2][1];
			sliceModelMatrix[3][2] += sliceIndex * sliceModelMatrix[2][2];

			// Pointer to the selected slice
			char* imagePtr = (char *) image->refBufferPtr();

			unsigned int cellSize;
			switch( image->getType() )
			{
			case SbXipImage::UNSIGNED_BYTE: cellSize = sizeof(unsigned char); break ;
			case SbXipImage::BYTE: cellSize = sizeof(char); break ;
			case SbXipImage::UNSIGNED_SHORT: cellSize = sizeof(unsigned short); break ;
			case SbXipImage::SHORT: cellSize = sizeof(short); break ;
			case SbXipImage::UNSIGNED_INT: cellSize = sizeof(unsigned int); break ;
			case SbXipImage::INT: cellSize = sizeof(int); break ;
			case SbXipImage::FLOAT: cellSize = sizeof(float); break ;
			case SbXipImage::DOUBLE: cellSize = sizeof(double); break ;
			}

			void* slicePtr = imagePtr + cellSize * image->getComponents() * dimensions[0] * dimensions[1] * sliceIndex;

			SbXipImage* slice = new SbXipImage( sliceDimensions, image->getType(), image->getBitsStored(), slicePtr,
				image->getComponents(), image->getComponentType(), image->getComponentLayoutType(), sliceModelMatrix,
				image->getLineAlignment() );

			image->unrefBufferPtr();

			SoXipDataImage* output = new SoXipDataImage();
			output->ref();
			output->set( slice );
			output->addRef( imageData );

			mOutputs.set1Value( sliceIndex, output );
		}

		SO_ENGINE_OUTPUT( output, SoXipSFDataImage, setValue(mOutputs[sliceIndex]) );
    }
}
Exemple #10
0
void
SoMFColor::set1Value(int index, const float rgb[3])
{
    set1Value(index, SbColor(rgb));
}
Exemple #11
0
void
SoMFColor::set1Value(int index, float r, float g, float b)
{
    set1Value(index, SbColor(r, g, b));
}
Exemple #12
0
void
SoMFColor::set1Value(int index, const SbVec3f &vec)
{
    set1Value(index, SbColor(vec.getValue()));
}