MediaWiki API result

This is the HTML representation of the JSON format. HTML is good for debugging, but is unsuitable for application use.

Specify the format parameter to change the output format. To see the non-HTML representation of the JSON format, set format=json.

See the complete documentation, or the API help for more information.

{
    "batchcomplete": "",
    "continue": {
        "gapcontinue": "Release_1.0_Notes",
        "continue": "gapcontinue||"
    },
    "warnings": {
        "main": {
            "*": "Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes."
        },
        "revisions": {
            "*": "Because \"rvslots\" was not specified, a legacy format has been used for the output. This format is deprecated, and in the future the new format will always be used."
        }
    },
    "query": {
        "pages": {
            "31": {
                "pageid": 31,
                "ns": 0,
                "title": "Refactoring of Mapper Architecture",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "__NOTOC__\n== Migration guide ==\nThe general description of the rendering pipeline and the integration of MITK into the VTK rendering concept can be found here http://docs.mitk.org/nightly/QVTKRendering.html . MITK supports both VTK and OpenGL rendering. VTK forms an abstract layer above the graphics language (e.g. OpenGL) and ensures cross-platform portability, thus it is desirable to port the exisiting GL-based mapper to VTK. This will be done in a later scope of this plattform project and is not concerned in the following description.\n\n\n=== Outdated mapper architecture ===\n\nBy the help of mappers, the input data is transformed to tangible primitives, such as surfaces, points, lines, etc. In Mitk, mitk::Mapper is the base class of all mappers, both Vtk as well as OpenGL mappers. Subclasses of mitk::Mapper control the creation of rendering primitives. \n\nSo far, the (now obsolete) structure of the mapper architecture does not follow one clear concept. The differentiation between 2D and 3D mapper becomes obsolete since their classes have never encapsulated common functionalities. It might be desirable to merge 2D and 3D mappers in the future, i.e. not providing extra classes for 2D and 3D mappers of the same data node (such as points, surfaces etc.). However, to merge all mappers is beyond the scope of this project. \n\n[[File:Development$$Refactoring_of_Mapper_Architecture$old_architecture.png]]\n\n\n=== New mapper architecture ===\n\n[[File:Development$$Refactoring_of_Mapper_Architecture$new_architecture.png]]\n\n\n=== Applied Changes ===\n\nThe base architecture of the mapper super classes has been refactored in order to simplify the existing class structure. Furthermore, the rules for inheriting methods are not consistent and some methods should not be used in MITK at all.\n\nThe following issues have to be dealt with:\n\n1. Introduction of new classes mitk::VtkMapper and mitk::GLMapper. The classes mitk::Mapper2D, mitk::Mapper3D are removed and the classes mitk::VtkMapper2D, mitk::VtkMapper3D and mitkGLMapper2D are marked as deprecated.\n\n2. MitkRenderOpaqueGeometry(), MitkRenderTranslucentGeometry(), MitkRenderVolumetricGeometry(), MitkRenderOverlay() are part of the new base class mitk::VtkMapper. They are automatically inherited in the subclasses of VtkMapper and do not need to be individually reimplemented any longer in each (Vtk)mapper. In the GLMappers, those functions are not needed any longer since their only purpose was to call the Paint() function. Instead, a common function MitkRender() is used therefore.\n\n3. GenerateData() is marked as deprecated. Usage of this method will throw a warning.\n\n4. ApplyProperties() has been renamed to ApplyColorAndOpacityProperties ()\n\n5. The following functions of class mitk::Mapper are only convenience functions and thus marked as deprecated:\n\n* <syntaxhighlight enclose=\"none\" lang=\"cpp\">BaseData* GetData() const;</syntaxhighlight>\n* <syntaxhighlight enclose=\"none\" lang=\"css\">virtual bool GetColor(float rgb[3], BaseRenderer* renderer, const char* name = \"color\") const;</syntaxhighlight>\n* <syntaxhighlight enclose=\"none\" lang=\"css\">virtual bool GetVisibility(bool &visible, BaseRenderer* renderer, const char* name = \"visible\") const;</syntaxhighlight>\n* <syntaxhighlight enclose=\"none\" lang=\"css\">virtual bool GetOpacity(float &opacity, BaseRenderer* renderer, const char* name = \"opacity\") const;</syntaxhighlight>\n* <syntaxhighlight enclose=\"none\" lang=\"css\">virtual bool GetLevelWindow(LevelWindow &levelWindow, BaseRenderer* renderer, const char* name = \"levelwindow\") const;</syntaxhighlight>\n* <syntaxhighlight enclose=\"none\" lang=\"css\">virtual bool IsVisible(BaseRenderer* renderer, const char* name = \"visible\") const;</syntaxhighlight>\n* <syntaxhighlight enclose=\"none\" lang=\"css\">virtual bool IsVtkBased() const = 0;</syntaxhighlight>\n\n\n<pre>\nNote\nFor temporary backward compatibility, the outdated methods are still available in the interface of mitk::Mapper, but are marked as deprecated. After one whole release cycle those methods will be deleted.\n</pre>\n\n\n=== Step-by-step procedures to replace existing code ===\nWhat do you need to do to take account of the recent changes in the mapper architecture? If you have written your own mapper, you should go through the following list and apply the proposed changes:\n\n1.)    Make your mapper subclass of either mitk::VtkMapper or mitk::GLMapper:\n\n* All former child mapper of mitk::VtkMapper2D and mitk::VtkMapper3D should now inherit from the new class mitk::VtkMapper\n* All former child mapper of mitk::GLMapper2D should now inherit from the new class mitk::GLMapper\n\n2.)    Remove the methods MitkRenderOpaqueGeometry(), MitkRenderTranslucentGeometry(), MitkRenderVolumetricGeometry(), MitkRenderOverlay() in your mapper class(es). The according functionalities are provided by the new super classes\n\n3.)    Do not reimplement the function GenerateData() any longer, use GenerateDataForRenderer() instead. What you basically need to do is to copy the code from GenerateData() to GenerateDataForRenderer(). (In some cases it might not be that simple).\n\n4.)    Replace function call of ApplyProperties(VtkActor * actor, BaseRenderer* renderer) or ApplyProperties(BaseRenderer* renderer) respectively by ApplyColorAndOpacity(BaseRenderer* renderer, VtkActor * actor = NULL). Note that the order of parameter has changed. In the case of a GLMapper you do not need to pass the second argument, since it is not used and NULL by default.\n\n5.)    Do not make use of any of the convenience methods provided by the current mitk::Mapper class :\n{| class=\"wikitable\" width=100% style=\"background-color:#ffffff;\" \n ! Function call (old style) \n !Should be replaced it by  (new style) \n|-\n|<rowstyle=\"mso-yfti-irow:1\"width=\"246px\" style=\"border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|GetData() \n|<width=\"425px\" style=\"border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|GetDataNode()->GetData() \n|-\n|<rowstyle=\"mso-yfti-irow:2\"width=\"246px\" style=\"border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|GetColor(rgb,renderer, \"color\") \n|<width=\"425px\" style=\"border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|GetDataNode()->GetColor(rgb, renderer, \u201ecolor\u201c) \n|-\n|<rowstyle=\"mso-yfti-irow:3\"width=\"246px\" style=\"border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|GetVisibility(visible, renderer, \"visible\") \n|<width=\"425px\" style=\"border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|GetDataNode()->GetVisiblity(visible, renderer, \u201cvisible\u201d) \n|-\n|<rowstyle=\"mso-yfti-irow:4\"width=\"246px\" style=\"border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|GetOpacity(opacity, renderer, \u201copacity\u201d) \n|<width=\"425px\" style=\"border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|GetDataNode()->GetOpacity(opacity, renderer, \u201copacity\u201d) \n|-\n|<rowstyle=\"mso-yfti-irow:5\"width=\"246px\" style=\"border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|GetLevelWindow(levelWindow, renderer, \u201clevelWindow\u201d) \n|<width=\"425px\" style=\"border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|GetDataNode()->GetLevelWindow(levelWindow, renderer, \u201clevelWindow\u201d) \n|-\n|<rowstyle=\"mso-yfti-irow:6\"width=\"246px\" style=\"border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|IsVisible(renderer, \u201cvisible\u201d) \n|<width=\"425px\" style=\"border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|bool visible = true; GetDataNode()->GetVisiblity(visible, renderer, \"visible\"); // further evaluate bool visible \n|-\n|<rowstyle=\"mso-yfti-irow:7;mso-yfti-lastrow:yes\"width=\"246px\" style=\"border:solid windowtext 1.0pt;border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|IsVtkBased() \n|<width=\"425px\" style=\"border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;vertical-align:top\">|VtkMapper*   vtkmapper = dynamic_cast<VtkMapper*>( mapper ); if (vtkmapper){...}\n\n<br />\n[[Category:Development]]"
                    }
                ]
            },
            "62": {
                "pageid": 62,
                "ns": 0,
                "title": "Refactoring of the Geometry Classes",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "__NOTOC__\n== Migration Guide for TimeSlicedGeometry to TimeGeometry ==\nOur geometry-concept has been changed to simplify the use of the geometry. As a first step the TimeSlicedGeometry has been removed. By now, all time information will be stored in a new class named TimeGeometry.\n\nThe old structure is displayed in the image below. The geometry of each BaseData-object, for example an image, has been represented by a Geometry3D-Class. Usually this was not an Geometry3D but an derivated class mostly an TimeSlicedGeometry.  The TimeSlicedGeometry was responsible for managing the geometry for different time points but also provided functions like transformation etc.\n\n\n[[File:Development$$Refactoring_of_the_Geometry_Classes_-_Part_1$geometry_old-structure.png|Media:Development$$Refactoring_of_the_Geometry_Classes_-_Part_1$geometry_old-structure.png|show|larger version|width=\"750\"]]\n\n\nThe geometry-concept has been redesigned.  The new structure is shown in a simplified class diagram below. Now BaseData holds a TimeGeometry which is basically a container for different Geometry3D-Objects for each time point. Since TimeGeometry is just an abstract class the data management is mainly done in a subclass. This is done to be able to support different scenarios.  The biggest change introduced by this new concept is that TimeGeometry does not inherit from Geometry3D. Therefore a cast to Geometry3D is no longer possible. Also TimeGeometry itself does not provide any transformation information. To get the transformation for a BaseData-Object a time point must be specified and the corresponding Geometry3D will contain the transformation.\n\n\n[[File:Development$$Refactoring_of_the_Geometry_Classes_-_Part_1$geometry_new-structure.png|Media:Development$$Refactoring_of_the_Geometry_Classes_-_Part_1$geometry_new-structure.png|show|larger version|width=\"750\"]]\n\n\nMost changes introduced by this redesign of the geometry affect the handling of the BaseData and any class that is derived by it. The next sections will explain how the most important functions which changed can be replaced.\n\n\n== Code replacements ==\nThis section describes how old code can be migrated to the new TimeGeometry-concept.\n\n\n=== GetTimeSlicedGeometry ===\nThis function returned the TimeSlicedGeometry which represent an object. The equivalent function is now GetTimeGeometry which returns the TimeGeometry that represent an object. :\n\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry();\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeGeometry();\n</syntaxhighlight>\n\n\n=== SetGeometry ===\nSince TimeSlicedGeometry has been derived SetGeometry could be used to set the TimeSlicedGeometry for a given object.  Since TimeGeometry does not inheriting from Geometry3D, the new method SetTimeGeometry(..) must be used now.\n\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->SetGeometry(TimeSlicedGeometryObject);\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->SetTimeGeometry(TimeGeometryObject);\n</syntaxhighlight>\n\n\n=== Calculate corresponding time steps for two BaseData-objects ===\nMITK does not use an absolute time definition but define time relative to a zero time point. This zero time point might be different for each object! To calculate the corresponding time steps of two BaseData-objects assumptions about the relation of the zero time points of each objects must be made which is usually to assume that both zero time points represent the same real time point. This is not necessarily the case and a programmer should be aware of this assumption if it is made.  Therefore, the method TimeStepToTimeStep has been removed. To get the same functionality a conversion between two time points must be made.\n\n''''Therefore, the method TimeStepToTimeStep has been removed. To get the same functionality a conversion between two time points must be made. ''''\n\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->TimeStepToTimeStep( data2TimeGeometry, time );\n</syntaxhighlight>\n\n'''New (one possible solution):'''\n\n<syntaxhighlight lang=\"cpp\">\nTimeStepType tS = ... // Will contain the result.\nTimePointType tP = data1->GetTimeGeometry()->TimePointToTimeStep(tS);\ntS = data2->GetTimeGeometry()->TimeStepToTimePoint(tP);\n</syntaxhighlight>\n\n=== Copy Time Geometry from one object to another ===\nSince TimeGeometry does not inherit from Geometry3D the setting/getting has been simplified\n\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->SetGeometry(dynamic_cast<Geometry3D*>(input->GetTimeSlicedGeometry()->Clone().GetPointer()));\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->SetTimeGeometry(input->GetTimeGeometry()->Clone().GetPointer());\n</syntaxhighlight>\n\n\n=== Initialize the geometry of a BaseData-object from another object ===\nSince the basic class of the TimeGeometry is known, the cast is no longer needed.\n\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->Initialize(input->GetPixelType(), *input->GetTimeSlicedGeometry ());\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->Initialize(input->GetPixelType(), *input->GetTimeGeometry());\n</syntaxhighlight>\n\n\n=== Copy the Geometry of one BaseData-object to another one. ===\nInstead of copy the TimeSlicedGeometry copy the TimeGeometry. No cast is needed since the Clone-method will return the right type.\n\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->SetGeometry(dynamic_cast<Geometry3D*>(input->GetTimeSlicedGeometry()->Clone().GetPointer()));\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->SetTimeGeometry(input->GetTimeGeometry()->Clone().GetPointer());\n</syntaxhighlight>\n\n\n=== Get the bounds of a data-object ===\nPrevious it has not been defined if the bounds of a TimeSlicedGeometry contains only the bounds of a specific time point or contain the bounds of all time points. ''''The bounds of the new geometry are defined to include the data of all time steps,'''' e.g. it is guaranteed that the bounds of the TimeGeometry contains the bound of all time steps.  ''''Since the TimeGeometry does not provide a transformation between world and index coordinates, the bounds can be accessed only as bounds in world coordinates.'''' If bounds in index coordinates are necessary then they must either be taken from the time step geometry or the world coordinates must be transformed using a TimeStep geometry.\n\n''' Old: '''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->GetBounds())\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeGeometry()->GetBoundsInWorld())\n</syntaxhighlight>\n\n\n=== Convert a Time Point (Time in ms) into a Time Step ===\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->MSToTimeStep( GetTime() );\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeGeometry()->TimePointToTimeStep( GetTime() );\n</syntaxhighlight>\n\n\n=== Get Number of availible Time Steps ===\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->GetTimeSteps();\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeGeometry()->CountTimeSteps();\n</syntaxhighlight>\n\n\n=== Get Geometry for a specific time step ===\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->GetGeometry3D(timeStep);\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeGeometry()->GetGeometryForTimeStep(timeStep);\n</syntaxhighlight>\n\n\n=== Check if a time step is covered by the Object ===\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->IsValidTime( m_TimeStep )\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata-> GetTimeGeometry()->IsValidTimeStep( m_TimeStep )\n</syntaxhighlight>\n\n\n=== Initialize Evenly Timed TimeGeometry ===\nTo initialize a TimeGeometry the type of the TimeGeometry must be known. If this Type is not known a new TimeGeometry must be created and used. This is a new behavior since there had been only one type of TimeSlicedGeometry.\n\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->InitializeEvenlyTimed(slicedGeometry, m_Dimensions[3]);\n</syntaxhighlight>\n\n'''New with unknown previous TimeGeometry: '''\n\n<syntaxhighlight lang=\"cpp\">\nProportionalTimeGeometry::Pointer timeGeometry = ProportionalTimeGeometry::New();\ntimeGeometry->Initialize(slicedGeometry, m_Dimensions[3]);\ndata->SetTimeGeometry(timeGeometry);\n</syntaxhighlight>\n\n'''New with known previous TimeGeometry: '''\n\n<syntaxhighlight lang=\"cpp\">\ndynamic_cast<ProportionalTimeGeometry *>(data->GetTimeGeometry())->Initialize(slicedGeometry, m_Dimensions[3]);\n</syntaxhighlight>\n\n\n=== Update Time geometry ===\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->UpdateInformation();\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata-> GetTimeGeometry()->Update();\n</syntaxhighlight>\n\n\n=== Test if evenly sliced time geometry ===\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->GetEvenlyTimed()\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\nProportionalTimeGeometry::Pointer timeGeometry = dynamic_cast<ProportionalTimeGeometry>(GetTimeGeometry());\ntimeGeometry != NULL;\n</syntaxhighlight>\n\n\n=== Set Image Geometry on/off ===\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->ImageGeometryOn();\n</syntaxhighlight>\n\n'''New:'''\n\n<syntaxhighlight lang=\"cpp\">\nfor (TimeStepType step = 0; step < data->GetTimeGeometry()->GetNumberOfTimeSteps(); ++step)\n    data->GetTimeGeometry()->GetGeometryForTimeStep(step)->ImageGeometryOn();\n</syntaxhighlight>\n\n\n=== Transform Coordinate with Time Geometry ===\n''''NOT LONGER SUPPORTED, needs to get specific time point''''\n\n'''Old: '''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->WorldToIndex(worldPoint, point);\n</nowiki>\n\n'''New: '''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeGeometry()->GetGeometryForTimeStep(timeStep)->WorldToIndex(worldPoint, point);\n</syntaxhighlight>\n\n\n=== Set Transform for Time Geometry ===\nTimeGeometries does no longer have any coordinate transformations. Therefore it is not possible to get these transformations. Instead define a specific time step for getting the transformation.\n\n''' Old: '''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->SetIndexToWorldTransform( affineTransform );\n</syntaxhighlight>\n\n'''New: NO LONGER SUPPORTED, TimeGeometries has no Spacing. Use Geometries instead '''\n\n\n=== Get Origin for Time Geometry ===\nTimeGeometries does no longer have any coordinate transformations. Therefore it is not possible to get these transformations. Instead define a specific time step for getting the transformation.\n\n''' Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->GetOrigin();\n</syntaxhighlight>\n\n''' New: NO LONGER SUPPORTED, TimeGeometries has no Origin. Use Geometries instead'''\n\n\n=== Get Spacing for Time Geometry ===\nTimeGeometries does no longer have any coordinate transformations. Therefore it is not possible to get these transformations. Instead define a specific time step for getting the transformation.  \n\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->GetSpacing();\n</syntaxhighlight>\n\n'''New: NO LONGER SUPPORTED, TimeGeometries has no Spacing. Use Geometries instead '''\n\n\n=== Set a Geometrie for a specific time Step ===\nTimeGeometries does no longer have any coordinate transformations. Therefore it is not possible to get these transformations. Instead define a specific time step for getting the transformation.  \n\n'''Old:'''\n\n<syntaxhighlight lang=\"cpp\">\ndata->GetTimeSlicedGeometry()->Set(geo3, 1);\n</syntaxhighlight>\n\n'''New: Time geometry needs to be casted to child class which supports this function'''\n\n\n\n[[Category:Development]]"
                    }
                ]
            }
        }
    }
}