Skip to content

Commit

Permalink
fix ubuntu basemap rendering bug
Browse files Browse the repository at this point in the history
  • Loading branch information
lixun910 committed Apr 19, 2016
1 parent 9d591ef commit 696eead
Show file tree
Hide file tree
Showing 5 changed files with 240 additions and 167 deletions.
8 changes: 4 additions & 4 deletions BuildTools/ubuntu/build64.sh
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ install_library c-ares-1.10.0 http://c-ares.haxx.se/download/c-ares-1.10.0.tar.g
#########################################################################

LIB_NAME=curl-7.46.0
LIB_CHECKER=libcurl.a1
LIB_CHECKER=libcurl.a
LIB_URL=https://dl.dropboxusercontent.com/u/145979/geoda_libraries/curl-7.46.0.zip
LIB_FILENAME=curl-7.46.0.zip
echo $LIB_NAME
Expand Down Expand Up @@ -573,9 +573,9 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
chmod +x configure
chmod +x install-sh
./configure
#cp -rf $GEODA_HOME/dep/gdal-1.9.2/* .
#cp GDALmake64.opt GDALmake.opt
#make clean
cp -rf $GEODA_HOME/dep/gdal-1.9.2/* .
cp GDALmake64.opt GDALmake.opt
make clean
$MAKER
make install
#cd ogr/ogrsf_frmts/oci
Expand Down
99 changes: 79 additions & 20 deletions Explore/MapNewView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,12 @@ void SliderDialog::OnSliderChange( wxScrollEvent & event )

IMPLEMENT_CLASS(MapCanvas, TemplateCanvas)
BEGIN_EVENT_TABLE(MapCanvas, TemplateCanvas)
#ifdef __linux__
// in Linux, using old paint function without transparency support
EVT_PAINT(TemplateCanvas::OnPaint)
#else
EVT_PAINT(MapCanvas::OnPaint)
#endif
EVT_ERASE_BACKGROUND(TemplateCanvas::OnEraseBackground)
EVT_MOUSE_EVENTS(TemplateCanvas::OnMouseEvent)
EVT_MOUSE_CAPTURE_LOST(TemplateCanvas::OnMouseCaptureLostEvent)
Expand Down Expand Up @@ -216,24 +221,6 @@ MapCanvas::~MapCanvas()
LOG_MSG("Exiting MapCanvas::~MapCanvas");
}

void MapCanvas::resizeLayerBms(int width, int height)
{
deleteLayerBms();
basemap_bm = new wxBitmap(width, height);
layer0_bm = new wxBitmap(width, height, 32);
layer1_bm = new wxBitmap(width, height, 32);
layer2_bm = new wxBitmap(width, height, 32);
final_bm = new wxBitmap(width, height);

layer0_bm->UseAlpha();
layer1_bm->UseAlpha();
layer2_bm->UseAlpha();

layer0_valid = false;
layer1_valid = false;
layer2_valid = false;
}

bool MapCanvas::DrawBasemap(bool flag, int map_type)
{
isDrawBasemap = flag;
Expand Down Expand Up @@ -287,7 +274,6 @@ bool MapCanvas::DrawBasemap(bool flag, int map_type)
return true;
}


void MapCanvas::DrawLayers()
{
if (layerbase_valid && layer2_valid && layer1_valid && layer0_valid)
Expand All @@ -311,6 +297,7 @@ void MapCanvas::DrawLayers()
DrawLayer2();
}

wxWakeUpIdle();
isRepaint = true;
Refresh(true);
}
Expand All @@ -320,11 +307,81 @@ void MapCanvas::DrawLayerBase()
if (isDrawBasemap) {
if (basemap != 0) {
layerbase_valid = basemap->Draw(basemap_bm);
wxWakeUpIdle();
#ifdef __linux__
// trigger to draw again, since it's drawing on ONE bitmap,
// not multilayer with transparency support
layer0_valid = false;
#endif
}
}
}


#ifdef __linux__
void MapCanvas::resizeLayerBms(int width, int height)
{
deleteLayerBms();
basemap_bm = new wxBitmap(width, height);
layer0_bm = new wxBitmap(width, height);
layer1_bm = new wxBitmap(width, height);
layer2_bm = new wxBitmap(width, height);
final_bm = new wxBitmap(width, height);

layerbase_valid = false;
layer0_valid = false;
layer1_valid = false;
layer2_valid = false;
}

void MapCanvas::DrawLayer0()
{
//LOG_MSG("In TemplateCanvas::DrawLayer0");
wxSize sz = GetVirtualSize();
wxMemoryDC dc(*layer0_bm);

dc.SetPen(canvas_background_color);
dc.SetBrush(canvas_background_color);
dc.DrawRectangle(wxPoint(0,0), sz);

if (isDrawBasemap)
dc.DrawBitmap(*basemap_bm, 0, 0);

BOOST_FOREACH( GdaShape* shp, background_shps ) {
shp->paintSelf(dc);
}
if (draw_sel_shps_by_z_val) {
DrawSelectableShapesByZVal(dc);
} else {
DrawSelectableShapes(dc);
}

layer0_valid = true;
layer1_valid = false;
}

// in Linux, following 3 functions will be inherited from TemplateCanvas
//void MapCanvas::DrawLayer1()
//void MapCanvas::DrawLayer2()
//void MapCanvas::OnPaint(wxPaintEvent& event)

#else
void MapCanvas::resizeLayerBms(int width, int height)
{
deleteLayerBms();
basemap_bm = new wxBitmap(width, height);
layer0_bm = new wxBitmap(width, height, 32);
layer1_bm = new wxBitmap(width, height, 32);
layer2_bm = new wxBitmap(width, height, 32);
final_bm = new wxBitmap(width, height);
layer0_bm->UseAlpha();
layer1_bm->UseAlpha();
layer2_bm->UseAlpha();

layer0_valid = false;
layer1_valid = false;
layer2_valid = false;
}

// Draw all solid background, background decorations and unhighlighted
// shapes.
void MapCanvas::DrawLayer0()
Expand Down Expand Up @@ -441,6 +498,8 @@ void MapCanvas::OnPaint(wxPaintEvent& event)
}
event.Skip();
}
#endif


int MapCanvas::GetBasemapType()
{
Expand Down
20 changes: 16 additions & 4 deletions Explore/MapNewView.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,14 +116,26 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver


public:
virtual void resizeLayerBms(int width, int height);
virtual void OnPaint(wxPaintEvent& event);
bool DrawBasemap(bool flag, int map_type);
virtual void DrawLayerBase();
virtual void DrawLayers();
#ifdef __linux__
// in linux, use old style drawing without transparency support
// the commented out functions are inherited from TemplateCanvas class
// TODO will be replace by wxImage drawing code
virtual void resizeLayerBms(int width, int height);
virtual void DrawLayer0();
//virtual void DrawLayer1();
//virtual void DrawLayer2();
//virtual void OnPaint(wxPaintEvent& event);
#else
virtual void resizeLayerBms(int width, int height);
virtual void DrawLayer0();
virtual void DrawLayer1();
virtual void DrawLayer2();
virtual void DrawLayers();
bool DrawBasemap(bool flag, int map_type);
virtual void OnPaint(wxPaintEvent& event);
#endif


virtual void PopulateCanvas();
virtual void VarInfoAttributeChange();
Expand Down
40 changes: 21 additions & 19 deletions GeoDamake.opt
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,35 @@ GeoDa_ROOT = $(GEODA_HOME)/../..

TARGET = GeoDa

CC = gcc
CXX = g++ -Os -arch x86_64
LD = g++ -arch x86_64
CC = /usr/bin/gcc
CXX = /usr/bin/g++
LD = /usr/bin/g++
RM = /bin/rm -f

WXLIBS = $(shell $(GEODA_HOME)/libraries/bin/wx-config --libs xrc,stc,richtext,ribbon,propgrid,aui,gl,html,qa,adv,core,webview,xml,net,base)
WXLIBS = $(shell $(GEODA_HOME)/libraries/bin/wx-config --libs xrc,stc,richtext,ribbon,propgrid,aui,gl,html,webview,qa,adv,core,xml,net,base)
WX_HEADER = $(shell $(GEODA_HOME)/libraries/bin/wx-config --cppflags)

LIBS = $(WXLIBS) \
$(GEODA_HOME)/temp/CLAPACK-3.2.1/blas.a \
$(GEODA_HOME)/temp/CLAPACK-3.2.1/F2CLIBS/libf2c.a \
$(GEODA_HOME)/temp/CLAPACK-3.2.1/lapack.a \
-L/usr/lib -liconv \
-L$(GEODA_HOME)/libraries/lib -lgdal -lcurl \
$(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_thread.a \
$(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_system.a \
$(GEODA_HOME)/libraries/lib/libjson_spirit.a

LIBS = $(WXLIBS) \
$(GEODA_HOME)/temp/CLAPACK-3.2.1/lapack.a \
$(GEODA_HOME)/temp/CLAPACK-3.2.1/libf2c.a \
$(GEODA_HOME)/temp/CLAPACK-3.2.1/blas.a \
$(GEODA_HOME)/temp/CLAPACK-3.2.1/tmglib.a \
$(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_thread.a \
$(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_system.a \
$(GEODA_HOME)/libraries/lib/libjson_spirit.a \
-L$(GEODA_HOME)/libraries/lib -lgdal -lcurl -lcares \
-L/usr/lib/x86_64-linux-gnu -lGL -lGLU -lglut -lrt -lidn -lssl -lrtmp
# Note: Library -lrtmp causes a missing library problem at runtime on
# Ubuntu 14.10 and later.

BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost

GDAL_HEADER = -I$(GEODA_HOME)/libraries/include
GDAL_HEADER = -I$(GEODA_HOME)/libraries/include -I/usr/include

CPPFLAGS = -I$(GeoDa_ROOT) $(USER_LOG)
CFLAGS = -Os -arch x86_64 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER)
CXXFLAGS = -Os -arch x86_64 -Wall $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER)
LDFLAGS = -arch x86_64
CPPFLAGS = -I$(GeoDa_ROOT)
CFLAGS = -O2 -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER)
CXXFLAGS = -O2 $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER)
LDFLAGS =

OBJ_EXT = o

Expand Down
Loading

0 comments on commit 696eead

Please sign in to comment.