本文整理汇总了C++中SoState::push方法的典型用法代码示例。如果您正苦于以下问题:C++ SoState::push方法的具体用法?C++ SoState::push怎么用?C++ SoState::push使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SoState
的用法示例。
在下文中一共展示了SoState::push方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: renderHighlight
void SoBrepPointSet::renderHighlight(SoGLRenderAction *action)
{
SoState * state = action->getState();
state->push();
float ps = SoPointSizeElement::get(state);
if (ps < 4.0f) SoPointSizeElement::set(state, this, 4.0f);
SoLazyElement::setEmissive(state, &this->highlightColor);
SoOverrideElement::setEmissiveColorOverride(state, this, true);
SoLazyElement::setDiffuse(state, this,1, &this->highlightColor,&this->colorpacker);
SoOverrideElement::setDiffuseColorOverride(state, this, true);
const SoCoordinateElement * coords;
const SbVec3f * normals;
this->getVertexData(state, coords, normals, false);
SoMaterialBundle mb(action);
mb.sendFirst(); // make sure we have the correct material
int32_t id = this->highlightIndex.getValue();
if (id < this->startIndex.getValue() || id >= coords->getNum()) {
SoDebugError::postWarning("SoBrepPointSet::renderHighlight", "highlightIndex out of range");
}
else {
renderShape(static_cast<const SoGLCoordinateElement*>(coords), &id, 1);
}
state->pop();
}
示例2: preRender
// doc from parent
void
SoFCSelection::GLRenderInPath(SoGLRenderAction * action)
{
#ifdef NO_FRONTBUFFER
// check if preselection is active
HighlightModes mymode = (HighlightModes) this->highlightMode.getValue();
bool preselected = highlighted && mymode == AUTO;
SoState * state = action->getState();
state->push();
if (preselected || this->highlightMode.getValue() == ON || this->selected.getValue() == SELECTED) {
this->setOverride(action);
}
inherited::GLRenderInPath(action);
state->pop();
#else
// Set up state for locate highlighting (if necessary)
GLint oldDepthFunc;
SbBool drawHighlighted = preRender(action, oldDepthFunc);
// now invoke the parent method
inherited::GLRenderInPath(action);
// Restore old depth buffer model if needed
if (drawHighlighted || highlighted)
glDepthFunc((GLenum)oldDepthFunc);
// Clean up state if needed
if (drawHighlighted)
action->getState()->pop();
#endif
}
示例3: renderSelection
void SoBrepPointSet::renderSelection(SoGLRenderAction *action)
{
SoState * state = action->getState();
state->push();
float ps = SoPointSizeElement::get(state);
if (ps < 4.0f) SoPointSizeElement::set(state, this, 4.0f);
SoLazyElement::setEmissive(state, &this->selectionColor);
SoOverrideElement::setEmissiveColorOverride(state, this, true);
SoLazyElement::setDiffuse(state, this,1, &this->selectionColor,&this->colorpacker);
SoOverrideElement::setDiffuseColorOverride(state, this, true);
const SoCoordinateElement * coords;
const SbVec3f * normals;
const int32_t * cindices;
int numcindices;
this->getVertexData(state, coords, normals, false);
SoMaterialBundle mb(action);
mb.sendFirst(); // make sure we have the correct material
cindices = this->selectionIndex.getValues(0);
numcindices = this->selectionIndex.getNum();
if (!validIndexes(coords, this->startIndex.getValue(), cindices, numcindices)) {
SoDebugError::postWarning("SoBrepPointSet::renderSelection", "selectionIndex out of range");
}
else {
renderShape(static_cast<const SoGLCoordinateElement*>(coords), cindices, numcindices);
}
state->pop();
}
示例4: renderHighlight
void SoBrepEdgeSet::renderHighlight(SoGLRenderAction *action)
{
SoState * state = action->getState();
state->push();
//SoLineWidthElement::set(state, this, 4.0f);
SoLazyElement::setEmissive(state, &this->highlightColor);
SoOverrideElement::setEmissiveColorOverride(state, this, TRUE);
SoLazyElement::setDiffuse(state, this,1, &this->highlightColor,&this->colorpacker1);
SoOverrideElement::setDiffuseColorOverride(state, this, TRUE);
SoLazyElement::setLightModel(state, SoLazyElement::BASE_COLOR);
const SoCoordinateElement * coords;
const SbVec3f * normals;
const int32_t * cindices;
int numcindices;
const int32_t * nindices;
const int32_t * tindices;
const int32_t * mindices;
SbBool normalCacheUsed;
this->getVertexData(state, coords, normals, cindices, nindices,
tindices, mindices, numcindices, FALSE, normalCacheUsed);
SoMaterialBundle mb(action);
mb.sendFirst(); // make sure we have the correct material
int num = (int)this->hl.size();
if (num > 0) {
const int32_t* id = &(this->hl[0]);
renderShape(static_cast<const SoGLCoordinateElement*>(coords), id, num);
}
state->pop();
}
示例5: renderHighlight
void SoBrepPointSet::renderHighlight(SoGLRenderAction *action)
{
SoState * state = action->getState();
state->push();
float ps = SoPointSizeElement::get(state);
if (ps < 4.0f) SoPointSizeElement::set(state, this, 4.0f);
SoLazyElement::setEmissive(state, &this->highlightColor);
SoOverrideElement::setEmissiveColorOverride(state, this, TRUE);
SoLazyElement::setDiffuse(state, this,1, &this->highlightColor,&this->colorpacker);
SoOverrideElement::setDiffuseColorOverride(state, this, TRUE);
const SoCoordinateElement * coords;
const SbVec3f * normals;
this->getVertexData(state, coords, normals, FALSE);
SoMaterialBundle mb(action);
mb.sendFirst(); // make sure we have the correct material
int32_t id = this->highlightIndex.getValue();
renderShape(static_cast<const SoGLCoordinateElement*>(coords), &id, 1);
state->pop();
}
示例6: GLRender
/**
* Renders the probe with text label and a bullet at the base point.
*/
void SoRegPoint::GLRender(SoGLRenderAction *action)
{
if (shouldGLRender(action))
{
SoState* state = action->getState();
state->push();
SoMaterialBundle mb(action);
SoTextureCoordinateBundle tb(action, true, false);
SoLazyElement::setLightModel(state, SoLazyElement::BASE_COLOR);
mb.sendFirst(); // make sure we have the correct material
SbVec3f p1 = base.getValue();
SbVec3f p2 = p1 + normal.getValue() * length.getValue();
glLineWidth(1.0f);
glColor3fv(color.getValue().getValue());
glBegin(GL_LINE_STRIP);
glVertex3d(p1[0], p1[1], p1[2]);
glVertex3d(p2[0], p2[1], p2[2]);
glEnd();
glPointSize(5.0f);
glBegin(GL_POINTS);
glVertex3fv(p1.getValue());
glEnd();
glPointSize(2.0f);
glBegin(GL_POINTS);
glVertex3fv(p2.getValue());
glEnd();
root->GLRender(action);
state->pop();
}
}
示例7:
// Doc in parent
void
SoVRMLGroup::getPrimitiveCount(SoGetPrimitiveCountAction * action)
{
SoState * state = action->getState();
state->push();
inherited::getPrimitiveCount(action);
state->pop();
}
示例8:
// Doc from superclass.
void
SoGeoSeparator::GLRenderInPath(SoGLRenderAction * action)
{
SoState * state = action->getState();
state->push();
this->applyTransformation((SoAction*) action);
SoSeparator::GLRenderInPath(action);
state->pop();
}
示例9:
void
SoVRMLShape::GLRender(SoGLRenderAction * action)
{
SoState * state = action->getState();
state->push();
if ((this->appearance.getValue() == NULL) ||
(((SoVRMLAppearance*)this->appearance.getValue())->material.getValue() == NULL)) {
SoLazyElement::setLightModel(state, SoLazyElement::BASE_COLOR);
}
int numindices;
const int * indices;
SoAction::PathCode pathcode = action->getPathCode(numindices, indices);
SoNode ** childarray = (SoNode**) this->getChildren()->getArrayPtr();
if (pathcode == SoAction::IN_PATH) {
int lastchild = indices[numindices - 1];
for (int i = 0; i <= lastchild && !action->hasTerminated(); i++) {
SoNode * child = childarray[i];
action->pushCurPath(i, child);
if (action->getCurPathCode() != SoAction::OFF_PATH ||
child->affectsState()) {
if (!action->abortNow()) {
SoNodeProfiling profiling;
profiling.preTraversal(action);
child->GLRender(action);
profiling.postTraversal(action);
}
else {
SoCacheElement::invalidate(state);
}
}
action->popCurPath(pathcode);
}
}
else {
action->pushCurPath();
int n = this->getChildren()->getLength();
for (int i = 0; i < n && !action->hasTerminated(); i++) {
action->popPushCurPath(i, childarray[i]);
if (action->abortNow()) {
// only cache if we do a full traversal
SoCacheElement::invalidate(state);
break;
}
SoNodeProfiling profiling;
profiling.preTraversal(action);
childarray[i]->GLRender(action);
profiling.postTraversal(action);
}
action->popCurPath();
}
state->pop();
}
示例10: assert
// Doc in parent
void
SoVRMLGroup::GLRenderInPath(SoGLRenderAction * action)
{
int numindices;
const int * indices;
SoAction::PathCode pathcode = action->getPathCode(numindices, indices);
if (pathcode == SoAction::IN_PATH) {
SoState * state = action->getState();
SoNode ** childarray = (SoNode**) this->getChildren()->getArrayPtr();
state->push();
int childidx = 0;
for (int i = 0; i < numindices; i++) {
for (; childidx < indices[i] && !action->hasTerminated(); childidx++) {
SoNode * offpath = childarray[childidx];
if (offpath->affectsState()) {
action->pushCurPath(childidx, offpath);
if (!action->abortNow()) {
SoNodeProfiling profiling;
profiling.preTraversal(action);
offpath->GLRenderOffPath(action);
profiling.postTraversal(action);
}
else {
SoCacheElement::invalidate(state);
}
action->popCurPath(pathcode);
}
}
SoNode * inpath = childarray[childidx];
action->pushCurPath(childidx, inpath);
if (!action->abortNow()) {
SoNodeProfiling profiling;
profiling.preTraversal(action);
inpath->GLRenderInPath(action);
profiling.postTraversal(action);
}
else {
SoCacheElement::invalidate(state);
}
action->popCurPath(pathcode);
childidx++;
}
state->pop();
}
else {
// we got to the end of the path
assert(action->getCurPathCode() == SoAction::BELOW_PATH);
this->GLRenderBelowPath(action);
}
}
示例11: isHighlighted
SbBool
SoFCSelection::preRender(SoGLRenderAction *action, GLint &oldDepthFunc)
//
////////////////////////////////////////////////////////////////////////
{
// If not performing locate highlighting, just return.
if (highlightMode.getValue() == OFF)
return FALSE;
SoState *state = action->getState();
// ??? prevent caching at this level - for some reason the
// ??? SoWindowElement::copyMatchInfo() method get called, which should
// ??? never be called. We are not caching this node correctly yet....
//SoCacheElement::invalidate(state);
SbBool drawHighlighted = (highlightMode.getValue() == ON || isHighlighted(action) || selected.getValue() == SELECTED);
if (drawHighlighted) {
// prevent diffuse & emissive color from leaking out...
state->push();
SbColor col;
if (selected.getValue() == SELECTED)
col = colorSelection.getValue();
else
col = colorHighlight.getValue();
// Emissive Color
SoLazyElement::setEmissive(state, &col);
SoOverrideElement::setEmissiveColorOverride(state, this, TRUE);
// Diffuse Color
if (style.getValue() == EMISSIVE_DIFFUSE) {
SoLazyElement::setDiffuse(state, this, 1, &col, &colorpacker);
SoOverrideElement::setDiffuseColorOverride(state, this, TRUE);
}
}
// Draw on top of other things at same z-buffer depth if:
// [a] we're highlighted
// [b] this is the highlighting pass. This occurs when changing from
// non-hilit to lit OR VICE VERSA.
// Otherwise, leave it alone...
if (drawHighlighted || highlighted) {
glGetIntegerv(GL_DEPTH_FUNC, &oldDepthFunc);
if (oldDepthFunc != GL_LEQUAL)
glDepthFunc(GL_LEQUAL);
}
return drawHighlighted;
}
示例12: assert
void
SoBoxHighlightRenderAction::drawBoxes(SoPath * pathtothis, const SoPathList * pathlist)
{
int i;
int thispos = reclassify_cast<SoFullPath *>(pathtothis)->getLength()-1;
assert(thispos >= 0);
PRIVATE(this)->postprocpath->setHead(pathtothis->getHead()); // reset
for (i = 1; i < thispos; i++) {
PRIVATE(this)->postprocpath->append(pathtothis->getIndex(i));
}
// we need to disable accumulation buffer antialiasing while
// rendering selected objects
int oldnumpasses = this->getNumPasses();
this->setNumPasses(1);
SoState * thestate = this->getState();
thestate->push();
for (i = 0; i < pathlist->getLength(); i++) {
SoFullPath * path = reclassify_cast<SoFullPath *>((*pathlist)[i]);
PRIVATE(this)->postprocpath->append(path->getHead());
for (int j = 1; j < path->getLength(); j++) {
PRIVATE(this)->postprocpath->append(path->getIndex(j));
}
// Previously SoGLRenderAction was used to draw the bounding boxes
// of shapes in selection paths, by overriding renderstyle state
// elements to lines drawstyle and simply doing:
//
// SoGLRenderAction::apply(PRIVATE(this)->postprocpath); // Bug
//
// This could have the unwanted side effect of rendering
// non-selected shapes, as they could be part of the path (due to
// being placed below SoGroup nodes (instead of SoSeparator
// nodes)) up to the selected shape.
//
//
// A better approach turned out to be to soup up and draw only the
// bounding boxes of the selected shapes:
PRIVATE(this)->drawHighlightBox(PRIVATE(this)->postprocpath);
// Remove temporary path from path buffer
PRIVATE(this)->postprocpath->truncate(thispos);
}
this->setNumPasses(oldnumpasses);
thestate->pop();
}
示例13: renderSelection
void SoBrepEdgeSet::renderSelection(SoGLRenderAction *action)
{
int numSelected = this->selectionIndex.getNum();
if (numSelected == 0) return;
SoState * state = action->getState();
state->push();
//SoLineWidthElement::set(state, this, 4.0f);
SoLazyElement::setEmissive(state, &this->selectionColor);
SoOverrideElement::setEmissiveColorOverride(state, this, true);
SoLazyElement::setDiffuse(state, this,1, &this->selectionColor,&this->colorpacker2);
SoOverrideElement::setDiffuseColorOverride(state, this, true);
SoLazyElement::setLightModel(state, SoLazyElement::BASE_COLOR);
const SoCoordinateElement * coords;
const SbVec3f * normals;
const int32_t * cindices;
int numcindices;
const int32_t * nindices;
const int32_t * tindices;
const int32_t * mindices;
SbBool normalCacheUsed;
this->getVertexData(state, coords, normals, cindices, nindices,
tindices, mindices, numcindices, false, normalCacheUsed);
SoMaterialBundle mb(action);
mb.sendFirst(); // make sure we have the correct material
int num = (int)this->sl.size();
if (num > 0) {
cindices = &(this->sl[0]);
numcindices = (int)this->sl.size();
if (!validIndexes(coords, this->sl)) {
SoDebugError::postWarning("SoBrepEdgeSet::renderSelection", "selectionIndex out of range");
}
else {
renderShape(static_cast<const SoGLCoordinateElement*>(coords), cindices, numcindices);
}
}
state->pop();
}
示例14:
void
SoXipPlot2Columns::GLRender( SoGLRenderAction* action )
{
SoXipPlot2Element::add(
action->getState(),
this,
label.getValue(),
borderColor.getValue(),
faceColor.getValue() );
SoState* state = action->getState();
state->push();
// Make sure the DrawStyle is set to FILLED
SoDrawStyleElement::set( state, SoDrawStyleElement::FILLED );
SoBaseKit::GLRender( action );
state->pop();
}
示例15:
void
SoXipPlot2Ruler::GLRender( SoGLRenderAction* action )
{
SoState* state = action->getState();
if( !state )
return ;
state->push();
mBBox = SoXipPlot2AreaElement::getBBox( state );
int numValues = value.getNum();
mCoord->point.setNum( 2 * numValues );
mLineSet->numVertices.setNum( numValues );
if( type.getValue() == HORIZONTAL )
{
for( int i = 0; i < numValues; ++ i )
{
mCoord->point.set1Value( 2*i, SbVec3f( mBBox.getMin()[0], value[i], 0 ) );
mCoord->point.set1Value( 1 + 2*i, SbVec3f( mBBox.getMax()[0], value[i], 0 ) );
mLineSet->numVertices.set1Value( i, 2 );
}
}
else
{
for( int i = 0; i < numValues; ++ i )
{
mCoord->point.set1Value( 2*i, SbVec3f( value[i], mBBox.getMin()[1], 0 ) );
mCoord->point.set1Value( 1 + 2*i, SbVec3f( value[i], mBBox.getMax()[1], 0 ) );
mLineSet->numVertices.set1Value( i, 2 );
}
}
action->traverse( mCoord );
action->traverse( mLineSet );
state->pop();
}