93 Parameters.
Add_Int(
"NODE_DISPLAY",
94 "DISPLAY_SIZE" ,
_TL(
"Point Size"),
95 _TL(
"Point radius size as number of pixels."),
102 Parameters.
Add_Node (
"NODE_COLORS",
"NODE_RGB" ,
_TL(
"RGB" ),
_TL(
""));
113 #define ADD_CLASS(color, name, value) { CSG_Table_Record &r = *LUT.Add_Record(); r.Set_Value(0, color); r.Set_Value(1, name); r.Set_Value(3, value); r.Set_Value(4, value); }
115 ADD_CLASS(12632256,
"Created, Never Classified" , 0);
119 ADD_CLASS( 54528,
"Medium Vegetation" , 4);
120 ADD_CLASS( 32768,
"High Vegetation" , 5);
122 ADD_CLASS( 16512,
"Low Point (Noise)" , 7);
123 ADD_CLASS(16711808,
"Model Key-Point (Mass Point)", 8);
125 ADD_CLASS(16711935,
"Overlap Points" , 12);
193 m_Stretch.Value = -1;
199 m_Stretch.Scale = 1.;
206 m_Stretch.Scale =
m_Parameters(
"STRETCH_NORMALIZE_FORMAT")->asInt() == 0 ? 1. : 100.;
215 if( m_Stretch.Value < 0 )
257 _Draw_Thumbnail(dc_Map);
277inline void CSG_Map_PointCloud::_Draw_Pixel(
CSG_Map_DC &dc_Map,
int x,
int y,
double z,
int Color)
283 else if( m_Z.is_InGrid(x, y) )
285 switch( m_Aggregation )
288 if( m_N.asInt(x, y) == 0 )
295 if( m_N.asInt(x, y) == 0 || z < m_Z.asDouble(x, y) )
302 if( m_N.asInt(x, y) == 0 || z > m_Z.asDouble(x, y) )
309 m_N.Add_Value(x, y, 1);
316 int x = (int)dc_Map.
xWorld2DC(Point.
x) - m_Symbol.Get_NX() / 2;
317 int y = (int)dc_Map.
yWorld2DC(Point.
y) - m_Symbol.Get_NY() / 2;
319 for(
int iy=0; iy<m_Symbol.Get_NY(); iy++)
for(
int ix=0; ix<m_Symbol.Get_NX(); ix++)
321 if( m_Symbol.asByte(ix, iy) )
323 _Draw_Pixel(dc_Map, x + ix, y + iy, Point.
z, Color);
334void CSG_Map_PointCloud::_Draw_Points(
CSG_Map_DC &dc_Map,
bool bSkipSelection)
338 if( m_Aggregation != 1 )
347 for(
int iy=0, dy=-m_PointSize; iy<m_Symbol.Get_NY(); iy++, dy++)
for(
int ix=0, dx=-m_PointSize; ix<m_Symbol.Get_NX(); ix++, dx++)
349 m_Symbol.Set_Value(ix, iy, sqrt(dx*dx + dy*dy) <= m_PointSize ? 1 : 0);
355 #pragma omp parallel for
363 if( m_Stretch.Value >= 0 && (pPoints->
is_NoData(i, m_Stretch.Value) || (m_Stretch.Normal >= 0 && (pPoints->
is_NoData(i, m_Stretch.Normal) || !pPoints->
Get_Value(i, m_Stretch.Normal)))) )
381 int Color; CSG_String Value;
383 if( pPoints->
Get_Value(i, m_Stretch.Value, Value) &&
m_pSymbology->Get_Class_Color_byValue(Value, Color) )
385 _Draw_Symbol(dc_Map, Point, Color);
390 int Color;
double Value = pPoints->
Get_Value(i, m_Stretch.Value);
if( m_Stretch.Normal >= 0 ) { Value *= m_Stretch.Normal / pPoints->
Get_Value(i, m_Stretch.Normal); }
392 if(
m_pSymbology->Get_Class_Color_byValue(Value, Color) )
394 _Draw_Symbol(dc_Map, Point, Color);
410void CSG_Map_PointCloud::_Draw_Thumbnail(
CSG_Map_DC &dc_Map)
414 CSG_PointCloud *pPoints =
m_pObject->asPointCloud();
421 if( m_Stretch.Value < 0 || (!pPoints->
is_NoData(i, m_Stretch.Value) && (m_Stretch.Normal < 0 || (!pPoints->
is_NoData(i, m_Stretch.Normal) && pPoints->
Get_Value(i, m_Stretch.Normal) != 0.))) )
428 int Color;
double Value = pPoints->
Get_Value(i, m_Stretch.Value);
if( m_Stretch.Normal >= 0 ) { Value *= m_Stretch.Scale / pPoints->
Get_Value(i, m_Stretch.Normal); }
430 if(
m_pSymbology->Get_Class_Color_byValue(Value, Color) )
bool SG_Data_Type_is_Numeric(TSG_Data_Type Type)
virtual bool is_Valid(void) const
bool Draw_Image_Begin(double Transparency, Mode Mode=Mode::Transparent)
double yWorld2DC(double y, bool bRound=true)
const CSG_Rect & rWorld(void) const
double xWorld2DC(double x, bool bRound=true)
const wxRect & rDC(void) const
void Draw_Image_Pixel(int x, int y, int Color)
bool Draw_Image_End(void)
virtual bool Parameters_Changed(void)
bool Set_Fields_Choice(CSG_Parameter &Choice, bool bNumeric, bool bAddNone, bool bSelectNone=false)
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 Parameters_Changed(void)
virtual bool Parameter_Changed(CSG_Parameters &Parameters, CSG_Parameter &Parameter, int Flags)
virtual bool DataObject_Changed(void)
virtual void On_Draw(CSG_Map_DC &dc_Map, int Flags)
virtual bool Add_Parameters(CSG_Parameters &Parameters)
CSG_Map_PointCloud(CSG_PointCloud *pPointCloud=NULL)
bool asImage(CSG_Grid *pImage)
CSG_Parameter * Add_Choice(const CSG_String &ParentID, const CSG_String &ID, const CSG_String &Name, const CSG_String &Description, const CSG_String &Items, int Default=0)
bool Create(const CSG_Parameters &Parameters)
CSG_Parameter * Add_Int(const CSG_String &ParentID, const CSG_String &ID, const CSG_String &Name, const CSG_String &Description, int Value=0, int Minimum=0, bool bMinimum=false, int Maximum=0, bool bMaximum=false)
CSG_Parameter * Add_Node(const CSG_String &ParentID, const CSG_String &ID, const CSG_String &Name, const CSG_String &Description, bool bCollapsed=false)
virtual bool is_NoData(int Field) const
sLong Get_Point(const CSG_Point &Point, double Epsilon=0.)
virtual double Get_Value(int Field) const
virtual bool is_Selected(sLong Index) const
bool Contains(double x, double y) const
static CSG_String Format(const char *Format,...)
sLong Get_Count(void) const
virtual bool Del_Records(void)
TSG_Data_Type Get_Field_Type(int Field) const
virtual bool Set_Field_Type(int Field, TSG_Data_Type Type)
@ SG_DATAOBJECT_TYPE_PointCloud
#define LAYER_DRAW_FLAG_THUMBNAIL
#define LAYER_DRAW_FLAG_NOEDITS
#define ADD_CLASS(color, name, value)
#define PARAMETER_CHECK_ENABLE
#define PARAMETER_CHECK_VALUES
#define PARAMETER_CHECK_ALL