83 Parameters.
Add_Node(
"NODE_DISPLAY",
"DISPLAY_SHOW" ,
_TL(
"Show" ),
_TL(
""));
84 Parameters.
Add_Bool(
"DISPLAY_SHOW",
"DISPLAY_NODES",
_TL(
"Nodes"),
_TL(
""),
false);
85 Parameters.
Add_Bool(
"DISPLAY_SHOW",
"DISPLAY_EDGES",
_TL(
"Edges"),
_TL(
""),
true);
86 Parameters.
Add_Bool(
"DISPLAY_SHOW",
"DISPLAY_FACES",
_TL(
"Faces"),
_TL(
""),
true);
196 if(
m_Parameters(
"DISPLAY_FACES")->asBool() ) { _Draw_Triangles(dc_Map); }
197 if(
m_Parameters(
"DISPLAY_EDGES")->asBool() ) { _Draw_Edges (dc_Map); }
198 if(
m_Parameters(
"DISPLAY_NODES")->asBool() ) { _Draw_Points (dc_Map); }
208void CSG_Map_TIN::_Draw_Points(
CSG_Map_DC &dc_Map)
219void CSG_Map_TIN::_Draw_Edges(
CSG_Map_DC &dc_Map)
221 for(
int i=0; i<
m_pObject->asTIN()->Get_Edge_Count(); i++)
228 dc_Map.
DrawLine(Point[0].x, Point[0].y, Point[1].x, Point[1].y);
233void CSG_Map_TIN::_Draw_Triangles(
CSG_Map_DC &dc_Map)
237 for(
sLong iTriangle=0; iTriangle<
m_pObject->asTIN()->Get_Triangle_Count(); iTriangle++)
239 CSG_TIN_Triangle *pTriangle =
m_pObject->asTIN()->Get_Triangle(iTriangle);
247 for(
int iNode=0; iNode<3; iNode++)
249 CSG_TIN_Node *pNode = pTriangle->
Get_Node(iNode);
253 p[iNode].x = Point.
x; p[iNode].y = Point.
y; p[iNode].z = 0.;
256 _Draw_Triangle(dc_Map, p);
262 for(
int iNode=0; bOkay && iNode<3; iNode++)
264 CSG_TIN_Node *pNode = pTriangle->
Get_Node(iNode);
double Value;
270 p[iNode].x = Point.
x; p[iNode].y = Point.
y; p[iNode].z = Value;
276 _Draw_Triangle(dc_Map, p);
292#define SORT_POINTS_Y(a, b) if( p[a].y < p[b].y ) { TPoint pp = p[a]; p[a] = p[b]; p[b] = pp; }
293#define SORT_POINTS_X(a, b) if( p[a].x < p[b].x ) { TPoint pp = p[a]; p[a] = p[b]; p[b] = pp; }
295#define DRAW_PIXEL(x, y, z) { int c; if( m_pSymbology->Get_Class_Color_byValue(z, c) ) { dc_Map.Draw_Image_Pixel(x, y, c); } }
298void CSG_Map_TIN::_Draw_Triangle(
CSG_Map_DC &dc_Map, TPoint p[3])
302 if( p[2].y == p[0].y )
304 if( p[0].y >= 0 && p[0].y < dc_Map.
rDC().GetHeight() )
308 if( p[2].x == p[0].x )
310 if( p[0].x >= 0 && p[0].x < dc_Map.
rDC().GetWidth() )
313 ? (p[0].z > p[2].z ? p[0].z : p[2].z)
314 : (p[1].z > p[2].z ? p[1].z : p[2].z)
320 _Draw_Triangle_Line(dc_Map, p[0].x, p[1].x, p[0].y, p[0].z, p[1].z);
321 _Draw_Triangle_Line(dc_Map, p[1].x, p[2].x, p[0].y, p[1].z, p[2].z);
327 else if( !((p[0].y < 0 && p[2].y < 0) || (p[0].y >= dc_Map.
rDC().GetHeight() && p[2].y >= dc_Map.
rDC().GetHeight())) )
329 double dy = p[2].y - p[0].y;
330 double dx_a = (p[2].x - p[0].x) / dy;
331 double dz_a = (p[2].z - p[0].z) / dy;
335 for(
int i=0, j=1; i<2; i++, j++)
337 if( (dy = p[j].y - p[i].y) > 0. )
339 double dx = (p[j].x - p[i].x) / dy;
340 double dz = (p[j].z - p[i].z) / dy;
350 x_a = p[0].x - p[0].y * dx_a;
351 z_a = p[0].z - p[0].y * dz_a;
354 int yn = p[j].y;
if( yn > dc_Map.
rDC().GetHeight() ) { yn = dc_Map.
rDC().GetHeight(); }
356 for( ; y<yn; y++, x+=dx, z+=dz, x_a+=dx_a, z_a+=dz_a)
360 _Draw_Triangle_Line(dc_Map, (
int)x, (
int)x_a, y, z, z_a);
364 _Draw_Triangle_Line(dc_Map, (
int)x_a, (
int)x, y, z_a, z);
373inline void CSG_Map_TIN::_Draw_Triangle_Line(
CSG_Map_DC &dc_Map,
int xa,
int xb,
int y,
double za,
double zb)
387 if( xb >= dc_Map.
rDC().GetWidth() )
389 xb = dc_Map.
rDC().GetWidth() - 1;
392 for(
int x=xa; x<=xb; x++, za+=dz)
397 else if( xa >= 0 && xa < dc_Map.
rDC().GetWidth() )
class CSG_TIN * asTIN(bool bPolymorph=false) const
bool Draw_Image_Begin(double Transparency, Mode Mode=Mode::Transparent)
void DrawCircle(int x, int y, int radius)
const CSG_Rect & rWorld(void) const
void DrawLine(int x1, int y1, int x2, int y2)
const wxRect & rDC(void) const
bool Draw_Image_End(void)
const double & World2DC(void) const
virtual bool Parameters_Changed(void)
bool Set_Fields_Choice(CSG_Parameter &Choice, bool bNumeric, bool bAddNone, bool bSelectNone=false)
bool Get_Field_Value(sLong Index, int Field, int Normalize, double Scale, wxString &Value) const
static int Get_Fields_Choice(CSG_Parameter &Choice)
virtual bool DataObject_Changed(void)
virtual bool Parameter_Changed(CSG_Parameters &Parameters, CSG_Parameter &Parameter, int Flags)
CSG_Data_Object * m_pObject
bool Set_Object(CSG_Data_Object *pObject)
CSG_Rect Get_Extent(void) const
CSG_Parameters m_Parameters
class CSG_Map_Symbology * m_pSymbology
virtual bool Add_Parameters(CSG_Parameters &Parameters)
virtual bool Parameter_Changed(CSG_Parameters &Parameters, CSG_Parameter &Parameter, int Flags)
virtual bool DataObject_Changed(void)
virtual bool Add_Parameters(CSG_Parameters &Parameters)
virtual bool asImage(CSG_Grid *pImage)
CSG_Map_TIN(CSG_TIN *pTIN=NULL)
virtual bool Parameters_Changed(void)
class CSG_Map_TIN::CStretch m_Stretch
virtual void On_Draw(CSG_Map_DC &dc_Map, int Flags)
CSG_Parameter * Add_Node(const CSG_String &ParentID, const CSG_String &ID, const CSG_String &Name, const CSG_String &Description, bool bCollapsed=false)
CSG_Parameter * Add_Bool(const CSG_String &ParentID, const CSG_String &ID, const CSG_String &Name, const CSG_String &Description, bool Value=false)
TSG_Intersection Intersects(const CSG_Rect &Rect) const
CSG_TIN_Node * Get_Node(int iNode)
const TSG_Point & Get_Point(void)
CSG_TIN_Node * Get_Node(int iNode)
const CSG_Rect & Get_Extent(void)
CSG_TIN_Node * Get_Node(sLong Index) const
sLong Get_Index(void) const
#define SORT_POINTS_Y(a, b)
#define DRAW_PIXEL(x, y, z)
#define SORT_POINTS_X(a, b)
#define PARAMETER_CHECK_ENABLE
#define PARAMETER_CHECK_VALUES