Skip to content

Commit 5a38ee1

Browse files
committed
Dessin des textes
1 parent 06ba828 commit 5a38ee1

19 files changed

+429
-88
lines changed

IGNMap/Builds/LinuxMakefile/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ ifeq ($(CONFIG),Debug)
3939
TARGET_ARCH :=
4040
endif
4141

42-
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_PROJUCER_VERSION=0x8000a" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_MODAL_LOOPS_PERMITTED=1" "-DTINYEXIF_NO_XMP_SUPPORT=1" "-DOPJ_STATIC=1" "-DLASZIPDLL_EXPORTS=1" "-DJUCE_WEB_BROWSER=0" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags $(shell ($(PKG_CONFIG) --exists webkit2gtk-4.1 && echo webkit2gtk-4.1) || echo webkit2gtk-4.0) freetype2 fontconfig gl libcurl gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../JUCE/modules -I./../../../libwebp-1.3.2 -I./../../../protozero/include -I./../../../vtzero/include $(CPPFLAGS)
42+
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_PROJUCER_VERSION=0x8000b" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_MODAL_LOOPS_PERMITTED=1" "-DTINYEXIF_NO_XMP_SUPPORT=1" "-DOPJ_STATIC=1" "-DLASZIPDLL_EXPORTS=1" "-DJUCE_WEB_BROWSER=0" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags $(shell ($(PKG_CONFIG) --exists webkit2gtk-4.1 && echo webkit2gtk-4.1) || echo webkit2gtk-4.0) freetype2 fontconfig gl libcurl gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../JUCE/modules -I./../../../libwebp-1.3.2 -I./../../../protozero/include -I./../../../vtzero/include $(CPPFLAGS)
4343
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
4444
JUCE_TARGET_APP := IGNMap
4545

@@ -60,7 +60,7 @@ ifeq ($(CONFIG),Release)
6060
TARGET_ARCH :=
6161
endif
6262

63-
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_PROJUCER_VERSION=0x8000a" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_MODAL_LOOPS_PERMITTED=1" "-DTINYEXIF_NO_XMP_SUPPORT=1" "-DOPJ_STATIC=1" "-DLASZIPDLL_EXPORTS=1" "-DJUCE_WEB_BROWSER=0" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags $(shell ($(PKG_CONFIG) --exists webkit2gtk-4.1 && echo webkit2gtk-4.1) || echo webkit2gtk-4.0) freetype2 fontconfig gl libcurl gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../JUCE/modules -I./../../../libwebp-1.3.2 -I./../../../protozero/include -I./../../../vtzero/include $(CPPFLAGS)
63+
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_PROJUCER_VERSION=0x8000b" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_MODAL_LOOPS_PERMITTED=1" "-DTINYEXIF_NO_XMP_SUPPORT=1" "-DOPJ_STATIC=1" "-DLASZIPDLL_EXPORTS=1" "-DJUCE_WEB_BROWSER=0" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags $(shell ($(PKG_CONFIG) --exists webkit2gtk-4.1 && echo webkit2gtk-4.1) || echo webkit2gtk-4.0) freetype2 fontconfig gl libcurl gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../JUCE/modules -I./../../../libwebp-1.3.2 -I./../../../protozero/include -I./../../../vtzero/include $(CPPFLAGS)
6464
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
6565
JUCE_TARGET_APP := IGNMap
6666

IGNMap/Source/GeoBase.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,13 @@ bool GeoLAS::ReadAttributes(std::vector<std::string>& Att)
423423
Att.push_back("Zmin"); Att.push_back(std::to_string(Zmin()));
424424
Att.push_back("Zmax"); Att.push_back(std::to_string(Zmax()));
425425
if (m_bCopc) { // Fichier COPC
426+
juce::int64 gpsMinTime = (juce::int64)m_CopcReader.GpsTimeMin() + (juce::int64)1000000000.;
427+
juce::int64 gpsMaxTime = (juce::int64)m_CopcReader.GpsTimeMax() + (juce::int64)1000000000.;
428+
juce::Time origin(1980, 0, 6, 0, 0);
429+
juce::Time minTime(origin.toMilliseconds() + gpsMinTime * (juce::int64)1000);
430+
juce::Time maxTime(origin.toMilliseconds() + gpsMaxTime * (juce::int64)1000);
431+
Att.push_back("GPS Time Min"); Att.push_back(minTime.formatted("%Y/%m/%d %H:%M:%S").toStdString());
432+
Att.push_back("GPS Time Max"); Att.push_back(maxTime.formatted("%Y/%m/%d %H:%M:%S").toStdString());
426433
Att.push_back("COPC spacing"); Att.push_back(std::to_string(m_CopcReader.m_dSpacing));
427434
Att.push_back("COPC level"); Att.push_back(std::to_string(m_CopcReader.MaxLevel()));
428435
}

IGNMap/Source/MainComponent.cpp

Lines changed: 20 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@
3434
//==============================================================================
3535
MainComponent::MainComponent()
3636
{
37-
//Test();
38-
3937
m_MapView.reset(new MapView("View1"));
4038
addAndMakeVisible(m_MapView.get());
4139
m_MapView.get()->SetGeoBase(&m_GeoBase);
@@ -249,7 +247,9 @@ juce::PopupMenu MainComponent::getMenuForIndex(int menuIndex, const juce::String
249247
menu.addCommandItem(&m_CommandManager, CommandIDs::menuToolZoom);
250248
menu.addCommandItem(&m_CommandManager, CommandIDs::menuToolPanoramax);
251249
menu.addCommandItem(&m_CommandManager, CommandIDs::menuToolStereo);
250+
#ifdef DEBUG
252251
menu.addItem(1000, "Test");
252+
#endif // DEBUG
253253
}
254254
else if (menuIndex == 3)
255255
{
@@ -888,10 +888,13 @@ void MainComponent::actionListenerCallback(const juce::String& message)
888888
m_ImageViewer.get()->SetBase(&m_GeoBase);
889889
}
890890
if (T[0] == "Properties") {
891-
if (T.size() < 1)
891+
if (T.size() < 2)
892892
return;
893-
int index = T[1].getIntValue();
894-
ShowProperties((uint32_t)index);
893+
int index = T[2].getIntValue();
894+
if (T[1] == "Object")
895+
ShowProperties((uint32_t)index, true);
896+
if (T[1] == "Class")
897+
ShowProperties((uint32_t)index, false);
895898
}
896899
}
897900

@@ -1018,7 +1021,7 @@ void MainComponent::RunCommandLine()
10181021
if (C != nullptr) {
10191022
if (C->NbVector() == 1) {
10201023
m_GeoBase.SelectFeature(C->Vector((uint32_t)0));
1021-
ShowProperties(0);
1024+
ShowProperties(0, true);
10221025
}
10231026
}
10241027
}
@@ -1053,7 +1056,7 @@ bool MainComponent::ShowHideSidePanel()
10531056
//==============================================================================
10541057
void MainComponent::AboutIGNMap()
10551058
{
1056-
juce::String version = "0.1.2";
1059+
juce::String version = "0.1.3";
10571060
juce::String info = "Compilation : " + juce::String(__DATE__) + ", " + juce::String(__TIME__);
10581061
juce::String message = "IGNMap 3 Version : " + version + "\n\n" + info + "\n\n";
10591062
message += "JUCE Version : " + juce::String(JUCE_MAJOR_VERSION) + "."
@@ -1544,6 +1547,8 @@ void MainComponent::ShowHidePanel(juce::Component* component)
15441547
//==============================================================================
15451548
void MainComponent::Test()
15461549
{
1550+
AddMvtServer("https://data.geopf.fr/tms/1.0.0/IGNF_NUAGES-DE-POINTS-LIDAR-HD-produit", "pbf", "", 256, 256, 16);
1551+
15471552
/* Creation d'un differentiel MNS*/
15481553
/*
15491554
XFrame F = m_MapView.get()->GetViewFrame();
@@ -1758,34 +1763,6 @@ void MainComponent::Test()
17581763
return;
17591764
*/
17601765

1761-
/* Connexion Panoramax */
1762-
XGeoPref pref;
1763-
XFrame F, geoF = XGeoProjection::FrameGeo(pref.Projection());
1764-
pref.ConvertDeg(XGeoProjection::RGF93, pref.Projection(), geoF.Xmin, geoF.Ymin, F.Xmin, F.Ymin);
1765-
pref.ConvertDeg(XGeoProjection::RGF93, pref.Projection(), geoF.Xmax, geoF.Ymax, F.Xmax, F.Ymax);
1766-
1767-
std::string url = "https://panoramax.ign.fr/api/map";
1768-
std::string ext = "mvt";
1769-
std::string style = "https://panoramax.ign.fr/api/map/style.json";
1770-
int zoom = 15;
1771-
1772-
//std::string url = "data.geopf.fr/tms/1.0.0/PCI";
1773-
//std::string ext = "pbf";
1774-
//std::string style = "https://data.geopf.fr/annexes/ressources/vectorTiles/styles/PCI/pci.json";
1775-
MvtLayer* mvt = new MvtLayer(url, ext, 256, 256, zoom);
1776-
mvt->SetFrame(F);
1777-
mvt->LoadStyle(style);
1778-
if (!GeoTools::RegisterObject(&m_GeoBase, mvt, "MVT", "MVT", url)) {
1779-
delete mvt;
1780-
return;
1781-
}
1782-
1783-
m_MapView.get()->SetFrame(m_GeoBase.Frame());
1784-
m_MapView.get()->RenderMap(false, true, false, false, false, true);
1785-
m_ImageViewer.get()->SetBase(&m_GeoBase);
1786-
return;
1787-
1788-
17891766
/*
17901767
juce::String filename;
17911768
if (filename.isEmpty())
@@ -1830,10 +1807,14 @@ void MainComponent::Test()
18301807
//==============================================================================
18311808
// Affiche les proprietes d'un objet
18321809
//==============================================================================
1833-
void MainComponent::ShowProperties(uint32_t index)
1810+
void MainComponent::ShowProperties(uint32_t index, bool typeVector)
18341811
{
1835-
XGeoVector* V = m_GeoBase.Selection(index);
1836-
if (V == nullptr)
1812+
XGeoObject* obj = nullptr;
1813+
if (typeVector)
1814+
obj = m_GeoBase.Selection(index);
1815+
else
1816+
obj = m_GeoBase.Class(index);
1817+
if (obj == nullptr)
18371818
return;
18381819
ObjectViewer* viewer = nullptr;
18391820
for (size_t i = 0; i < m_ToolWindows.size(); i++) {
@@ -1849,7 +1830,7 @@ void MainComponent::ShowProperties(uint32_t index)
18491830
viewer->setVisible(true);
18501831
m_ToolWindows.push_back(viewer);
18511832
}
1852-
viewer->SetSelection(V);
1833+
viewer->SetSelection(obj);
18531834
}
18541835

18551836
//==============================================================================

IGNMap/Source/MainComponent.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ class MainComponent : public juce::Component,
164164

165165
void Test();
166166
ToolWindow* OpenTool(juce::String toolName);
167-
void ShowProperties(uint32_t index);
167+
void ShowProperties(uint32_t index, bool typeVector);
168168
void OpenPanoramax();
169169

170170
void Synchronize();

IGNMap/Source/MapThread.cpp

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ bool MapThread::DrawVectorClass(XGeoClass* C)
308308
g.fillPath(m_Path);
309309
}
310310
m_Path.clear();
311-
DrawText(&g, V);
311+
DrawText(&g, V, R);
312312
}
313313
}
314314

@@ -381,14 +381,33 @@ bool MapThread::DrawGeometry(XGeoVector* V)
381381
//==============================================================================
382382
// Dessin des textes associes aux geometries
383383
//==============================================================================
384-
bool MapThread::DrawText(juce::Graphics* g, XGeoVector* V)
384+
bool MapThread::DrawText(juce::Graphics* g, XGeoVector* V, XGeoRepres* R)
385385
{
386386
if (V->Name().empty())
387387
return false;
388388
XPt2D P = V->Frame().Center();
389389
int X = (int)((P.X - m_dX0) / m_dGsd) + 5;
390390
int Y = (int)((m_dY0 - P.Y) / m_dGsd) - 5;
391-
g->drawSingleLineText(V->Name(), X, Y);
391+
392+
juce::Path textPath;
393+
juce::GlyphArrangement glyphs;
394+
juce::PathStrokeType strokeHaloType(2.5f);
395+
396+
if (R->Font().empty()) {
397+
glyphs.addLineOfText(g->getCurrentFont(), V->Name(), X, Y);
398+
}
399+
else {
400+
juce::Font font(juce::FontOptions(R->Font(), R->FontSize(), juce::Font::plain));
401+
glyphs.addLineOfText(font, V->Name(), X, Y);
402+
}
403+
404+
glyphs.createPath(textPath);
405+
g->setOpacity(1.f);
406+
g->setColour(juce::Colour(R->FillColor()));
407+
g->strokePath(textPath, strokeHaloType);
408+
g->setColour(juce::Colour(R->Color()));
409+
g->fillPath(textPath);
410+
392411
return true;
393412
}
394413

IGNMap/Source/MapThread.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class MapThread : public juce::Thread {
6565

6666
bool DrawVectorClass(XGeoClass* C);
6767
bool DrawGeometry(XGeoVector* V);
68-
bool DrawText(juce::Graphics* g, XGeoVector* V);
68+
bool DrawText(juce::Graphics* g, XGeoVector* V, XGeoRepres* R);
6969
bool DrawCentroide(XGeoVector* G);
7070
bool DrawPoint(XGeoVector* G);
7171
bool DrawPolyline(XGeoVector* G);

0 commit comments

Comments
 (0)