ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-3.0/src/selection/SelectionEvaluator.cpp
(Generate patch)

Comparing trunk/OOPSE-3.0/src/selection/SelectionEvaluator.cpp (file contents):
Revision 2102 by tim, Thu Mar 10 16:14:07 2005 UTC vs.
Revision 2116 by tim, Fri Mar 11 15:00:20 2005 UTC

# Line 236 | Line 236 | void SelectionEvaluator::compareProperty(StuntDouble*
236   }
237  
238   void SelectionEvaluator::compareProperty(StuntDouble* sd, BitSet& bs, int property, int comparator, float comparisonValue) {
239 <        double propertyValue;
239 >        double propertyValue = 0.0;
240          switch (property) {
241          case Token::mass:
242              propertyValue = sd->getMass();
243              break;
244          case Token::charge:
245 <            return;
246 <            //break;
247 <        case Token::dipole:
248 <            return;
249 <            //break;
245 >            if (sd->isAtom()){
246 >                Atom* atom = static_cast<Atom*>(sd);
247 >                propertyValue = getCharge(atom);
248 >            } else if (sd->isRigidBody()) {
249 >                RigidBody* rb = static_cast<RigidBody*>(sd);
250 >                RigidBody::AtomIterator ai;
251 >                Atom* atom;
252 >                for (atom = rb->beginAtom(ai); atom != NULL; atom = rb->nextAtom(ai)) {
253 >                    propertyValue+=  getCharge(atom);
254 >                }
255 >            }
256 >            break;
257          default:
258              unrecognizedAtomProperty(property);
259          }
# Line 412 | Line 419 | BitSet SelectionEvaluator::indexInstruction(const boos
419      }
420  
421      return bs;
422 + }
423 +
424 +
425 + double SelectionEvaluator::getCharge(Atom* atom) {
426 +    double charge =0.0;
427 +    AtomType* atomType = atom->getAtomType();
428 +    if (atomType->isCharge()) {
429 +        GenericData* data = atomType->getPropertyByName("Charge");
430 +        if (data != NULL) {
431 +            DoubleGenericData* doubleData= dynamic_cast<DoubleGenericData*>(data);
432 +
433 +            if (doubleData != NULL) {
434 +                charge = doubleData->getData();
435 +
436 +            } else {
437 +                    sprintf( painCave.errMsg,
438 +                           "Can not cast GenericData to DoubleGenericData\n");
439 +                    painCave.severity = OOPSE_ERROR;
440 +                    painCave.isFatal = 1;
441 +                    simError();          
442 +            }
443 +        }
444 +    }
445 +
446 +    return charge;
447   }
448  
449   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines