MCPcopy Create free account
hub / github.com/GollyGang/ready / CreateFromImageDataFile

Function CreateFromImageDataFile

src/readybase/SystemFactory.cpp:101–166  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

99// -------------------------------------------------------------------------------------------------------------
100
101unique_ptr<AbstractRD> CreateFromImageDataFile(
102 const char *filename,
103 bool is_opencl_available,
104 int opencl_platform,
105 int opencl_device,
106 Properties &render_settings,
107 bool &warn_to_update)
108{
109 vtkSmartPointer<RD_XMLImageReader> reader = vtkSmartPointer<RD_XMLImageReader>::New();
110 reader->SetFileName(filename);
111 reader->Update();
112 vtkImageData *image = reader->GetOutput();
113
114 if( image == NULL )
115 throw runtime_error("Failed to read image.");
116 if (image->GetPointData() == NULL)
117 throw runtime_error("Image has no point data.");
118 if (image->GetPointData()->GetArray(0) == NULL)
119 throw runtime_error("No arrays in image point data.");
120
121 int data_type = image->GetPointData()->GetArray(0)->GetDataType();
122 string type = reader->GetType();
123 string name = reader->GetName();
124
125 unique_ptr<ImageRD> image_system;
126 if(type=="inbuilt")
127 {
128 if(name=="Gray-Scott")
129 image_system = make_unique<GrayScottImageRD>();
130 else
131 throw runtime_error("Unsupported inbuilt implementation: "+name);
132 }
133 else if(type=="formula")
134 {
135 if(!is_opencl_available)
136 throw runtime_error(OpenCL_utils::GetOpenCLInstallationHints());
137 image_system = make_unique<FormulaOpenCLImageRD>(opencl_platform,opencl_device,data_type);
138 }
139 else if(type=="kernel")
140 {
141 if(!is_opencl_available)
142 throw runtime_error(OpenCL_utils::GetOpenCLInstallationHints());
143 image_system = make_unique<FullKernelOpenCLImageRD>(opencl_platform,opencl_device,data_type);
144 }
145 else throw runtime_error("Unsupported rule type: "+type);
146 image_system->InitializeFromXML(reader->GetRDElement(),warn_to_update);
147
148 // render settings
149 vtkSmartPointer<vtkXMLDataElement> xml_render_settings =
150 reader->GetRDElement()->FindNestedElementWithName("render_settings");
151 if(xml_render_settings) // optional
152 render_settings.OverwriteFromXML(xml_render_settings);
153
154 int dim[3];
155 image->GetDimensions(dim);
156 int nc = image->GetNumberOfScalarComponents() * image->GetPointData()->GetNumberOfArrays();
157 image_system->SetDimensions(dim[0],dim[1],dim[2]);
158 image_system->SetNumberOfChemicals(nc);

Callers 1

CreateFromFileMethod · 0.85

Calls 12

GetDataTypeMethod · 0.80
GetRDElementMethod · 0.80
OverwriteFromXMLMethod · 0.80
UpdateMethod · 0.45
GetTypeMethod · 0.45
GetNameMethod · 0.45
InitializeFromXMLMethod · 0.45
SetDimensionsMethod · 0.45
SetNumberOfChemicalsMethod · 0.45
CopyFromImageMethod · 0.45

Tested by

no test coverage detected