DataObject::DataObject(const QString & name, vtkDataSet * dataSet) : d_ptr{ std::make_unique<DataObjectPrivate>(*this, name, dataSet) } { setObjectName(name); if (dataSet) { connectObserver("dataChanged", *dataSet, vtkCommand::ModifiedEvent, *this, &DataObject::signal_dataChanged); connectObserver("attributeArraysChanged", *dataSet->GetPointData(), vtkCommand::ModifiedEvent, *this, &DataObject::signal_attributeArraysChanged); connectObserver("attributeArraysChanged", *dataSet->GetCellData(), vtkCommand::ModifiedEvent, *this, &DataObject::signal_attributeArraysChanged); connectObserver("attributeArraysChanged", *dataSet->GetFieldData(), vtkCommand::ModifiedEvent, *this, &DataObject::signal_attributeArraysChanged); bool resetName = true; auto fieldData = dataSet->GetFieldData(); if (auto nameArray = fieldData->GetAbstractArray(nameAttributeName())) { const auto storedName = vtkArrayToQString(*nameArray); resetName = name != storedName; } if (resetName) { fieldData->RemoveArray(nameAttributeName()); vtkSmartPointer<vtkCharArray> newArray = qstringToVtkArray(name); newArray->SetName(nameAttributeName()); fieldData->AddArray(newArray); } } }
xmlNode* AddArray(xmlNode* parent, const char* id, const FloatList& values, float lengthFactor) { size_t valueCount = values.size(); globalSBuilder.clear(); globalSBuilder.reserve(valueCount * FLOAT_STR_ESTIMATE); FUStringConversion::ToString(globalSBuilder, values, lengthFactor); return AddArray(parent, id, DAE_FLOAT_ARRAY_ELEMENT, globalSBuilder.ToCharPtr(), valueCount); }
xmlNode* AddArray(xmlNode* parent, const char* id, const FloatList& values) { size_t valueCount = values.size(); FUSStringBuilder builder; builder.reserve(valueCount * FLOAT_STR_ESTIMATE); FUStringConversion::ToString(builder, values); return AddArray(parent, id, DAE_FLOAT_ARRAY_ELEMENT, builder.ToCharPtr(), valueCount); }
xmlNode* AddSourceIDRef(xmlNode* parent, const char* id, const StringList& values, const char* parameter) { xmlNode* sourceNode = AddChild(parent, DAE_SOURCE_ELEMENT); AddAttribute(sourceNode, DAE_ID_ATTRIBUTE, id); FUSStringBuilder arrayId(id); arrayId.append("-array"); AddArray(sourceNode, arrayId.ToCharPtr(), values, DAE_IDREF_ARRAY_ELEMENT); xmlNode* techniqueCommonNode = AddChild(sourceNode, DAE_TECHNIQUE_COMMON_ELEMENT); AddAccessor(techniqueCommonNode, arrayId.ToCharPtr(), values.size(), 1, ¶meter, DAE_IDREF_TYPE); return sourceNode; }
xmlNode* AddSourceTangent(xmlNode* parent, const char* id, const FMVector2List& values) { xmlNode* sourceNode = AddChild(parent, DAE_SOURCE_ELEMENT); AddAttribute(sourceNode, DAE_ID_ATTRIBUTE, id); FUSStringBuilder arrayId(id); arrayId.append("-array"); AddArray(sourceNode, arrayId.ToCharPtr(), values, 1.0f); xmlNode* techniqueCommonNode = AddChild(sourceNode, DAE_TECHNIQUE_COMMON_ELEMENT); AddAccessor(techniqueCommonNode, arrayId.ToCharPtr(), values.size(), 2, FUDaeAccessor::XY, DAE_FLOAT_TYPE); return sourceNode; }
xmlNode* AddSourceMatrix(xmlNode* parent, const char* id, const FMMatrix44List& values, float lengthFactor) { xmlNode* sourceNode = AddChild(parent, DAE_SOURCE_ELEMENT); AddAttribute(sourceNode, DAE_ID_ATTRIBUTE, id); FUSStringBuilder arrayId(id); arrayId.append("-array"); AddArray(sourceNode, arrayId.ToCharPtr(), values, lengthFactor); xmlNode* techniqueCommonNode = AddChild(sourceNode, DAE_TECHNIQUE_COMMON_ELEMENT); AddAccessor(techniqueCommonNode, arrayId.ToCharPtr(), values.size(), 16, NULL, DAE_MATRIX_TYPE); return sourceNode; }
xmlNode* AddSourceFloat(xmlNode* parent, const char* id, const FloatList& values, size_t stride, const char** parameters, float lengthFactor) { xmlNode* sourceNode = AddChild(parent, DAE_SOURCE_ELEMENT); AddAttribute(sourceNode, DAE_ID_ATTRIBUTE, id); FUSStringBuilder arrayId(id); arrayId.append("-array"); AddArray(sourceNode, arrayId.ToCharPtr(), values, lengthFactor); xmlNode* techniqueCommonNode = AddChild(sourceNode, DAE_TECHNIQUE_COMMON_ELEMENT); if (stride == 0) stride = 1; AddAccessor(techniqueCommonNode, arrayId.ToCharPtr(), values.size() / stride, stride, parameters, (stride != 16) ? DAE_FLOAT_TYPE : DAE_MATRIX_TYPE); return sourceNode; }
xmlNode* AddArray(xmlNode* parent, const char* id, const StringList& values, const char* arrayType) { size_t valueCount = values.size(); globalSBuilder.reserve(valueCount * 18); // Pulled out of a hat globalSBuilder.clear(); if (valueCount > 0) { StringList::const_iterator itV = values.begin(); globalSBuilder.set(*itV); for (++itV; itV != values.end(); ++itV) { globalSBuilder.append(' '); globalSBuilder.append(*itV); } } return AddArray(parent, id, arrayType, globalSBuilder.ToCharPtr(), valueCount); }
xmlNode* AddArray(xmlNode* parent, const char* id, const FMMatrix44List& values, float lengthFactor) { globalSBuilder.clear(); size_t valueCount = values.size(); globalSBuilder.reserve(valueCount * 16 * FLOAT_STR_ESTIMATE); if (valueCount > 0) { FMMatrix44List::const_iterator itM = values.begin(); FUStringConversion::ToString(globalSBuilder, *itM, lengthFactor); for (++itM; itM != values.end(); ++itM) { globalSBuilder.append(' '); FUStringConversion::ToString(globalSBuilder, *itM, lengthFactor); } } return AddArray(parent, id, DAE_FLOAT_ARRAY_ELEMENT, globalSBuilder.ToCharPtr(), valueCount * 16); }
xmlNode* AddArray(xmlNode* parent, const char* id, const FMVector3List& values, float lengthFactor) { // Reserve the necessary space within the string builder globalSBuilder.clear(); size_t valueCount = values.size(); globalSBuilder.reserve(valueCount * 3 * FLOAT_STR_ESTIMATE); if (valueCount > 0) { // Write out the values FMVector3List::const_iterator itP = values.begin(); FUStringConversion::ToString(globalSBuilder, *itP, lengthFactor); for (++itP; itP != values.end(); ++itP) { globalSBuilder.append(' '); FUStringConversion::ToString(globalSBuilder, *itP, lengthFactor); } } // Create the typed array node. return AddArray(parent, id, DAE_FLOAT_ARRAY_ELEMENT, globalSBuilder.ToCharPtr(), valueCount * 3); }
xmlNode* AddArray(xmlNode* parent, const char* id, const FMVector2List& values) { // Reserve the necessary space within the string builder FUSStringBuilder builder; size_t valueCount = values.size(); builder.reserve(valueCount * 2 * FLOAT_STR_ESTIMATE); if (valueCount > 0) { // Write out the values FMVector2List::const_iterator itP = values.begin(); FUStringConversion::ToString(builder, *itP); for (++itP; itP != values.end(); ++itP) { builder.append(' '); FUStringConversion::ToString(builder, *itP); } } // Create the typed array node. return AddArray(parent, id, DAE_FLOAT_ARRAY_ELEMENT, builder.ToCharPtr(), valueCount * 2); }
xmlNode* AddSourceInterpolation(xmlNode* parent, const char* id, const FUDaeInterpolationList& interpolations) { xmlNode* sourceNode = AddChild(parent, DAE_SOURCE_ELEMENT); AddAttribute(sourceNode, DAE_ID_ATTRIBUTE, id); FUSStringBuilder arrayId(id); arrayId.append("-array"); globalSBuilder.clear(); size_t valueCount = interpolations.size(); if (valueCount > 0) { FUDaeInterpolationList::const_iterator itI = interpolations.begin(); globalSBuilder.append(FUDaeInterpolation::ToString(*itI)); for (++itI; itI != interpolations.end(); ++itI) { globalSBuilder.append(' '); globalSBuilder.append(FUDaeInterpolation::ToString(*itI)); } } AddArray(sourceNode, arrayId.ToCharPtr(), DAE_NAME_ARRAY_ELEMENT, globalSBuilder.ToCharPtr(), valueCount); xmlNode* techniqueCommonNode = AddChild(sourceNode, DAE_TECHNIQUE_COMMON_ELEMENT); const char* parameter = "INTERPOLATION"; AddAccessor(techniqueCommonNode, arrayId.ToCharPtr(), valueCount, 1, ¶meter, DAE_NAME_TYPE); return sourceNode; }
global func AddArray4K(array &aSrc, array &aDst) {return AddArray(aSrc, aDst);}//global func AddArrayItem4K(array &a, int i, v) {return AddArrayItem(a, i, v);}