Explodes a vector object or objects to smaller parts. This function is available in the LEADTOOLS Vector Imaging Toolkit.
#include "ltwrappr.h"
L_INT LVectorObject::ExplodeObject(dwFlags)
Flag that indicates which objects to explode. Possible values are:
Value | Meaning |
---|---|
0 | Explode all objects. |
VECTOR_FLAGS_EXPLODE_TO_LINES | Explode objects into lines. |
Value | Meaning |
---|---|
SUCCESS | The function was successful. |
< 1 | An error occurred. Refer to Return Codes. |
If the VECTOR_FLAGS_EXPLODE_TO_LINES flag is not specified, then not all objects can be exploded, for example an attempt to explode a VECTOR_LINE has no effect and returns SUCCESS.
Below is a list of object types and the objects into which they explode:
Object type | After LVectorObject::ExplodeObject |
---|---|
VECTOR_ARC | Same. |
VECTOR_CHORD | Same. |
VECTOR_CIRCLE | Same. |
VECTOR_ELLIPSE | Same. |
VECTOR_ELLIPTICALARC | Same. |
VECTOR_LINE | Same. |
VECTOR_PIE | Same. |
VECTOR_POLYBEZIER | Same. |
VECTOR_POLYDRAW | Same. |
VECTOR_POLYGON | Same. |
VECTOR_POLYLINE | nPointCount of VECTOR_LINE's. |
VECTOR_RASTER | Same. |
VECTOR_RECTANGLE | 4 VECTOR_LINE's. |
VECTOR_TEXT | Same. |
VECTOR_VERTEX | Same. |
Note that exploding an object can convert the object into a different type. For example, exploding a VECTOR_RECTANGLE will result in four VECTOR_LINE objects. The original vector object no longer exists. Therefore, exploding a valid LVectorRectangle object invalidates the LVectorRectangle object.
To deteremine the validity of an object, call LVectorObject::IsValid.
This example will
class LMyVectorLayer2: public LVectorLayer
{
public:
LVectorBase *m_pVectorDst;
public:
LMyVectorLayer2() {};
virtual ~LMyVectorLayer2(){};
virtual L_INT EnumObjectsCallBack(pVECTORHANDLE pVector, pVECTOROBJECT pObject);
};
L_INT LMyVectorLayer2::EnumObjectsCallBack(pVECTORHANDLE pVector, pVECTOROBJECT pObject)
{
UNREFERENCED_PARAMETER(pVector);
L_TCHAR *pszMsg = TEXT("");
switch (pObject->nType)
{
case VECTOR_LINE:
pszMsg = TEXT("Vector Line");
break;
case VECTOR_RECTANGLE :
pszMsg = TEXT("Vector Rectangle");
break;
case VECTOR_POLYLINE:
pszMsg = TEXT("Vector Polyline");
break;
}
MessageBox(NULL, pszMsg, TEXT(""), MB_OK);
return SUCCESS ;
}
//LVectorObject::ExplodeObject()
//LVectorObject::IsValid()
//
//Example81
// This example will
// 1. Create new image of one polyline
// 2. Explode the polyline
// 3. Enumerate the new objects
L_INT LVectorObject__ExplodeObjectExample(HWND hWnd, LVectorBase *pVector)
{
UNREFERENCED_PARAMETER(hWnd);
L_INT nRet;
LMyVectorLayer2 VectorLayer;
VECTORLAYERDESC LayerDesc;
//Create and add a new layer
nRet = VectorLayer.GetLayerDesc(&LayerDesc);
if(nRet != SUCCESS)
return nRet;
lstrcpy(LayerDesc.szName, TEXT("Layer One"));
nRet = VectorLayer.SetLayerDesc(&LayerDesc);
if(nRet != SUCCESS)
return nRet;
nRet = pVector->AddLayer(&VectorLayer);
if(nRet != SUCCESS)
return nRet;
//Create a polyline object
VECTORPOLYLINE PolyLine;
VECTORPOINT Points[4] = { 50, 50, 0, 0,
80, 50, 0, 0,
80, 80, 0, 0,
50, 80, 0, 0
};
PolyLine.nPointCount = 4;
PolyLine.Point = Points;
PolyLine.Pen.nSize = sizeof( VECTORPEN );
PolyLine.Pen.bExtPen = FALSE;
PolyLine.Pen.NewPen.LogPen.lopnStyle = PS_SOLID;
PolyLine.Pen.NewPen.LogPen.lopnWidth.x = 10;
PolyLine.Pen.NewPen.LogPen.lopnWidth.y = 10;
PolyLine.Pen.NewPen.LogPen.lopnColor = RGB(0,255,0);
LVectorPolyLine VectorPolyLine(&PolyLine);
//Add polyline to layer
nRet = VectorLayer.AddObject(&VectorPolyLine);
if(nRet != SUCCESS)
return nRet;
//Enumerate objects--should get one polyline
nRet = VectorLayer.EnumObjects();
if(nRet != SUCCESS)
return nRet;
//Enumerate objects--should get three lines
nRet = VectorLayer.EnumObjects();
if(nRet != SUCCESS)
return nRet;
return SUCCESS;
}