@@ -1158,3 +1158,96 @@ short int FemPostWarpVectorFilter::mustExecute() const
1158
1158
return App::DocumentObject::mustExecute ();
1159
1159
}
1160
1160
}
1161
+
1162
+
1163
+ // ***************************************************************************
1164
+ // calculator filter
1165
+ PROPERTY_SOURCE (Fem::FemPostCalculatorFilter, Fem::FemPostFilter)
1166
+
1167
+ FemPostCalculatorFilter::FemPostCalculatorFilter()
1168
+ : FemPostFilter()
1169
+ {
1170
+ ADD_PROPERTY_TYPE (FieldName,
1171
+ (" " ),
1172
+ " Calculator" ,
1173
+ App::Prop_None,
1174
+ " Name of the calculated field" );
1175
+ ADD_PROPERTY_TYPE (Function,
1176
+ (" " ),
1177
+ " Calculator" ,
1178
+ App::Prop_None,
1179
+ " Expression of the unction to evaluate" );
1180
+
1181
+ FilterPipeline calculator;
1182
+ m_calculator = vtkSmartPointer<vtkArrayCalculator>::New ();
1183
+ calculator.source = m_calculator;
1184
+ calculator.target = m_calculator;
1185
+ addFilterPipeline (calculator, " calculator" );
1186
+ setActiveFilterPipeline (" calculator" );
1187
+ }
1188
+
1189
+ FemPostCalculatorFilter::~FemPostCalculatorFilter () = default ;
1190
+
1191
+ DocumentObjectExecReturn* FemPostCalculatorFilter::execute ()
1192
+ {
1193
+ printf (" EXECITER\n " );
1194
+ m_calculator->AddCoordinateScalarVariable (" X" , 0 );
1195
+ m_calculator->AddCoordinateScalarVariable (" Y" , 1 );
1196
+ m_calculator->AddCoordinateScalarVariable (" Z" , 2 );
1197
+ // std::string val;
1198
+ // if (Vector.getValue() >= 0) {
1199
+ // val = Vector.getValueAsString();
1200
+ // }
1201
+ //
1202
+ // std::vector<std::string> VectorArray;
1203
+ //
1204
+ // vtkSmartPointer<vtkDataObject> data = getInputData();
1205
+ // vtkDataSet* dset = vtkDataSet::SafeDownCast(data);
1206
+ // if (!dset) {
1207
+ // return StdReturn;
1208
+ // }
1209
+ // vtkPointData* pd = dset->GetPointData();
1210
+ //
1211
+ // // get all vector fields
1212
+ // for (int i = 0; i < pd->GetNumberOfArrays(); ++i) {
1213
+ // if (pd->GetArray(i)->GetNumberOfComponents() == 3) {
1214
+ // VectorArray.emplace_back(pd->GetArrayName(i));
1215
+ // }
1216
+ // }
1217
+ //
1218
+ // App::Enumeration empty;
1219
+ // Vector.setValue(empty);
1220
+ // m_vectorFields.setEnums(VectorArray);
1221
+ // Vector.setValue(m_vectorFields);
1222
+ //
1223
+ // // search if the current field is in the available ones and set it
1224
+ // std::vector<std::string>::iterator it = std::find(VectorArray.begin(), VectorArray.end(),
1225
+ // val); if (!val.empty() && it != VectorArray.end()) {
1226
+ // Vector.setValue(val.c_str());
1227
+ // }
1228
+ //
1229
+ // recalculate the filter
1230
+ return FemPostFilter::execute ();
1231
+ }
1232
+
1233
+ void FemPostCalculatorFilter::onChanged (const Property* prop)
1234
+ {
1235
+ if (prop == &Function) {
1236
+ m_calculator->SetFunction (Function.getValue ());
1237
+ }
1238
+ else if (prop == &FieldName) {
1239
+ m_calculator->SetResultArrayName (FieldName.getValue ());
1240
+ }
1241
+ printf (" FUNCION: %s\n " , m_calculator->GetFunction ());
1242
+ Fem::FemPostFilter::onChanged (prop);
1243
+ }
1244
+
1245
+ short int FemPostCalculatorFilter::mustExecute () const
1246
+ {
1247
+ if (Function.isTouched () || FieldName.isTouched ()) {
1248
+ return 1 ;
1249
+ }
1250
+ else {
1251
+ return FemPostFilter::mustExecute ();
1252
+ }
1253
+ }
0 commit comments