NITFPRIV(cgm_Element*) rectangleClone(NITF_DATA* data, nitf_Error* error) { cgm_RectangleElement *source = NULL, *dest = NULL; cgm_Element* element = NULL; assert(data); source = (cgm_RectangleElement*)data; element = cgm_RectangleElement_construct(error); if (!element) return NULL; dest = (cgm_RectangleElement*)element->data; if (source->attributes) { dest->attributes = cgm_FillAttributes_clone(source->attributes, error); if (!dest->attributes) { cgm_Element_destruct(&element); return NULL; } } if (source->rectangle) { dest->rectangle = cgm_Rectangle_clone(source->rectangle, error); if (!dest->rectangle) { cgm_Element_destruct(&element); return NULL; } } return element; }
NITFPRIV(cgm_Element*) cloneCircle(NITF_DATA* data, nitf_Error* error) { cgm_CircleElement *source = NULL, *dest = NULL; cgm_Element* element = NULL; assert(data); source = (cgm_CircleElement*)data; element = cgm_CircleElement_construct(error); if (!element) return NULL; dest = (cgm_CircleElement*)element->data; dest->centerX = source->centerX; dest->centerY = source->centerY; dest->radius = source->radius; if (source->attributes) { dest->attributes = cgm_FillAttributes_clone(source->attributes, error); if (!dest->attributes) { cgm_Element_destruct(&element); return NULL; } } return element; }
NITFPRIV(cgm_Element*) polyClone(NITF_DATA* data, nitf_Error* error) { cgm_PolyLineElement *source = NULL, *dest = NULL; cgm_Element* element = NULL; assert(data); source = (cgm_PolyLineElement*)data; element = cgm_PolyLineElement_construct(error); if (!element) return NULL; dest = (cgm_PolyLineElement*)element->data; if (source->attributes) { dest->attributes = cgm_LineAttributes_clone(source->attributes, error); if (!dest->attributes) { cgm_Element_destruct(&element); return NULL; } } /* TODO vertices */ return element; }
NITFPRIV(cgm_Element*) ellipticalArcClone(NITF_DATA* data, nitf_Error* error) { cgm_EllipticalArcElement *source = NULL, *dest = NULL; cgm_Element* element = NULL; assert(data); source = (cgm_EllipticalArcElement*)data; element = cgm_EllipticalArcElement_construct(error); if (!element) return NULL; dest = (cgm_EllipticalArcElement*)element->data; dest->centerX = source->centerX; dest->centerY = source->centerY; dest->end1X = source->end1X; dest->end1Y = source->end1Y; dest->end2X = source->end2X; dest->end2Y = source->end2Y; dest->startVectorX = source->startVectorX; dest->endVectorY = source->endVectorY; if (source->attributes) { dest->attributes = cgm_LineAttributes_clone(source->attributes, error); if (!dest->attributes) { cgm_Element_destruct(&element); return NULL; } } return element; }