@@ -1190,10 +1190,11 @@ FemPostCalculatorFilter::~FemPostCalculatorFilter() = default;
1190
1190
1191
1191
DocumentObjectExecReturn* FemPostCalculatorFilter::execute ()
1192
1192
{
1193
- printf (" EXECITER\n " );
1194
- m_calculator->AddCoordinateScalarVariable (" X" , 0 );
1195
- m_calculator->AddCoordinateScalarVariable (" Y" , 1 );
1196
- m_calculator->AddCoordinateScalarVariable (" Z" , 2 );
1193
+ if (!m_calculator->GetFunction ()) {
1194
+ return StdReturn;
1195
+ }
1196
+ updateAvailableFields ();
1197
+
1197
1198
// std::string val;
1198
1199
// if (Vector.getValue() >= 0) {
1199
1200
// val = Vector.getValueAsString();
@@ -1238,7 +1239,10 @@ void FemPostCalculatorFilter::onChanged(const Property* prop)
1238
1239
else if (prop == &FieldName) {
1239
1240
m_calculator->SetResultArrayName (FieldName.getValue ());
1240
1241
}
1241
- printf (" FUNCION: %s\n " , m_calculator->GetFunction ());
1242
+ else if (prop == &Data) {
1243
+ updateAvailableFields ();
1244
+ }
1245
+ printf (" FUNCION: %s\t %s\n " , m_calculator->GetFunction (), prop->getName ());
1242
1246
Fem::FemPostFilter::onChanged (prop);
1243
1247
}
1244
1248
@@ -1251,3 +1255,43 @@ short int FemPostCalculatorFilter::mustExecute() const
1251
1255
return FemPostFilter::mustExecute ();
1252
1256
}
1253
1257
}
1258
+
1259
+ void FemPostCalculatorFilter::updateAvailableFields ()
1260
+ {
1261
+ printf (" EXECITER\n " );
1262
+ // clear all variables
1263
+ m_calculator->RemoveAllVariables ();
1264
+ m_calculator->AddCoordinateScalarVariable (" X" , 0 );
1265
+ m_calculator->AddCoordinateScalarVariable (" Y" , 1 );
1266
+ m_calculator->AddCoordinateScalarVariable (" Z" , 2 );
1267
+
1268
+ std::vector<std::string> scalars;
1269
+ std::vector<std::string> vectors;
1270
+ // std::vector<std::string> tensors;
1271
+
1272
+ vtkSmartPointer<vtkDataObject> data = getInputData ();
1273
+ vtkDataSet* dset = vtkDataSet::SafeDownCast (data);
1274
+ if (!dset) {
1275
+ return ;
1276
+ }
1277
+ vtkPointData* pd = dset->GetPointData ();
1278
+
1279
+ // get all vector fields
1280
+ for (int i = 0 ; i < pd->GetNumberOfArrays (); ++i) {
1281
+ std::string name1 = pd->GetArrayName (i);
1282
+ std::string name2 = name1;
1283
+ std::replace (name2.begin (), name2.end (), ' ' , ' _' );
1284
+ if (pd->GetArray (i)->GetNumberOfComponents () == 3 ) {
1285
+ // printf("NOMBRE: %s\n", name2.c_str());
1286
+ m_calculator->AddVectorVariable (name2.c_str (), name1.c_str ());
1287
+ // add components as scalar variable
1288
+ m_calculator->AddScalarVariable ((name2 + " _X" ).c_str (), name1.c_str (), 0 );
1289
+ m_calculator->AddScalarVariable ((name2 + " _Y" ).c_str (), name1.c_str (), 1 );
1290
+ m_calculator->AddScalarVariable ((name2 + " _Z" ).c_str (), name1.c_str (), 2 );
1291
+ }
1292
+ else if (pd->GetArray (i)->GetNumberOfComponents () == 1 ) {
1293
+ // printf("NOMBRE SCA: %s\n", name2.c_str());
1294
+ m_calculator->AddScalarVariable (name2.c_str (), name1.c_str ());
1295
+ }
1296
+ }
1297
+ }
0 commit comments