本文整理汇总了C++中SbTime::getValue方法的典型用法代码示例。如果您正苦于以下问题:C++ SbTime::getValue方法的具体用法?C++ SbTime::getValue怎么用?C++ SbTime::getValue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SbTime
的用法示例。
在下文中一共展示了SbTime::getValue方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: float
// Documented in superclass.
void
SoOneShot::evaluate(void)
{
SbTime elapsed = this->timeIn.getValue() - this->starttime;
SbTime durationval = this->duration.getValue();
SbTime timeoutval;
float rampval = -999.0f; // Explicit init to kill bogus egcs-2.91.66 warning.
if (this->running) {
if (elapsed < durationval) {
timeoutval = elapsed;
rampval = float(elapsed.getValue()) / float(durationval.getValue());
}
else {
this->running = FALSE;
if (this->flags.getValue() & SoOneShot::HOLD_FINAL) {
this->holdduration = durationval;
this->holdramp = 1.0f;
}
}
}
// Don't use "else" here, as the value of this->running might change
// in the if-block above.
if (!this->running) {
if (this->flags.getValue() & SoOneShot::HOLD_FINAL) {
timeoutval = this->holdduration;
rampval = this->holdramp;
}
else {
timeoutval = 0.0;
rampval = 0.0f;
}
}
// Values should be distributed on evaluate() even though outputs
// are not initially enabled.
//
// enable-settings will be restored again on the next
// inputChanged().
this->timeOut.enable(TRUE);
this->ramp.enable(TRUE);
this->isActive.enable(TRUE);
SO_ENGINE_OUTPUT(isActive, SoSFBool, setValue(this->running));
SO_ENGINE_OUTPUT(timeOut, SoSFTime, setValue(timeoutval));
SO_ENGINE_OUTPUT(ramp, SoSFFloat, setValue(rampval));
}
示例2: SbTime
SbTime
operator *(const SbTime &tm, double s)
//
////////////////////////////////////////////////////////////////////////
{
return SbTime(tm.getValue() * s);
}
示例3: processSoEvent
//.........这里部分代码省略.........
viewer->saveHomePosition();
break;
case SoKeyboardEvent::S:
case SoKeyboardEvent::HOME:
case SoKeyboardEvent::LEFT_ARROW:
case SoKeyboardEvent::UP_ARROW:
case SoKeyboardEvent::RIGHT_ARROW:
case SoKeyboardEvent::DOWN_ARROW:
if (!this->isViewing())
this->setViewing(true);
break;
default:
break;
}
}
// Mouse Button / Spaceball Button handling
if (type.isDerivedFrom(SoMouseButtonEvent::getClassTypeId())) {
const SoMouseButtonEvent * const event = (const SoMouseButtonEvent *) ev;
const int button = event->getButton();
const SbBool press = event->getState() == SoButtonEvent::DOWN ? TRUE : FALSE;
// SoDebugError::postInfo("processSoEvent", "button = %d", button);
switch (button) {
case SoMouseButtonEvent::BUTTON1:
this->lockrecenter = TRUE;
this->button1down = press;
#if 0 // disable to avoid interferences where this key combination is used, too
if (press && ev->wasShiftDown() &&
(this->currentmode != NavigationStyle::SELECTION)) {
this->centerTime = ev->getTime();
float ratio = vp.getViewportAspectRatio();
SbViewVolume vv = viewer->getCamera()->getViewVolume(ratio);
this->panningplane = vv.getPlane(viewer->getCamera()->focalDistance.getValue());
this->lockrecenter = FALSE;
}
else if (!press && ev->wasShiftDown() &&
(this->currentmode != NavigationStyle::SELECTION)) {
SbTime tmp = (ev->getTime() - this->centerTime);
float dci = (float)QApplication::doubleClickInterval()/1000.0f;
// is it just a left click?
if (tmp.getValue() < dci && !this->lockrecenter) {
if (!this->moveToPoint(pos)) {
panToCenter(panningplane, posn);
this->interactiveCountDec();
}
processed = TRUE;
}
}
else
#endif
if (press && (this->currentmode == NavigationStyle::SEEK_WAIT_MODE)) {
newmode = NavigationStyle::SEEK_MODE;
this->seekToPoint(pos); // implicitly calls interactiveCountInc()
processed = TRUE;
}
//else if (press && (this->currentmode == NavigationStyle::IDLE)) {
// this->setViewing(true);
// processed = TRUE;
//}
else if (press && (this->currentmode == NavigationStyle::PANNING ||
this->currentmode == NavigationStyle::ZOOMING)) {
newmode = NavigationStyle::DRAGGING;
this->centerTime = ev->getTime();
processed = TRUE;
}
示例4: if
// This function gets called whenever something has happened to any of
// the sensor queues. It starts or reschedules a timer which will
// trigger when a sensor is ripe for plucking.
void
SoGuiP::sensorQueueChanged(void * cbdata)
{
SoSensorManager * sensormanager = SoDB::getSensorManager();
SbTime timevalue;
if (sensormanager->isTimerSensorPending(timevalue)) {
SbTime interval = timevalue - SbTime::getTimeOfDay();
if (interval.getValue() < 0.0) interval.setValue(0.0);
if (SoWinP::timerSensorId != 0) Win32::KillTimer(NULL, SoWinP::timerSensorId);
SoWinP::timerSensorId =
Win32::SetTimer(NULL,
/* ignored because of NULL first argument: */ 0,
interval.getMsecValue(),
(TIMERPROC)SoWinP::timerSensorCB);
}
else if (SoWinP::timerSensorId != 0) {
Win32::KillTimer(NULL, SoWinP::timerSensorId);
SoWinP::timerSensorId = 0;
}
if (sensormanager->isDelaySensorPending()) {
if (SoWinP::idleSensorId == 0) {
SoWinP::idleSensorId =
Win32::SetTimer(NULL,
/* ignored because of NULL first argument: */ 0,
// FIXME: this seems like a rather bogus way
// of setting up a timer to check when the
// system goes idle. Should investigate how
// this actually works, and perhaps if there
// is some other mechanism we could
// use. 20040721 mortene.
0,
(TIMERPROC)SoWinP::idleSensorCB);
}
if (SoWinP::delaySensorId == 0) {
unsigned long timeout = SoDB::getDelaySensorTimeout().getMsecValue();
SoWinP::delaySensorId =
Win32::SetTimer(NULL,
/* ignored because of NULL first argument: */ 0,
timeout,
(TIMERPROC)SoWinP::delaySensorCB);
}
}
else {
if (SoWinP::idleSensorId != 0) {
Win32::KillTimer(NULL, SoWinP::idleSensorId);
SoWinP::idleSensorId = 0;
}
if (SoWinP::delaySensorId != 0) {
Win32::KillTimer(NULL, SoWinP::delaySensorId);
SoWinP::delaySensorId = 0;
}
}
}
示例5:
// Write SbTime value to output stream. Used from SoSFTime and
// SoMFTime.
void
sosftime_write_value(SoOutput * out, const SbTime & p)
{
out->write(p.getValue());
}
示例6: switch
void
SoBuiltinFieldConverter::doConversion(SoField *outField)
//
////////////////////////////////////////////////////////////////////////
{
// Various variables needed by the conversion cases:
int i;
SbMatrix matrix;
SbString string;
// Combine inType/outType into one integer.
switch (inType*MAXFIELDS + outType) {
#define CASE(typeIn,typeOut) case typeIn*MAXFIELDS+typeOut
// This macro is for converting the single/multi fields into their
// corresponding multi/single value fields.
// In normal code, it looks like:
// Single to Multi:
// SoMField->setValue(SoSField->getValue())
// Multi so Single:
// if (MField->getNum() > 0) SoSField->setValue(SoMField[0])
#define CONV1(type) \
CASE(SO__CONCAT(SF,type),SO__CONCAT(MF,type)): \
((SO__CONCAT(SoMF,type) *)outField)->setValue( \
((SO__CONCAT(SoSF,type) *)input)->getValue()); \
break; \
CASE(SO__CONCAT(MF,type),SO__CONCAT(SF,type)): \
if (((SoMField *)input)->getNum() > 0) \
((SO__CONCAT(SoSF,type) *)outField)->setValue( \
(*(SO__CONCAT(SoMF,type) *)input)[0]); \
break
// Cases for all the field types:
CONV1(BitMask);
CONV1(Bool);
CONV1(Color);
CONV1(Enum);
CONV1(Float);
CONV1(Int32);
CONV1(Matrix);
CONV1(Name);
CONV1(Node);
CONV1(Path);
CONV1(Plane);
CONV1(Rotation);
CONV1(Short);
CONV1(String);
CONV1(Time);
CONV1(UInt32);
CONV1(UShort);
CONV1(Vec2f);
CONV1(Vec3f);
CONV1(Vec4f);
#undef CONV1
//
// Conversions to/from a string for all field types. The eight cases
// are:
// Single to/from Single string:
// Single to/from Multiple string:
// Multi to/from Single string:
// input->get(string); outField->set(string);
// Multi to/from Multi string:
// for (i = 0; i < ((SoMField *)input)->getNum(); i++) {
// (SoMField *)input->get1(i, string);
// (SoMField *)outField->set1(i, string);
//
// Note: we must use the SF/MFString->setValue() routines and not just
// plain set() in case there is whitespace in the string, since set()
// takes file format, and in the file format strings with whitespace
// must be quoted.
//
#define CONVSTR(type) \
CASE(SO__CONCAT(SF,type),SFString): \
CASE(SO__CONCAT(MF,type),SFString): \
input->get(string); \
((SoSFString *)outField)->setValue(string); \
break; \
CASE(SO__CONCAT(SF,type),MFString): \
input->get(string); \
((SoMFString *)outField)->set1Value(0,string); \
break; \
CASE(SO__CONCAT(MF,type),MFString): \
for (i = 0; i < ((SoMField *)input)->getNum(); i++) { \
((SoMField *)input)->get1(i, string); \
((SoMFString *)outField)->set1Value(i, string); \
} \
break; \
CASE(SFString,SO__CONCAT(SF,type)): \
CASE(MFString,SO__CONCAT(SF,type)): \
CASE(SFString,SO__CONCAT(MF,type)): \
input->get(string); \
outField->set(string.getString()); \
break; \
CASE(MFString,SO__CONCAT(MF,type)): \
for (i = 0; i < ((SoMField *)input)->getNum(); i++) { \
((SoMField *)input)->get1(i, string); \
((SoMField *)outField)->set1(i, string.getString()); \
//.........这里部分代码省略.........
示例7: processSoEvent
//.........这里部分代码省略.........
doZoom(viewer->getCamera(), FALSE, posn);
processed = TRUE;
break;
default:
break;
}
}
// Mouse Button / Spaceball Button handling
if (type.isDerivedFrom(SoMouseButtonEvent::getClassTypeId())) {
const SoMouseButtonEvent * const event = (const SoMouseButtonEvent *) ev;
const int button = event->getButton();
const SbBool press = event->getState() == SoButtonEvent::DOWN ? TRUE : FALSE;
// SoDebugError::postInfo("processSoEvent", "button = %d", button);
switch (button) {
case SoMouseButtonEvent::BUTTON1:
this->lockrecenter = TRUE;
this->button1down = press;
if (press && (this->currentmode == NavigationStyle::SEEK_WAIT_MODE)) {
newmode = NavigationStyle::SEEK_MODE;
this->seekToPoint(pos); // implicitly calls interactiveCountInc()
processed = TRUE;
}
else if (press && (this->currentmode == NavigationStyle::PANNING ||
this->currentmode == NavigationStyle::ZOOMING)) {
newmode = NavigationStyle::DRAGGING;
this->centerTime = ev->getTime();
processed = TRUE;
}
else if (!press && (this->currentmode == NavigationStyle::DRAGGING)) {
SbTime tmp = (ev->getTime() - this->centerTime);
float dci = (float)QApplication::doubleClickInterval()/1000.0f;
if (tmp.getValue() < dci) {
newmode = NavigationStyle::ZOOMING;
}
processed = TRUE;
}
else if (!press && (this->currentmode == NavigationStyle::DRAGGING)) {
this->setViewing(false);
processed = TRUE;
}
else if (viewer->isEditing() && (this->currentmode == NavigationStyle::SPINNING)) {
processed = TRUE;
}
break;
case SoMouseButtonEvent::BUTTON2:
// If we are in edit mode then simply ignore the RMB events
// to pass the event to the base class.
this->lockrecenter = TRUE;
if (!viewer->isEditing()) {
// If we are in zoom or pan mode ignore RMB events otherwise
// the canvas doesn't get any release events
if (this->currentmode != NavigationStyle::ZOOMING &&
this->currentmode != NavigationStyle::PANNING &&
this->currentmode != NavigationStyle::DRAGGING) {
if (this->isPopupMenuEnabled()) {
if (!press) { // release right mouse button
this->openPopupMenu(event->getPosition());
}
}
}
}
// Alternative way of rotating & zooming
if (press && (this->currentmode == NavigationStyle::PANNING ||
this->currentmode == NavigationStyle::ZOOMING)) {
示例8: processSoEvent
//.........这里部分代码省略.........
// Mouse Button / Spaceball Button handling
if (type.isDerivedFrom(SoMouseButtonEvent::getClassTypeId())) {
const SoMouseButtonEvent * const event = (const SoMouseButtonEvent *) ev;
const int button = event->getButton();
const SbBool press = event->getState() == SoButtonEvent::DOWN ? true : false;
switch (button) {
case SoMouseButtonEvent::BUTTON1:
this->lockrecenter = true;
this->button1down = press;
if (press && (this->currentmode == NavigationStyle::SEEK_WAIT_MODE)) {
newmode = NavigationStyle::SEEK_MODE;
this->seekToPoint(pos); // implicitly calls interactiveCountInc()
processed = true;
}
else if (!press && (this->currentmode == NavigationStyle::ZOOMING)) {
newmode = NavigationStyle::IDLE;
processed = true;
}
else if (!press && (this->currentmode == NavigationStyle::DRAGGING)) {
this->setViewing(false);
processed = true;
}
else if (viewer->isEditing() && (this->currentmode == NavigationStyle::SPINNING)) {
processed = true;
}
// issue #0002433: avoid to swallow the UP event if down the
// scene graph somewhere a dialog gets opened
else if (press) {
SbTime tmp = (ev->getTime() - mouseDownConsumedEvent.getTime());
float dci = (float)QApplication::doubleClickInterval()/1000.0f;
// a double-click?
if (tmp.getValue() < dci) {
mouseDownConsumedEvent = *event;
mouseDownConsumedEvent.setTime(ev->getTime());
processed = true;
}
else {
mouseDownConsumedEvent.setTime(ev->getTime());
// 'ANY' is used to mark that we don't know yet if it will
// be a double-click event.
mouseDownConsumedEvent.setButton(SoMouseButtonEvent::ANY);
}
}
else if (!press) {
if (mouseDownConsumedEvent.getButton() == SoMouseButtonEvent::BUTTON1) {
// now handle the postponed event
inherited::processSoEvent(&mouseDownConsumedEvent);
mouseDownConsumedEvent.setButton(SoMouseButtonEvent::ANY);
}
}
break;
case SoMouseButtonEvent::BUTTON2:
// If we are in edit mode then simply ignore the RMB events
// to pass the event to the base class.
this->lockrecenter = true;
if (!viewer->isEditing()) {
// If we are in zoom or pan mode ignore RMB events otherwise
// the canvas doesn't get any release events
if (this->currentmode != NavigationStyle::ZOOMING &&
this->currentmode != NavigationStyle::PANNING &&
this->currentmode != NavigationStyle::DRAGGING) {
if (this->isPopupMenuEnabled()) {
if (!press) { // release right mouse button
this->openPopupMenu(event->getPosition());
示例9: PRIVATE
/*!
The string returned from this function is only valid until the next variable is
requested.
*/
const char *
SoScXMLStateMachine::getVariable(const char * key) const
{
if (strncmp(key, "_event.", 7) == 0) {
// printf("scan for key '%s'\n", key);
const char * subkey = key + 7;
const ScXMLEvent * ev = this->getCurrentEvent();
if (ev->isOfType(SoScXMLEvent::getClassTypeId())) {
const SoScXMLEvent * soev = static_cast<const SoScXMLEvent *>(ev);
const SoEvent * coinev = soev->getSoEvent();
if (strcmp(subkey, "getTime()") == 0) {
SbTime timeval = coinev->getTime();
double doubletime = timeval.getValue();
PRIVATE(this)->varstring = SbStringConvert::toString(doubletime);
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "getPosition().x") == 0) {
SbVec2s pos = coinev->getPosition();
PRIVATE(this)->varstring = SbStringConvert::toString(static_cast<double>(pos[0]));
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "getPosition().y") == 0) {
SbVec2s pos = coinev->getPosition();
PRIVATE(this)->varstring = SbStringConvert::toString(static_cast<double>(pos[1]));
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "getPosition()") == 0) {
SbVec2s pos = coinev->getPosition();
PRIVATE(this)->varstring = SbStringConvert::toString(pos);
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "getNormalizedPosition().x") == 0) {
SbVec2f pos = coinev->getNormalizedPosition(this->getViewportRegion());
PRIVATE(this)->varstring = SbStringConvert::toString(static_cast<double>(pos[0]));
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "getNormalizedPosition().y") == 0) {
SbVec2f pos = coinev->getNormalizedPosition(this->getViewportRegion());
PRIVATE(this)->varstring = SbStringConvert::toString(static_cast<double>(pos[1]));
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "getNormalizedPosition()") == 0) {
SbVec2f pos = coinev->getNormalizedPosition(this->getViewportRegion());
PRIVATE(this)->varstring = SbStringConvert::toString(pos);
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "wasShiftDown()") == 0) {
SbBool wasdown = coinev->wasShiftDown();
PRIVATE(this)->varstring = SbStringConvert::toString<bool>(wasdown);
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "wasCtrlDown()") == 0) {
SbBool wasdown = coinev->wasCtrlDown();
PRIVATE(this)->varstring = SbStringConvert::toString<bool>(wasdown);
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "wasAltDown()") == 0) {
SbBool wasdown = coinev->wasAltDown();
PRIVATE(this)->varstring = SbStringConvert::toString<bool>(wasdown);
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "getState()") == 0 && coinev->isOfType(SoButtonEvent::getClassTypeId())) {
const SoButtonEvent * bevent = coin_assert_cast<const SoButtonEvent *>(coinev);
SbString enumname;
SoButtonEvent::enumToString(bevent->getState(), enumname);
PRIVATE(this)->varstring.sprintf("'%s'", enumname.getString());
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "getKey()") == 0 && coinev->isOfType(SoKeyboardEvent::getClassTypeId())) {
const SoKeyboardEvent * kbevent = coin_assert_cast<const SoKeyboardEvent *>(coinev);
SbString enumname;
SoKeyboardEvent::enumToString(kbevent->getKey(), enumname);
PRIVATE(this)->varstring.sprintf("'%s'", enumname.getString());
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "getPrintableCharacter()") == 0 && coinev->isOfType(SoKeyboardEvent::getClassTypeId())) {
const SoKeyboardEvent * kbevent = coin_assert_cast<const SoKeyboardEvent *>(coinev);
char printable = kbevent->getPrintableCharacter();
PRIVATE(this)->varstring.sprintf("'%c'", printable);
return PRIVATE(this)->varstring.getString();
}
else if (strcmp(subkey, "getButton()") == 0 && coinev->isOfType(SoMouseButtonEvent::getClassTypeId())) {
const SoMouseButtonEvent * mbevent = coin_assert_cast<const SoMouseButtonEvent *>(coinev);
SbString enumname;
SoMouseButtonEvent::enumToString(mbevent->getButton(), enumname);
PRIVATE(this)->varstring.sprintf("'%s'", enumname.getString());
//.........这里部分代码省略.........