From: <hez...@us...> - 2014-07-03 14:46:22
|
Revision: 13134 http://sourceforge.net/p/plplot/code/13134 Author: hezekiahcarty Date: 2014-07-03 14:46:13 +0000 (Thu, 03 Jul 2014) Log Message: ----------- Switch to a different OCaml Cairo binding ("cairo2" in opam) This is a more actively maintained binding to the Cairo library. It is unfortunately not packaged for Debian at this time so interested users would need to install the library through opam. opam is generally the recommended way to install and manage OCaml libraries (this cpan, pip, etc) so this isn't a particularly serious limitation. Modified Paths: -------------- trunk/bindings/ocaml/plcairo/CMakeLists.txt trunk/bindings/ocaml/plcairo/plcairo.ml trunk/bindings/ocaml/plcairo/plcairo.mli trunk/cmake/modules/ocaml.cmake trunk/examples/ocaml/CMakeLists.txt trunk/examples/ocaml/xgtk_interface.ml Modified: trunk/bindings/ocaml/plcairo/CMakeLists.txt =================================================================== --- trunk/bindings/ocaml/plcairo/CMakeLists.txt 2014-07-03 14:40:58 UTC (rev 13133) +++ trunk/bindings/ocaml/plcairo/CMakeLists.txt 2014-07-03 14:46:13 UTC (rev 13134) @@ -56,7 +56,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/plcairo.cmi # ocamlc *.mli source file must be in ${CMAKE_CURRENT_BINARY_DIR}. COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/plcairo.mli ${CMAKE_CURRENT_BINARY_DIR}/plcairo.mli - COMMAND ${OCAMLFIND} ocamlc -package cairo -c ${CMAKE_CURRENT_BINARY_DIR}/plcairo.mli + COMMAND ${OCAMLFIND} ocamlc -package cairo2 -c ${CMAKE_CURRENT_BINARY_DIR}/plcairo.mli DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/plcairo.mli WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} @@ -74,7 +74,7 @@ # ocamlc and ocamlopt *.ml source file must be in # ${CMAKE_CURRENT_BINARY_DIR}. COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/plcairo.ml ${CMAKE_CURRENT_BINARY_DIR}/plcairo.ml - COMMAND ${OCAMLFIND} ocamlc -package cairo -I ${PATH_TO_PLPLOT_CMA} plplot.cma -c ${CMAKE_CURRENT_BINARY_DIR}/plcairo.ml + COMMAND ${OCAMLFIND} ocamlc -package cairo2 -I ${PATH_TO_PLPLOT_CMA} plplot.cma -c ${CMAKE_CURRENT_BINARY_DIR}/plcairo.ml DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/plcairo.ml ${CMAKE_CURRENT_BINARY_DIR}/plcairo.cmi @@ -118,7 +118,7 @@ # ocamlc and ocamlopt *.ml source file must be in # ${CMAKE_CURRENT_BINARY_DIR}. COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/plcairo.ml ${CMAKE_CURRENT_BINARY_DIR}/plcairo.ml - COMMAND ${OCAMLFIND} ocamlopt -package cairo -I ${PATH_TO_PLPLOT_CMXA} -c ${CMAKE_CURRENT_BINARY_DIR}/plcairo.ml + COMMAND ${OCAMLFIND} ocamlopt -package cairo2 -I ${PATH_TO_PLPLOT_CMXA} -c ${CMAKE_CURRENT_BINARY_DIR}/plcairo.ml DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/plcairo.ml ${CMAKE_CURRENT_BINARY_DIR}/plcairo.cmi @@ -193,7 +193,7 @@ # comments in the source file. Source can be a .ml or a .mli. add_custom_command( OUTPUT ${OCAMLDOC_FILES} - COMMAND ${OCAMLFIND} doc -package cairo -html ${CMAKE_CURRENT_SOURCE_DIR}/plcairo.mli + COMMAND ${OCAMLFIND} doc -package cairo2 -html ${CMAKE_CURRENT_SOURCE_DIR}/plcairo.mli DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/plcairo.mli WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} Modified: trunk/bindings/ocaml/plcairo/plcairo.ml =================================================================== --- trunk/bindings/ocaml/plcairo/plcairo.ml 2014-07-03 14:40:58 UTC (rev 13133) +++ trunk/bindings/ocaml/plcairo/plcairo.ml 2014-07-03 14:46:13 UTC (rev 13134) @@ -40,22 +40,22 @@ end (** A record to keep track of the Cairo surface and context information *) -type ('a, 'b) t = { +type 'a t = { width : float; (** Width in device units *) height : float; (** Height in device units *) - surface : 'a Cairo.surface; (** Cairo surface to plot to *) - context : Cairo.t; (** Cairo context to plot to *) - file : 'b option; (** An optional file name or stream for the plot output *) + surface : Cairo.Surface.t; (** Cairo surface to plot to *) + context : Cairo.context; (** Cairo context to plot to *) + file : 'a option; (** An optional file name or stream for the plot output *) clear : bool; (** Should each new page be cleared? *) plstream : int; (** PLplot stream number associated with this plot *) } (** Types of Cairo surfaces available for {!init}. *) -type ('a, 'b) plcairo_sfc_t = - width:int -> height:int -> string option -> 'a option * 'b Cairo.surface +type 'a plcairo_sfc_t = + width:int -> height:int -> string option -> 'a option * Cairo.Surface.t (** Provide PLplot with a Cairo context to plot on. *) -external plset_cairo_context : Cairo.t -> unit = "ml_set_plplot_cairo_context" +external plset_cairo_context : Cairo.context -> unit = "ml_set_plplot_cairo_context" (** Get the various components of a {!t} instance *) let plget_dims t = t.width, t.height @@ -66,7 +66,7 @@ (** [plblit_to_cairo ?xoff ?yoff ?scale_by plcairo dest] *) let plblit_to_cairo ?(xoff = 0.0) ?(yoff = 0.0) ?scale_by t dest = - let sx, sy = + let x, y = match scale_by with | None -> 1.0, 1.0 | Some scale -> ( @@ -78,7 +78,7 @@ in Cairo.save dest; begin - Cairo.scale ~sx ~sy dest; + Cairo.scale ~x ~y dest; Cairo.set_source_surface dest t.surface xoff yoff; Cairo.paint dest; end; @@ -96,8 +96,8 @@ surface. Leave the background transparent, so only the plotted image is transfered over to the main plot surface. *) let img_sfc = - Cairo.image_surface_create - Cairo.FORMAT_ARGB32 + Cairo.Image.create + Cairo.Image.ARGB32 ~width:(int_of_float t.width) ~height:(int_of_float t.height) in @@ -115,11 +115,7 @@ f (); (* Blit the raster image on to the main plot surface *) Cairo.set_source_surface t.context img_sfc 0.0 0.0; - let () = - match alpha with - | None -> Cairo.paint t.context - | Some a -> Cairo.paint_with_alpha t.context a - in + Cairo.paint ?alpha t.context; (* Now set PLplot back to using the proper plot context. *) plset_cairo_context t.context; Cairo.set_matrix t.context t_matrix; @@ -177,9 +173,10 @@ | None -> raise (Invalid_argument "plpscairo needs a filename") in Some outfile, - Cairo_ps.surface_create_for_channel outfile - ~width_in_points:(float_of_int width) - ~height_in_points:(float_of_int height) + Cairo.PS.create_for_stream + ~output:(fun bytes -> output_string outfile bytes) + ~width:(float_of_int width) + ~height:(float_of_int height) let plpdfcairo ~width ~height filename = let outfile = @@ -188,22 +185,23 @@ | None -> raise (Invalid_argument "plpdfcairo needs a filename") in Some outfile, - Cairo_pdf.surface_create_for_channel outfile - ~width_in_points:(float_of_int width) - ~height_in_points:(float_of_int height) + Cairo.PDF.create_for_stream + ~output:(fun bytes -> output_string outfile bytes) + ~width:(float_of_int width) + ~height:(float_of_int height) let plimagecairo ~width ~height (filename : string option) = filename, - Cairo.image_surface_create Cairo.FORMAT_RGB24 ~width ~height + Cairo.Image.create Cairo.Image.RGB24 ~width ~height let plimagecairo_rgba ~width ~height (filename : string option) = filename, - Cairo.image_surface_create Cairo.FORMAT_ARGB32 ~width ~height + Cairo.Image.create Cairo.Image.ARGB32 ~width ~height (** [plinit_cairo ?filename ?clear ?pre (width, height) init] creates a Cairo context and associates it with a new PLplot stream. *) let plinit_cairo ?filename ?(clear = false) ?pre - (width, height) (init : ('a, 'b) plcairo_sfc_t) = + (width, height) (init : 'a plcairo_sfc_t) = let file, sfc = init ~width ~height filename in let context = Cairo.create sfc in (* Associate the Cairo context with PLplot, then initialize PLplot *) @@ -238,7 +236,7 @@ (** [plcairo_finish t] calls [Cairo.surface_finish] on the Cairo surface associated with [t]. *) let plcairo_finish t = - Cairo.surface_finish t.surface; + Cairo.Surface.finish t.surface; () (** [plsave_cairo_image ?filename t] saves the plot surface in [t] @@ -257,7 +255,7 @@ | None -> invalid_arg "No filename associated with this plot" ) in - Cairo_png.surface_write_to_file t.surface output_filename; + Cairo.PNG.write t.surface output_filename; () (** [plsave_cairo ?filename t] is like {!plsave_cairo_image} but for Modified: trunk/bindings/ocaml/plcairo/plcairo.mli =================================================================== --- trunk/bindings/ocaml/plcairo/plcairo.mli 2014-07-03 14:40:58 UTC (rev 13133) +++ trunk/bindings/ocaml/plcairo/plcairo.mli 2014-07-03 14:46:13 UTC (rev 13134) @@ -18,29 +18,29 @@ *) (** A record to keep track of the Cairo surface and context information *) -type ('a, 'b) t +type 'a t (** Types of Cairo surfaces available for {!plinit_cairo}. *) -type ('a, 'b) plcairo_sfc_t +type 'a plcairo_sfc_t (** Provide PLplot with a Cairo context to plot on. *) -external plset_cairo_context : Cairo.t -> unit +external plset_cairo_context : Cairo.context -> unit = "ml_set_plplot_cairo_context" (** Get the [(width, height)] of the surface in device units. *) -val plget_dims : ('a, 'b) t -> float * float +val plget_dims : 'a t -> float * float (** Get the Cairo surface associated with [t]. *) -val plget_surface : ('a, 'b) t -> 'a Cairo.surface +val plget_surface : 'a t -> Cairo.Surface.t (** Get the Cairo context associated with [t]. *) -val plget_context : ('a, 'b) t -> Cairo.t +val plget_context : 'a t -> Cairo.context (** Get the PLplot stream number associated with [t]. *) -val plget_stream : ('a, 'b) t -> int +val plget_stream : 'a t -> int (** Get the output (filename, output stream or nothing) associated with [t]. *) -val plget_output : ('a, 'b) t -> 'b option +val plget_output : 'a t -> 'a option (** [plblit_to_cairo ?xoff ?yoff ?scale_by plcairo dest] blits the contents of [plcairo] to [dest]. @@ -50,7 +50,7 @@ ?xoff:float -> ?yoff:float -> ?scale_by:[< `both of float * float | `height of float | `width of float ] -> - ([> `Any ], 'a) t -> Cairo.t -> unit + 'a t -> Cairo.context -> unit (** [plrasterize ?alpha t f] applies the plotting function [f ()] to [t], with the difference that the output will be rasterized for all plot @@ -61,20 +61,20 @@ Note that the plotting done by [f ()] will not be antialiased by default. *) val plrasterize : ?alpha:float -> - ?antialias:Cairo.antialias -> ('a, 'b) t -> (unit -> 'c) -> unit + ?antialias:Cairo.antialias -> 'a t -> (unit -> 'b) -> unit (** [plcairo_new_page t] will advance the Cairo context associated with [t] to a new page, for devices which support this. *) -val plcairo_new_page : ('a, 'b) t -> unit +val plcairo_new_page : 'a t -> unit (** The following 4 functions provide a relatively simple way to setup an appropriate Cairo surface for use with this library and the extcairo driver. They should be passed as the [init] argument to the [plinit_cairo] function.*) -val plpscairo : (out_channel, [ `Any | `PS ]) plcairo_sfc_t -val plpdfcairo : (out_channel, [ `Any | `PDF ]) plcairo_sfc_t -val plimagecairo : (string, [ `Any | `Image ]) plcairo_sfc_t -val plimagecairo_rgba : (string, [ `Any | `Image ]) plcairo_sfc_t +val plpscairo : out_channel plcairo_sfc_t +val plpdfcairo : out_channel plcairo_sfc_t +val plimagecairo : string plcairo_sfc_t +val plimagecairo_rgba : string plcairo_sfc_t (** [plinit_cairo ?filename ?clear ?pre (width, height) init] creates a Cairo context and associates it with a new PLplot stream. *) @@ -82,15 +82,15 @@ ?filename:string -> ?clear:bool -> ?pre:(unit -> unit) -> - int * int -> ('a, [> `Any ] as 'b) plcairo_sfc_t -> ('b, 'a) t + int * int -> 'a plcairo_sfc_t -> 'a t (** [plcairo_make_active t] sets PLplot to using the plot stream associated with [t] the active plot stream. *) -val plcairo_make_active : ('a, 'b) t -> unit +val plcairo_make_active : 'a t -> unit (** [plcairo_finish t] calls [Cairo.surface_finish] on the Cairo surface associated with [t]. *) -val plcairo_finish : ([> `Any ], 'a) t -> unit +val plcairo_finish : 'a t -> unit (** [plsave_cairo_image ?filename t] saves the plot surface in [t] as a png to its associated file. If [filename] is given then the file is @@ -98,14 +98,14 @@ [Plplot.plend1] should be called first or the plotting may not be complete! Raises [Invalid_argument "No filename associated with this plot"] if no filename is provided and [t] does not have a filename associated with it. *) -val plsave_cairo_image : ?filename:string -> ([> `Any ], string) t -> unit +val plsave_cairo_image : ?filename:string -> string t -> unit (** [plsave_cairo ?filename t] is like {!plsave_cairo_image} but for non-image surfaces. *) -val plsave_cairo : ([> `Any ], out_channel) t -> unit +val plsave_cairo : out_channel t -> unit (** NOTE: This function will almost definitely change in a future revision. [plcairo_copy_plot t driver filename] copies the plot stream from [t] to a new output stream, using the plot driver [driver], saving the output to [filename]. *) -val plcairo_copy_plot : ('a, 'b) t -> string -> string -> unit +val plcairo_copy_plot : 'a t -> string -> string -> unit Modified: trunk/cmake/modules/ocaml.cmake =================================================================== --- trunk/cmake/modules/ocaml.cmake 2014-07-03 14:40:58 UTC (rev 13133) +++ trunk/cmake/modules/ocaml.cmake 2014-07-03 14:46:13 UTC (rev 13134) @@ -200,7 +200,7 @@ set(text_cairo "module C = Cairo") file(WRITE ${CMAKE_BINARY_DIR}/test_cairo.ml ${text_cairo}) execute_process( - COMMAND ${OCAMLFIND} c -package cairo -linkpkg test_cairo.ml -o test_cairo + COMMAND ${OCAMLFIND} c -package cairo2 -linkpkg test_cairo.ml -o test_cairo WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE OCAML_HAS_CAIRO_RC OUTPUT_QUIET @@ -239,25 +239,25 @@ endif(OCAML_HAS_CAIRO) if(OCAML_HAS_CAIRO) - option(OCAML_HAS_GTK "OCaml has the cairo.lablgtk2 package" ON) + option(OCAML_HAS_GTK "OCaml has the cairo2.lablgtk2 package" ON) else(OCAML_HAS_CAIRO) message(STATUS "WARNING:" "Cairo OCaml library not found. Disabling lablgtk2 support") - set(OCAML_HAS_GTK OFF CACHE BOOL "OCaml has the cairo.lablgtk2 package" FORCE) + set(OCAML_HAS_GTK OFF CACHE BOOL "OCaml has the cairo2.lablgtk2 package" FORCE) endif(OCAML_HAS_CAIRO) if(DROP_GTK_PLUS_2_BUILDS) - set(OCAML_HAS_GTK OFF CACHE BOOL "OCaml has the cairo.lablgtk2 package" FORCE) + set(OCAML_HAS_GTK OFF CACHE BOOL "OCaml has the cairo2.lablgtk2 package" FORCE) endif(DROP_GTK_PLUS_2_BUILDS) if(OCAML_HAS_GTK) set(text_gtk "module G = Gtk - module C = Cairo_lablgtk" + module C = Cairo_gtk" ) file (WRITE ${CMAKE_BINARY_DIR}/test_gtk.ml ${text_gtk}) execute_process( - COMMAND ${OCAMLFIND} c -package cairo.lablgtk2 -linkpkg test_gtk.ml -o test_gtk + COMMAND ${OCAMLFIND} c -package cairo2.lablgtk2 -linkpkg test_gtk.ml -o test_gtk WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE OCAML_HAS_GTK_RC OUTPUT_QUIET @@ -265,7 +265,7 @@ ) # non-zero return code indicates errors. if(OCAML_HAS_GTK_RC) - set(OCAML_HAS_GTK OFF CACHE BOOL "OCaml has the cairo.lablgtk2 package" FORCE) + set(OCAML_HAS_GTK OFF CACHE BOOL "OCaml has the cairo2.lablgtk2 package" FORCE) endif(OCAML_HAS_GTK_RC) endif(OCAML_HAS_GTK) @@ -279,11 +279,11 @@ message(STATUS "WARNING:" "ocamlfind not available. Disabling Plcairo module and lablgtk2 support") set(OCAML_HAS_CAIRO OFF CACHE BOOL "OCaml has the cairo package" FORCE) - set(OCAML_HAS_GTK OFF CACHE BOOL "OCaml has the cairo.lablgtk2 package" FORCE) + set(OCAML_HAS_GTK OFF CACHE BOOL "OCaml has the cairo2.lablgtk2 package" FORCE) endif(OCAMLFIND) else(ENABLE_ocaml) message(STATUS "WARNING:" "ENABLE_ocaml is OFF so disabling Plcairo module and lablgtk2 support") set(OCAML_HAS_CAIRO OFF CACHE BOOL "OCaml has the cairo package" FORCE) - set(OCAML_HAS_GTK OFF CACHE BOOL "OCaml has the cairo.lablgtk2 package" FORCE) + set(OCAML_HAS_GTK OFF CACHE BOOL "OCaml has the cairo2.lablgtk2 package" FORCE) endif(ENABLE_ocaml) Modified: trunk/examples/ocaml/CMakeLists.txt =================================================================== --- trunk/examples/ocaml/CMakeLists.txt 2014-07-03 14:40:58 UTC (rev 13133) +++ trunk/examples/ocaml/CMakeLists.txt 2014-07-03 14:46:13 UTC (rev 13134) @@ -254,7 +254,7 @@ add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${EXECUTABLE_NAME} COMMAND ${OCAMLFIND} ${ocaml_compiler} - -package cairo.lablgtk2 + -package cairo2.lablgtk2 -linkpkg -g -I ${I_OPTION_PLPLOT} Modified: trunk/examples/ocaml/xgtk_interface.ml =================================================================== --- trunk/examples/ocaml/xgtk_interface.ml 2014-07-03 14:40:58 UTC (rev 13133) +++ trunk/examples/ocaml/xgtk_interface.ml 2014-07-03 14:46:13 UTC (rev 13134) @@ -34,7 +34,7 @@ (** Get a Cairo context from the Gtk drawing area. *) let get_cairo w = - Cairo_lablgtk.create w#misc#window + Cairo_gtk.create w#misc#window (** Callback to redraw the plot contents. If the window is resized then the plot will be stretched to fit the new window dimensions. *) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hba...@us...> - 2014-07-07 01:43:04
|
Revision: 13136 http://sourceforge.net/p/plplot/code/13136 Author: hbabcock Date: 2014-07-07 01:42:58 +0000 (Mon, 07 Jul 2014) Log Message: ----------- Add (not yet) working smoke bindings for the qtwidget and extqt drivers. Modified Paths: -------------- trunk/bindings/qt_gui/CMakeLists.txt trunk/cmake/modules/qt.cmake Added Paths: ----------- trunk/bindings/qt_gui/smoke/ trunk/bindings/qt_gui/smoke/CMakeLists.txt trunk/bindings/qt_gui/smoke/plplotqt.h trunk/bindings/qt_gui/smoke/plplotqt.pro trunk/bindings/qt_gui/smoke/plplotqt_smoke.h trunk/bindings/qt_gui/smoke/smokeconfig.xml Modified: trunk/bindings/qt_gui/CMakeLists.txt =================================================================== --- trunk/bindings/qt_gui/CMakeLists.txt 2014-07-04 10:59:42 UTC (rev 13135) +++ trunk/bindings/qt_gui/CMakeLists.txt 2014-07-07 01:42:58 UTC (rev 13136) @@ -175,4 +175,5 @@ endif(PKG_CONFIG_EXECUTABLE) add_subdirectory(pyqt4) + add_subdirectory(smoke) endif(ENABLE_qt) Added: trunk/bindings/qt_gui/smoke/CMakeLists.txt =================================================================== --- trunk/bindings/qt_gui/smoke/CMakeLists.txt (rev 0) +++ trunk/bindings/qt_gui/smoke/CMakeLists.txt 2014-07-07 01:42:58 UTC (rev 13136) @@ -0,0 +1,95 @@ +# bindings/qt_gui/smoke/CMakeLists.txt +### Process this file with cmake to produce Makefile +### +# Copyright (C) 2014 Hazen Babcock +# +# This file is part of PLplot. +# +# PLplot is free software; you can redistribute it and/or modify +# it under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; version 2 of the License. +# +# PLplot is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public License +# along with PLplot; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +if(ENABLE_smoke) + + set(plplot_smoke_SRC + ${CMAKE_CURRENT_BINARY_DIR}/smokedata.cpp + ${CMAKE_CURRENT_BINARY_DIR}/x_1.cpp + ) + set_source_files_properties( + ${plplot_smoke_SRC} + PROPERTIES + GENERATED ON + COMPILE_FLAGS "-DUSINGDLL" + ) + + add_custom_command( + OUTPUT ${plplot_smoke_SRC} + COMMAND ${SMOKE_GEN_BIN} + ARGS -config "${SMOKE_GEN_SHARED}/qt-config.xml" -smokeconfig "${CMAKE_CURRENT_SOURCE_DIR}/smokeconfig.xml" -I "${CMAKE_SOURCE_DIR}/include" -- ${CMAKE_CURRENT_SOURCE_DIR}/plplotqt.h + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/smokeconfig.xml ${CMAKE_CURRENT_SOURCE_DIR}/plplotqt.h + ) + add_custom_target(generate_smoke_source + DEPENDS ${plplot_smoke_SRC} + ) + + message("DEBUG: SMOKE_GEN_BIN = ${SMOKE_GEN_BIN}") + message("DEBUG: SMOKE_GEN_SHARED = ${SMOKE_GEN_SHARED}") + + include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/lib/qsastime + ${CMAKE_SOURCE_DIR}/lib/nistcd + ${CMAKE_SOURCE_DIR}/drivers + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}/include + ) + + add_library(smokeplplotqt${LIB_TAG} ${plplot_smoke_SRC}) + + target_link_libraries( + smokeplplotqt${LIB_TAG} + plplotqt${LIB_TAG} + plplot${LIB_TAG} + ${QT_LIBRARIES} + ) + + add_dependencies(smokeplplotqt${LIB_TAG} generate_smoke_source) + + # Update the target COMPILE_DEFINITIONS and INCLUDE_DIRECTORIES + set_qt_target_properties(smokeplplotqt${LIB_TAG}) + + if(USE_RPATH) + + set_target_properties( + smokeplplotqt${LIB_TAG} + PROPERTIES + INSTALL_RPATH "${LIB_INSTALL_RPATH}" + INSTALL_NAME_DIR "${LIB_DIR}" + ) + + else(USE_RPATH) + set_target_properties( + smokeplplotqt${LIB_TAG} + PROPERTIES + INSTALL_NAME_DIR "${LIB_DIR}" + ) + endif(USE_RPATH) + + install(TARGETS smokeplplotqt${LIB_TAG} + EXPORT export_plplot + ARCHIVE DESTINATION ${LIB_DIR} + LIBRARY DESTINATION ${LIB_DIR} + RUNTIME DESTINATION ${BIN_DIR} + ) + +endif(ENABLE_smoke) Added: trunk/bindings/qt_gui/smoke/plplotqt.h =================================================================== --- trunk/bindings/qt_gui/smoke/plplotqt.h (rev 0) +++ trunk/bindings/qt_gui/smoke/plplotqt.h 2014-07-07 01:42:58 UTC (rev 13136) @@ -0,0 +1 @@ +#include "qt.h" Added: trunk/bindings/qt_gui/smoke/plplotqt.pro =================================================================== --- trunk/bindings/qt_gui/smoke/plplotqt.pro (rev 0) +++ trunk/bindings/qt_gui/smoke/plplotqt.pro 2014-07-07 01:42:58 UTC (rev 13136) @@ -0,0 +1,10 @@ +TEMPLATE = lib +CONFIG += qt dll +QT += svg +HEADERS += plplotqt_smoke.h +SOURCES += smokedata.cpp +SOURCES += x_1.cpp +INCLUDEPATH = /usr/local/include/plplot/ +LIBS += -lsmokeqtcore -lsmokeqtgui -lplplotqt +VERSION = 0.0.1 +TARGET = smokeplplotqt Added: trunk/bindings/qt_gui/smoke/plplotqt_smoke.h =================================================================== --- trunk/bindings/qt_gui/smoke/plplotqt_smoke.h (rev 0) +++ trunk/bindings/qt_gui/smoke/plplotqt_smoke.h 2014-07-07 01:42:58 UTC (rev 13136) @@ -0,0 +1,15 @@ +#ifndef QT_SMOKE_H +#define QT_SMOKE_H + +#include <smoke.h> + +extern "C" SMOKE_EXPORT Smoke* plplotqt_Smoke; +extern "C" SMOKE_EXPORT void init_plplotqt_Smoke(); +extern "C" SMOKE_EXPORT void delete_plplotqt_Smoke(); + +#ifndef QGLOBALSPACE_CLASS +#define QGLOBALSPACE_CLASS +class QGlobalSpace { }; +#endif + +#endif Added: trunk/bindings/qt_gui/smoke/smokeconfig.xml =================================================================== --- trunk/bindings/qt_gui/smoke/smokeconfig.xml (rev 0) +++ trunk/bindings/qt_gui/smoke/smokeconfig.xml 2014-07-07 01:42:58 UTC (rev 13136) @@ -0,0 +1,45 @@ +<config> + <moduleName>plplotqt</moduleName> + + <!-- Our classes inherit from classes that are in the qtcore and qtgui modules. --> + <parentModules> + <module>qtcore</module> + <module>qtgui</module> + </parentModules> + + <!-- how many source files should the generator create? --> + <parts>1</parts> + + <!-- the following two sections are needed for every Qt based module! --> + <scalarTypes> + <!-- QString is a class, but represented as a scalar (#) in munged names --> + <typeName>QString</typeName> + </scalarTypes> + <voidpTypes> + <!-- both are classes, but they are represented as Smoke::t_voidp --> + <typeName>QStringList</typeName> + <typeName>QString</typeName> + </voidpTypes> + + <!-- regexps for signatures of methods and functions that we don't want + to be wrapped in the smoke module --> + <exclude> + <!-- we don't want private stuff in smoke.. --> + <signature>.*::d_ptr.*</signature> + <signature>.*::q_ptr.*</signature> + + <!-- don't include these classes. --> + <signature>.*QMutex.*</signature> + </exclude> + + <functions> + <name>plsetqtdev</name> + <name>plfreeqtdev</name> + </functions> + + <classList> + <class>QtPLDriver</class> + <class>QtPLWidget</class> + <class>QtExtWidget</class> + </classList> +</config> Modified: trunk/cmake/modules/qt.cmake =================================================================== --- trunk/cmake/modules/qt.cmake 2014-07-04 10:59:42 UTC (rev 13135) +++ trunk/cmake/modules/qt.cmake 2014-07-07 01:42:58 UTC (rev 13136) @@ -52,6 +52,7 @@ # ENABLE_qt - ON means the plplot_qt library is enabled. # ENABLE_pyqt4 - ON means the plplot_pyqt4 Python extension module # is enabled. +# ENABLE_smoke - ON means the smoke plplotqt library is enabled. # SIP_EXECUTABLE - full path for sip # PYQT_SIP_DIR - sip system directory # PYQT_SIP_FLAGS - sip command flags @@ -59,9 +60,11 @@ if(DEFAULT_NO_BINDINGS) option(ENABLE_qt "Enable Qt bindings" OFF) option(ENABLE_pyqt4 "Enable pyqt4 Python extension module" OFF) + option(ENABLE_smoke "Enable smoke Qt bindings" OFF) else(DEFAULT_NO_BINDINGS) option(ENABLE_qt "Enable Qt bindings" ON) option(ENABLE_pyqt4 "Enable pyqt4 Python extension module" ON) + option(ENABLE_smoke "Enable smoke Qt bindings" ON) endif(DEFAULT_NO_BINDINGS) if(ENABLE_qt) @@ -341,3 +344,17 @@ # COMMAND will work properly with these flags later on. string(REGEX REPLACE " " ";" PYQT_SIP_FLAGS "${PYQT_SIP_FLAGS}") endif(ENABLE_pyqt4) + +if(ENABLE_smoke) + find_package(Smoke) + if(NOT SMOKE_GEN_BIN) + message(STATUS + "WARNING: smoke not found so setting ENABLE_smoke to OFF." + ) + set(ENABLE_smoke OFF CACHE BOOL "Enable smoke Qt extension module " FORCE) + endif(NOT SMOKE_GEN_BIN) + + # Doesn't work so disable. + set(ENABLE_smoke OFF CACHE BOOL "Enable smoke Qt extension module " FORCE) + +endif(ENABLE_smoke) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <phi...@us...> - 2014-08-07 21:29:15
|
Revision: 13138 http://sourceforge.net/p/plplot/code/13138 Author: philrosenberg Date: 2014-08-07 21:29:02 +0000 (Thu, 07 Aug 2014) Log Message: ----------- Added new mapping functionality for shapefiles. Added the functions plmapline, plmapstring, plmaptex, plmapfill, which will perform appropriate drawing of the data in the shapefile, they also allow filtering which items in the shapefile are drawn. The original plmap function is left intact. The new functions are currently available from C and C++. Modified Paths: -------------- trunk/bindings/c++/plstream.cc trunk/bindings/c++/plstream.h trunk/examples/c/x19c.c trunk/examples/c++/x19.cc trunk/include/plplot.h trunk/src/plmap.c Added Paths: ----------- trunk/data/ss/ trunk/data/ss/os_open_conditions.txt trunk/data/ss/ss64ne_Building_Area.dbf trunk/data/ss/ss64ne_Building_Area.prj trunk/data/ss/ss64ne_Building_Area.shp trunk/data/ss/ss64ne_Building_Area.shx trunk/data/ss/ss64ne_General_Text.dbf trunk/data/ss/ss64ne_General_Text.prj trunk/data/ss/ss64ne_General_Text.shp trunk/data/ss/ss64ne_General_Text.shx trunk/data/ss/ss64ne_Height_Contours.dbf trunk/data/ss/ss64ne_Height_Contours.prj trunk/data/ss/ss64ne_Height_Contours.shp trunk/data/ss/ss64ne_Height_Contours.shx trunk/data/ss/ss64ne_Landform_Area.dbf trunk/data/ss/ss64ne_Landform_Area.prj trunk/data/ss/ss64ne_Landform_Area.shp trunk/data/ss/ss64ne_Landform_Area.shx trunk/data/ss/ss64ne_Landform_Line.dbf trunk/data/ss/ss64ne_Landform_Line.prj trunk/data/ss/ss64ne_Landform_Line.shp trunk/data/ss/ss64ne_Landform_Line.shx trunk/data/ss/ss64ne_Road_Centreline.dbf trunk/data/ss/ss64ne_Road_Centreline.prj trunk/data/ss/ss64ne_Road_Centreline.shp trunk/data/ss/ss64ne_Road_Centreline.shx trunk/data/ss/ss64ne_Water_Area.dbf trunk/data/ss/ss64ne_Water_Area.prj trunk/data/ss/ss64ne_Water_Area.shp trunk/data/ss/ss64ne_Water_Area.shx trunk/data/ss/ss64ne_Water_Line.dbf trunk/data/ss/ss64ne_Water_Line.prj trunk/data/ss/ss64ne_Water_Line.shp trunk/data/ss/ss64ne_Water_Line.shx Modified: trunk/bindings/c++/plstream.cc =================================================================== --- trunk/bindings/c++/plstream.cc 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/bindings/c++/plstream.cc 2014-08-07 21:29:02 UTC (rev 13138) @@ -1069,7 +1069,7 @@ pllsty( lin ); } -// plot continental outline in world coordinates +// Plot continental outline in world coordinates void plstream::map( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), const char *type, PLFLT minlong, PLFLT maxlong, @@ -1080,6 +1080,52 @@ plmap( mapform, type, minlong, maxlong, minlat, maxlat ); } +// Plot map lines + +void plstream::mapline( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), const char *type, + PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat, + int* plotentries, int nplotentries) +{ + set_stream(); + + plmapline( mapform, type, minlong, maxlong, minlat, maxlat, plotentries, nplotentries ); +} + +// Plot map points + +void plstream::mapstring( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), + const char *type, const char *string, + PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat, + int* plotentries, int nplotentries) +{ + set_stream(); + + plmapstring( mapform, type, string, minlong, maxlong, minlat, maxlat, plotentries, nplotentries ); +} + +// Plot map text + +void plstream::maptex( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), + const char *type, PLFLT dx, PLFLT dy, PLFLT just, const char *text, + PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat, + int plotentry) +{ + set_stream(); + + plmaptex( mapform, type, dx, dy, just, text, minlong, maxlong, minlat, maxlat, plotentry ); +} + +// Plot map fills + +void plstream::mapfill( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), + const char *type, PLFLT minlong, PLFLT maxlong, PLFLT minlat, + PLFLT maxlat, int* plotentries, int nplotentries) +{ + set_stream(); + + plmapfill( mapform, type, minlong, maxlong, minlat, maxlat, plotentries, nplotentries ); +} + // Plot the latitudes and longitudes on the background. void plstream::meridians( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), Modified: trunk/bindings/c++/plstream.h =================================================================== --- trunk/bindings/c++/plstream.h 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/bindings/c++/plstream.h 2014-08-07 21:29:02 UTC (rev 13138) @@ -468,11 +468,37 @@ void lsty( PLINT lin ); -// plot continental outline in world coordinates +// Plot continental outline in world coordinates void map( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), const char *type, PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat ); +// Plot map lines + + void mapline( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), const char *type, + PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat, + int* plotentries, int nplotentries); + +// Plot map points + + void mapstring( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), + const char *type, const char *string, + PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat, + int* plotentries, int nplotentries); + +// Plot map text + + void maptex( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), + const char *type, PLFLT dx, PLFLT dy, PLFLT just, const char *text, + PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat, + int plotentry); + +// Plot map fills + + void mapfill( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), + const char *type, PLFLT minlong, PLFLT maxlong, PLFLT minlat, + PLFLT maxlat, int* plotentries, int nplotentries); + // Plot the latitudes and longitudes on the background. void meridians( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), Added: trunk/data/ss/os_open_conditions.txt =================================================================== --- trunk/data/ss/os_open_conditions.txt (rev 0) +++ trunk/data/ss/os_open_conditions.txt 2014-08-07 21:29:02 UTC (rev 13138) @@ -0,0 +1 @@ +Your use of OS OpenData is subject to the terms at http://www.ordnancesurvey.co.uk/oswebsite/opendata/docs/os-opendata-licence.pdf Added: trunk/data/ss/ss64ne_Building_Area.dbf =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Building_Area.dbf =================================================================== --- trunk/data/ss/ss64ne_Building_Area.dbf 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Building_Area.dbf 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Building_Area.dbf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Building_Area.prj =================================================================== --- trunk/data/ss/ss64ne_Building_Area.prj (rev 0) +++ trunk/data/ss/ss64ne_Building_Area.prj 2014-08-07 21:29:02 UTC (rev 13138) @@ -0,0 +1 @@ +PROJCS["OSGB_1936_British_National_Grid",GEOGCS["GCS_OSGB 1936",DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]] \ No newline at end of file Added: trunk/data/ss/ss64ne_Building_Area.shp =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Building_Area.shp =================================================================== --- trunk/data/ss/ss64ne_Building_Area.shp 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Building_Area.shp 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Building_Area.shp ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Building_Area.shx =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Building_Area.shx =================================================================== --- trunk/data/ss/ss64ne_Building_Area.shx 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Building_Area.shx 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Building_Area.shx ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_General_Text.dbf =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_General_Text.dbf =================================================================== --- trunk/data/ss/ss64ne_General_Text.dbf 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_General_Text.dbf 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_General_Text.dbf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_General_Text.prj =================================================================== --- trunk/data/ss/ss64ne_General_Text.prj (rev 0) +++ trunk/data/ss/ss64ne_General_Text.prj 2014-08-07 21:29:02 UTC (rev 13138) @@ -0,0 +1 @@ +PROJCS["OSGB_1936_British_National_Grid",GEOGCS["GCS_OSGB 1936",DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]] \ No newline at end of file Added: trunk/data/ss/ss64ne_General_Text.shp =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_General_Text.shp =================================================================== --- trunk/data/ss/ss64ne_General_Text.shp 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_General_Text.shp 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_General_Text.shp ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_General_Text.shx =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_General_Text.shx =================================================================== --- trunk/data/ss/ss64ne_General_Text.shx 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_General_Text.shx 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_General_Text.shx ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Height_Contours.dbf =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Height_Contours.dbf =================================================================== --- trunk/data/ss/ss64ne_Height_Contours.dbf 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Height_Contours.dbf 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Height_Contours.dbf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Height_Contours.prj =================================================================== --- trunk/data/ss/ss64ne_Height_Contours.prj (rev 0) +++ trunk/data/ss/ss64ne_Height_Contours.prj 2014-08-07 21:29:02 UTC (rev 13138) @@ -0,0 +1 @@ +PROJCS["OSGB_1936_British_National_Grid",GEOGCS["GCS_OSGB 1936",DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]] \ No newline at end of file Added: trunk/data/ss/ss64ne_Height_Contours.shp =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Height_Contours.shp =================================================================== --- trunk/data/ss/ss64ne_Height_Contours.shp 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Height_Contours.shp 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Height_Contours.shp ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Height_Contours.shx =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Height_Contours.shx =================================================================== --- trunk/data/ss/ss64ne_Height_Contours.shx 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Height_Contours.shx 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Height_Contours.shx ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Landform_Area.dbf =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Landform_Area.dbf =================================================================== --- trunk/data/ss/ss64ne_Landform_Area.dbf 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Landform_Area.dbf 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Landform_Area.dbf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Landform_Area.prj =================================================================== --- trunk/data/ss/ss64ne_Landform_Area.prj (rev 0) +++ trunk/data/ss/ss64ne_Landform_Area.prj 2014-08-07 21:29:02 UTC (rev 13138) @@ -0,0 +1 @@ +PROJCS["OSGB_1936_British_National_Grid",GEOGCS["GCS_OSGB 1936",DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]] \ No newline at end of file Added: trunk/data/ss/ss64ne_Landform_Area.shp =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Landform_Area.shp =================================================================== --- trunk/data/ss/ss64ne_Landform_Area.shp 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Landform_Area.shp 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Landform_Area.shp ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Landform_Area.shx =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Landform_Area.shx =================================================================== --- trunk/data/ss/ss64ne_Landform_Area.shx 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Landform_Area.shx 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Landform_Area.shx ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Landform_Line.dbf =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Landform_Line.dbf =================================================================== --- trunk/data/ss/ss64ne_Landform_Line.dbf 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Landform_Line.dbf 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Landform_Line.dbf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Landform_Line.prj =================================================================== --- trunk/data/ss/ss64ne_Landform_Line.prj (rev 0) +++ trunk/data/ss/ss64ne_Landform_Line.prj 2014-08-07 21:29:02 UTC (rev 13138) @@ -0,0 +1 @@ +PROJCS["OSGB_1936_British_National_Grid",GEOGCS["GCS_OSGB 1936",DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]] \ No newline at end of file Added: trunk/data/ss/ss64ne_Landform_Line.shp =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Landform_Line.shp =================================================================== --- trunk/data/ss/ss64ne_Landform_Line.shp 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Landform_Line.shp 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Landform_Line.shp ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Landform_Line.shx =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Landform_Line.shx =================================================================== --- trunk/data/ss/ss64ne_Landform_Line.shx 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Landform_Line.shx 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Landform_Line.shx ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Road_Centreline.dbf =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Road_Centreline.dbf =================================================================== --- trunk/data/ss/ss64ne_Road_Centreline.dbf 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Road_Centreline.dbf 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Road_Centreline.dbf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Road_Centreline.prj =================================================================== --- trunk/data/ss/ss64ne_Road_Centreline.prj (rev 0) +++ trunk/data/ss/ss64ne_Road_Centreline.prj 2014-08-07 21:29:02 UTC (rev 13138) @@ -0,0 +1 @@ +PROJCS["OSGB_1936_British_National_Grid",GEOGCS["GCS_OSGB 1936",DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]] \ No newline at end of file Added: trunk/data/ss/ss64ne_Road_Centreline.shp =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Road_Centreline.shp =================================================================== --- trunk/data/ss/ss64ne_Road_Centreline.shp 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Road_Centreline.shp 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Road_Centreline.shp ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Road_Centreline.shx =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Road_Centreline.shx =================================================================== --- trunk/data/ss/ss64ne_Road_Centreline.shx 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Road_Centreline.shx 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Road_Centreline.shx ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Water_Area.dbf =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Water_Area.dbf =================================================================== --- trunk/data/ss/ss64ne_Water_Area.dbf 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Water_Area.dbf 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Water_Area.dbf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Water_Area.prj =================================================================== --- trunk/data/ss/ss64ne_Water_Area.prj (rev 0) +++ trunk/data/ss/ss64ne_Water_Area.prj 2014-08-07 21:29:02 UTC (rev 13138) @@ -0,0 +1 @@ +PROJCS["OSGB_1936_British_National_Grid",GEOGCS["GCS_OSGB 1936",DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]] \ No newline at end of file Added: trunk/data/ss/ss64ne_Water_Area.shp =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Water_Area.shp =================================================================== --- trunk/data/ss/ss64ne_Water_Area.shp 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Water_Area.shp 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Water_Area.shp ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Water_Area.shx =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Water_Area.shx =================================================================== --- trunk/data/ss/ss64ne_Water_Area.shx 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Water_Area.shx 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Water_Area.shx ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Water_Line.dbf =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Water_Line.dbf =================================================================== --- trunk/data/ss/ss64ne_Water_Line.dbf 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Water_Line.dbf 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Water_Line.dbf ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Water_Line.prj =================================================================== --- trunk/data/ss/ss64ne_Water_Line.prj (rev 0) +++ trunk/data/ss/ss64ne_Water_Line.prj 2014-08-07 21:29:02 UTC (rev 13138) @@ -0,0 +1 @@ +PROJCS["OSGB_1936_British_National_Grid",GEOGCS["GCS_OSGB 1936",DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]] \ No newline at end of file Added: trunk/data/ss/ss64ne_Water_Line.shp =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Water_Line.shp =================================================================== --- trunk/data/ss/ss64ne_Water_Line.shp 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Water_Line.shp 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Water_Line.shp ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/data/ss/ss64ne_Water_Line.shx =================================================================== (Binary files differ) Index: trunk/data/ss/ss64ne_Water_Line.shx =================================================================== --- trunk/data/ss/ss64ne_Water_Line.shx 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/data/ss/ss64ne_Water_Line.shx 2014-08-07 21:29:02 UTC (rev 13138) Property changes on: trunk/data/ss/ss64ne_Water_Line.shx ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Modified: trunk/examples/c/x19c.c =================================================================== --- trunk/examples/c/x19c.c 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/examples/c/x19c.c 2014-08-07 21:29:02 UTC (rev 13138) @@ -125,6 +125,17 @@ { PLFLT minx, maxx, miny, maxy; PLFLT x, y; + //variables for the shapelib example + const PLINT nbeachareas = 2; + PLINT beachareas[] = { 23, 24 }; + const PLINT nwoodlandareas = 94; + PLINT woodlandareas[94]; + const PLINT nshingleareas = 22; + PLINT shingleareas[]={ 0, 1, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 217, 2424, 2425, 2426, 2427, 2428, 2491, 2577 }; + const PLINT ncragareas = 2024; + PLINT cragareas[2024]; + PLINT majorroads[]={ 33, 48, 71, 83, 89, 90, 101, 102, 111 }; + int i; // Parse and process command line arguments @@ -201,6 +212,112 @@ // For C, this is how the global transform is cleared plstransform( NULL, NULL ); + // An example using shapefiles. The shapefiles used are from Ordnance Survey, UK. + // These were chosen because they provide shapefiles for small grid boxes which + // are easilly manageable for this demo. + + pllsty( 1 ); + + + minx=240570; + maxx=621109; + miny=87822; + maxy=722770; + plscol0(0, 255, 255, 255 ); + plscol0(1, 0, 0, 0 ); + plscol0(2, 150, 150, 150 ); + plscol0(3, 0, 50, 200 ); + plscol0(4, 50, 50, 50 ); + plscol0(5, 150, 0, 0 ); + plscol0(6, 100, 100, 255 ); + + + minx=265000; + maxx=270000; + miny=145000; + maxy=150000; + plscol0( 0, 255, 255, 255 ); //white + plscol0( 1, 0, 0, 0 ); //black + plscol0( 2, 255, 200, 0 ); //yelow for sand + plscol0( 3, 60, 230, 60 ); // green for woodland + plscol0( 4, 210, 120, 60 ); //brown for contours + plscol0( 5, 150, 0, 0 ); //red for major roads + plscol0( 6, 180, 180, 255 ); //pale blue for water + plscol0( 7, 100, 100, 100 ); //pale grey for shingle or boulders + plscol0( 8, 100, 100, 100 ); //dark grey for custom polygons - generally crags + + + plcol0(1); + plenv( minx, maxx, miny, maxy, 1, -1 ); + pllab( "", "", "Martinhoe CP, Exmoor National Park, UK (shapelib only)" ); + + + //Beach + plcol0( 2 ); + plmapfill(NULL, "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, beachareas, nbeachareas ); + + //woodland + plcol0( 3 ); + for( i=0; i < nwoodlandareas; ++ i ) + woodlandareas[i] = i + 218; + plmapfill(NULL, "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, woodlandareas, nwoodlandareas ); + + //shingle or boulders + plcol0( 7 ); + plmapfill(NULL, "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, shingleareas, nshingleareas ); + + //crags + plcol0( 8 ); + for( i=0; i < ncragareas; ++ i ) + cragareas[i] = i + 325; + plmapfill(NULL, "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, cragareas, ncragareas ); + + //draw contours, we need to separate contours from high/low coastline + //draw_contours(pls, "ss/SS64_line", 433, 20, 4, 3, minx, maxx, miny, maxy ); + plcol0( 4 ); + plmapline(NULL, "ss/ss64ne_Height_Contours", minx, maxx, miny, maxy, NULL, 0 ); + + //draw the sea and surface water + plwidth( 0.0 ); + plcol0(6); + plmapfill(NULL, "ss/ss64ne_Water_Area", minx, maxx, miny, maxy, NULL, 0 ); + plwidth( 2.0 ); + plmapfill(NULL, "ss/ss64ne_Water_Line", minx, maxx, miny, maxy, NULL, 0 ); + + //draw the roads, first with black and then thinner with colour to give an + //an outlined appearance + plwidth( 5.0 ); + plcol0( 1 ); + plmapline(NULL, "ss/ss64ne_Road_Centreline", minx, maxx, miny, maxy, NULL, 0 ); + plwidth( 3.0 ); + plcol0( 0 ); + plmapline(NULL, "ss/ss64ne_Road_Centreline", minx, maxx, miny, maxy, NULL, 0 ); + plcol0( 5 ); + plmapline(NULL, "ss/ss64ne_Road_Centreline", minx, maxx, miny, maxy, majorroads, 9 ); + + //draw buildings + plwidth( 1.0 ); + plcol0( 1 ); + plmapfill(NULL, "ss/ss64ne_Building_Area", minx, maxx, miny, maxy, NULL, 0 ); + + //labels + plsfci( 0x80000100 ); + plschr(0, 0.8); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "MARTINHOE CP", minx, maxx, miny, maxy, 202); + plschr(0,0.7); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Heale\nDown", minx, maxx, miny, maxy, 13); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "South\nDown", minx, maxx, miny, maxy, 34); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Martinhoe\nCommon", minx, maxx, miny, maxy, 42); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Woody Bay", minx, maxx, miny, maxy, 211); + plschr(0, 0.6); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Mill Wood", minx, maxx, miny, maxy, 16); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Heale Wood", minx, maxx, miny, maxy, 17); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 1.0, "Bodley", minx, maxx, miny, maxy, 31); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.0, "Martinhoe", minx, maxx, miny, maxy, 37); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Woolhanger\nCommon", minx, maxx, miny, maxy, 60); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "West Ilkerton\nCommon", minx, maxx, miny, maxy, 61); + plmaptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Caffyns\nHeanton\nDown", minx, maxx, miny, maxy, 62); + plend(); exit( 0 ); } Modified: trunk/examples/c++/x19.cc =================================================================== --- trunk/examples/c++/x19.cc 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/examples/c++/x19.cc 2014-08-07 21:29:02 UTC (rev 13138) @@ -144,10 +144,33 @@ } } +//a function to draw the contour data and coastline from the example shapefiles +void +draw_contours(plstream *pls, const char *file, PLINT ncontours, PLINT nwater, PLINT colourcontours, PLINT colourwater, PLFLT minx, PLFLT maxx, PLFLT miny, PLFLT maxy) +{ + PLINT i; + PLINT *contours = ( PLINT* ) malloc ( ncontours * sizeof( PLINT ) ); + PLINT *water = ( PLINT* ) malloc ( nwater * sizeof( PLINT ) ); + for( i = 0; i < ncontours; ++i ) + contours[i] = i; + for( i = 0; i < nwater; ++i ) + water[i] = i + ncontours; + + pls->col0(colourcontours); + pls->mapline( NULL, file, minx, maxx, miny, maxy, contours, ncontours ); + pls->col0(colourwater); + pls->mapline( NULL, file, minx, maxx, miny, maxy, water, nwater ); + + free( contours ); + free( water ); +} + + x19::x19( int argc, const char ** argv ) { PLFLT minx, maxx, miny, maxy; + PLINT i; // plplot initialization @@ -166,6 +189,7 @@ // Cartesian plots // Most of world + minx = -170; maxx = minx + 360; @@ -225,6 +249,122 @@ // For C, this is how the global transform is cleared pls->stransform( NULL, NULL ); + + // An example using shapefiles. The shapefiles used are from Ordnance Survey, UK. + // These were chosen because they provide shapefiles for small grid boxes which + // are easilly manageable for this demo. + + pls->lsty( 1 ); + + + minx=240570; + maxx=621109; + miny=87822; + maxy=722770; + pls->scol0(0, 255, 255, 255 ); + pls->scol0(1, 0, 0, 0 ); + pls->scol0(2, 150, 150, 150 ); + pls->scol0(3, 0, 50, 200 ); + pls->scol0(4, 50, 50, 50 ); + pls->scol0(5, 150, 0, 0 ); + pls->scol0(6, 100, 100, 255 ); + + + minx=265000; + maxx=270000; + miny=145000; + maxy=150000; + pls->scol0( 0, 255, 255, 255 ); //white + pls->scol0( 1, 0, 0, 0 ); //black + pls->scol0( 2, 255, 200, 0 ); //yelow for sand + pls->scol0( 3, 60, 230, 60 ); // green for woodland + pls->scol0( 4, 210, 120, 60 ); //brown for contours + pls->scol0( 5, 150, 0, 0 ); //red for major roads + pls->scol0( 6, 180, 180, 255 ); //pale blue for water + pls->scol0( 7, 100, 100, 100 ); //pale grey for shingle or boulders + pls->scol0( 8, 100, 100, 100 ); //dark grey for custom polygons - generally crags + + + pls->col0(1); + pls->env( minx, maxx, miny, maxy, 1, -1 ); + pls->lab( "", "", "Martinhoe CP, Exmoor National Park, UK (shapelib only)" ); + + + //Beach + pls->col0( 2 ); + const PLINT nbeachareas = 2; + PLINT beachareas[] = { 23, 24 }; + pls->mapfill(NULL, "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, beachareas, nbeachareas ); + + //woodland + pls->col0( 3 ); + const PLINT nwoodlandareas = 94; + PLINT woodlandareas[nwoodlandareas]; + for( i=0; i < nwoodlandareas; ++ i ) + woodlandareas[i] = i + 218; + pls->mapfill(NULL, "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, woodlandareas, nwoodlandareas ); + + //shingle or boulders + pls->col0( 7 ); + const PLINT nshingleareas = 22; + PLINT shingleareas[]={ 0, 1, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 217, 2424, 2425, 2426, 2427, 2428, 2491, 2577 }; + pls->mapfill(NULL, "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, shingleareas, nshingleareas ); + + //crags + pls->col0( 8 ); + const PLINT ncragareas = 2024; + PLINT cragareas[ncragareas]; + for( i=0; i < ncragareas; ++ i ) + cragareas[i] = i + 325; + pls->mapfill(NULL, "ss/ss64ne_Landform_Area", minx, maxx, miny, maxy, cragareas, ncragareas ); + + //draw contours, we need to separate contours from high/low coastline + //draw_contours(pls, "ss/SS64_line", 433, 20, 4, 3, minx, maxx, miny, maxy ); + pls->col0( 4 ); + pls->mapline(NULL, "ss/ss64ne_Height_Contours", minx, maxx, miny, maxy, NULL, 0 ); + + //draw the sea and surface water + pls->width( 0.0 ); + pls->col0(6); + pls->mapfill(NULL, "ss/ss64ne_Water_Area", minx, maxx, miny, maxy, NULL, 0 ); + pls->width( 2.0 ); + pls->mapfill(NULL, "ss/ss64ne_Water_Line", minx, maxx, miny, maxy, NULL, 0 ); + + //draw the roads, first with black and then thinner with colour to give an + //an outlined appearance + pls->width( 5.0 ); + pls->col0( 1 ); + pls->mapline(NULL, "ss/ss64ne_Road_Centreline", minx, maxx, miny, maxy, NULL, 0 ); + pls->width( 3.0 ); + pls->col0( 0 ); + pls->mapline(NULL, "ss/ss64ne_Road_Centreline", minx, maxx, miny, maxy, NULL, 0 ); + PLINT majorroads[]={ 33, 48, 71, 83, 89, 90, 101, 102, 111 }; + pls->col0( 5 ); + pls->mapline(NULL, "ss/ss64ne_Road_Centreline", minx, maxx, miny, maxy, majorroads, 9 ); + + //draw buildings + pls->width( 1.0 ); + pls->col0( 1 ); + pls->mapfill(NULL, "ss/ss64ne_Building_Area", minx, maxx, miny, maxy, NULL, 0 ); + + //labels + pls->sfci( 0x80000100 ); + pls->schr(0, 0.8); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "MARTINHOE CP", minx, maxx, miny, maxy, 202); + pls->schr(0,0.7); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Heale\nDown", minx, maxx, miny, maxy, 13); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "South\nDown", minx, maxx, miny, maxy, 34); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Martinhoe\nCommon", minx, maxx, miny, maxy, 42); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Woody Bay", minx, maxx, miny, maxy, 211); + pls->schr(0, 0.6); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Mill Wood", minx, maxx, miny, maxy, 16); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Heale Wood", minx, maxx, miny, maxy, 17); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 1.0, "Bodley", minx, maxx, miny, maxy, 31); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.0, "Martinhoe", minx, maxx, miny, maxy, 37); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Woolhanger\nCommon", minx, maxx, miny, maxy, 60); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "West Ilkerton\nCommon", minx, maxx, miny, maxy, 61); + pls->maptex(NULL, "ss/ss64ne_General_Text", 1.0, 0.0, 0.5, "Caffyns\nHeanton\nDown", minx, maxx, miny, maxy, 62); + delete pls; } Modified: trunk/include/plplot.h =================================================================== --- trunk/include/plplot.h 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/include/plplot.h 2014-08-07 21:29:02 UTC (rev 13138) @@ -660,6 +660,10 @@ #define plline3 c_plline3 #define pllsty c_pllsty #define plmap c_plmap +#define plmapline c_plmapline +#define plmapstring c_plmapstring +#define plmaptex c_plmaptex +#define plmapfill c_plmapfill #define plmeridians c_plmeridians #define plmesh c_plmesh #define plmeshc c_plmeshc @@ -1287,12 +1291,42 @@ PLDLLIMPEXP void c_pllsty( PLINT lin ); -// plot continental outline in world coordinates +// Plot continental outline in world coordinates PLDLLIMPEXP void c_plmap( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), const char *type, PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat ); +// Plot map outlines + +PLDLLIMPEXP void +c_plmapline( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), const char *type, + PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat, + int* plotentries, int nplotentries); + +// Plot map points + +PLDLLIMPEXP void +c_plmapstring( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), + const char *type, const char *string, + PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat, + int* plotentries, int nplotentries); + +// Plot map text + +PLDLLIMPEXP void +c_plmaptex( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), + const char *type, PLFLT dx, PLFLT dy, PLFLT just, const char *text, + PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat, + int plotentry); + +// Plot map fills + +PLDLLIMPEXP void +c_plmapfill( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), + const char *type, PLFLT minlong, PLFLT maxlong, PLFLT minlat, + PLFLT maxlat, int* plotentries, int nplotentries); + // Plot the latitudes and longitudes on the background. PLDLLIMPEXP void Modified: trunk/src/plmap.c =================================================================== --- trunk/src/plmap.c 2014-07-11 18:32:21 UTC (rev 13137) +++ trunk/src/plmap.c 2014-08-07 21:29:02 UTC (rev 13138) @@ -51,120 +51,282 @@ #ifdef HAVE_SAHOOKS static void CustomErrors( const char *message ); -#endif +#endif //HAVE_SAHOOKS -#endif - -//-------------------------------------------------------------------------- -// void plmap(void (*mapform)(PLINT, PLFLT *, PLFLT *), const char *type, -// PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat); -// -// plot continental outline in world coordinates -// -// v1.4: machine independant version -// v1.3: replaced plcontinent by plmap, added plmeridians -// v1.2: 2 arguments: mapform, type of plot -// -// mapform(PLINT n, PLFLT *x, PLFLT *y) is a routine to transform the -// coordinate longitudes and latitudes to a plot coordinate system. By -// using this transform, we can change from a longitude, latitude -// coordinate to a polar stereographic project, for example. Initially, -// x[0]..[n-1] are the longitudes and y[0]..y[n-1] are the corresponding -// latitudes. After the call to mapform(), x[] and y[] should be replaced -// by the corresponding plot coordinates. If no transform is desired, -// mapform can be replaced by NULL. -// -// type is a character string. The value of this parameter determines the -// type of background. The possible values are, -// -// "globe" continental outlines -// "usa" USA and state boundaries -// "cglobe" continental outlines and countries -// "usaglobe" USA, state boundaries and continental outlines -// alternatively the filename of a shapefile can be passed if PLplot has -// been compiled with shapelib. In this case either the base name of the -// file can be passed or the filename including the .shp or .shx suffix. -// Only the .shp and .shx files are used. -// -// minlong, maxlong are the values of the longitude on the left and right -// side of the plot, respectively. The value of minlong must be less than -// the values of maxlong, and the values of maxlong-minlong must be less -// or equal to 360. -// -// minlat, maxlat are the minimum and maximum latitudes to be plotted on -// the background. One can always use -90.0 and 90.0 as the boundary -// outside the plot window will be automatically eliminated. However, the -// program will be faster if one can reduce the size of the background -// plotted. -//-------------------------------------------------------------------------- - -#ifdef HAVE_SHAPELIB #define MAP_FILE "" #define OpenMap OpenShapeFile #define CloseMap SHPClose -#else + +#else //HAVE_SHAPELIB + #define MAP_FILE ".map" #define OpenMap plLibOpenPdfstrm #define CloseMap pdf_close #define OFFSET ( 180 * 100 ) #define SCALE 100.0 #define W_BUFSIZ ( 32 * 1024 ) -#endif +#define SHPT_ARC 1 +#define SHPT_POINT 2 +#define SHPT_POLYGON 3 +#endif //HAVE_SHAPELIB + +//redistributes the lon value onto either 0-360 or -180-180 for wrapping +//purposes. void -plmap( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), const char *type, - PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat ) +rebaselon( PLFLT *lon, PLFLT midlon ) { + if( *lon > midlon + 180.0 ) + *lon -= floor( ( *lon - midlon - 180.0 ) / 360.0 + 1.0 ) * 360.0; + else if( *lon < midlon - 180.0 ) + *lon += floor( ( midlon - 180.0 - *lon ) / 360.0 + 1.0 ) * 360.0; + +} + +//append a PLFLT to an array of PLFLTs. array is a pointer to the array, +//n is the current size of the array, val is the value to append. +//returns 0 for success, 1 for could not allocate new memory. If memory +//could not be allocated then the previous array remains intact +int appendflt( PLFLT **array, size_t n, PLFLT val ) +{ + size_t i; + PLFLT *temp = ( PLFLT* ) malloc( ( n + 1 ) * sizeof( PLFLT ) ); + if( !temp) + return 1; + for( i = 0; i < n; ++i ) + temp[i]=(*array)[i]; + temp[n] = val; + free ( *array ); + *array = temp; + return 0; +} + +//As for appendflt, but for an array of ints +int appendint( int **array, size_t n, int val ) +{ + size_t i; + int *temp = ( int* ) malloc( ( n + 1 ) * sizeof( int ) ); + if( !temp) + return 1; + for( i = 0; i < n; ++i ) + temp[i]=(*array)[i]; + temp[n] = val; + free ( *array ); + *array = temp; + return 0; +} + +//As for appendflt, but for an array of pointers to PLFLTs +int appendfltptr( PLFLT ***array, size_t n, PLFLT *val ) +{ + size_t i; + PLFLT **temp = ( PLFLT** ) malloc( ( n + 1 ) * sizeof( PLFLT *) ); + if( !temp) + return 1; + for(i = 0; i < n; ++i) + temp[i]=(*array)[i]; + temp[n] = val; + free ( *array ); + *array = temp; + return 0; +} + +//Check to see if the mapform wraps round longitudes. For example, a polar +// projection wraps round longitudes, but a cylindrical projection does not. +//Returns 1 if the mapform wraps or 0 if not. +char +checkwrap( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), PLFLT lon, PLFLT lat ) +{ + PLFLT x[]={lon}; + PLFLT y[]={lat}; + PLFLT resultx; + PLFLT resulty; + + if( !mapform ) + return 0; + + mapform( 1, x, y ); + resultx = x[0]; + resulty = y[0]; + x[0] = lon + 360; + y[0] = lat; + return ( ( ABS( x[0] - resultx ) < 1.0e-12 ) && ( ABS( y[0] - resulty ) < 1.0e-12 ) ); +} + +//------------------------------------------------------------------------------------- +//Actually draw the map lines points and text. +//------------------------------------------------------------------------------------- +void +drawmapdata( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), int shapetype, PLINT n, PLFLT *x, PLFLT *y, PLFLT dx, PLFLT dy, PLFLT just, const char *text ) +{ + PLINT i; + + //do the transform if needed + if ( mapform != NULL ) + ( *mapform )( n, x, y ); + + if ( shapetype == SHPT_ARC ) + plline( n, x, y ); + else if ( shapetype == SHPT_POINT ) + for ( i = 0; i < n; ++i ) + plptex( x[i], y[i], dx, dy, just, text ); + else if ( shapetype == SHPT_POLYGON ) + plfill( n, x, y ); +#ifdef HAVE_SHAPELIB + else if( shapetype == SHPT_ARCZ || shapetype == SHPT_ARCM ) + plline( n, x, y ); + else if( shapetype == SHPT_POLYGON || shapetype == SHPT_POLYGONZ || shapetype == SHPT_POLYGONM ) + plfill( n, x, y ); + else if( shapetype == SHPT_POINT || shapetype ==SHPT_POINTM || shapetype == SHPT_POINTZ ) + for ( i = 0; i < n; ++i ) + plptex( x[i], y[i], dx, dy, just, text ); +#endif //HAVE_SHAPELIB +} + + +//------------------------------------------------------------------------------------- +//This is a function called by the front end map functions to do the map drawing. Its +//parameters are: +//mapform: The transform used to convert the data in raw coordinates to x, y positions +//on the plot +//type: either one of the plplot provided lat/lon maps or the path/file name of a +//shapefile +//dx/dy: the gradient of text/symbols drawn if text is non-null +//shapetype: one of ARC, SHPT_ARCZ, SHPT_ARCM, SHPT_POLYGON, SHPT_POLYGONZ, +//SHPT_POLYGONM, SHPT_POINT, SHPT_POINTM, SHPT_POINTZ. See drawmapdata() for the +//how each type is rendered. But Basically the ARC options are lines, the POLYGON +//options are filled polygons, the POINT options are points/text. Options beginning +//SHPT will only be defined if HAVE_SHAPELIB is true +//text: The text (which can be actual text or a unicode symbol) to be drawn at +//each point +//minlong/maxlong: The min/max longitude when using a plplot provided map or x value if +//using a shapefile +//minlat/maxlat: The min/max latitude when using a plplot provided map or y value if +//using a shapefile +//plotentries: used only for shapefiles, as one shapefile contains multiple vectors +//each representing a different item (e.g. multiple boundaries, multiple height +//contours etc. plotentries is an array containing the indices of the +//entries within the shapefile that you wish to plot. if plotentries is null all +//entries are plotted +//nplotentries: the number of elements in plotentries. Ignored if plplot was not built +//with shapefile support or if plotentries is null +//------------------------------------------------------------------------------------- +void +drawmap( void ( *mapform )( PLINT, PLFLT *, PLFLT * ), const char *type, + PLFLT dx, PLFLT dy, int shapetype, PLFLT just, const char *text, + PLFLT minlong, PLFLT maxlong, PLFLT minlat, PLFLT maxlat, int* plotentries, int nplotentries ) +{ #if defined ( HAVE_SHAPELIB ) || defined ( PL_DEPRECATED ) int i, j; - char *filename; - char *warning; - int n = 200; + char *filename = NULL; + char truncatedfilename[900]; + char warning[1024]; + int nVertices = 200; PLFLT minsectlon, maxsectlon, minsectlat, maxsectlat; - const int ncopies = 5; //must be odd - original plus copies shifted by multiples of +/- 360 - const int mid = ncopies / 2 + 1; - PLFLT **bufx = NULL, **bufy = NULL; + PLFLT *bufx = NULL, *bufy = NULL; int bufsize = 0; + int filenamelen; + PLFLT **splitx = NULL; + PLFLT **splity = NULL; + int *splitsectionlengths = NULL; + int nsplitsections; + PLFLT lastsplitpointx; + PLFLT lastsplitpointy; + PLFLT penultimatesplitpointx; + PLFLT penultimatesplitpointy; + char islatlon = 1; + #ifdef HAVE_SHAPELIB SHPHandle in; int nentries; + int entryindex=0; // Unnecessarily set nparts to quiet -O3 -Wuninitialized warnings. - int nparts = 0; + //int nparts = 0; int entrynumber = 0; int partnumber = 0; - int shapetype; double mins[4]; double maxs[4]; SHPObject *object = NULL; double *bufxraw; double *bufyraw; + char *prjfilename = NULL; + PDFstrm *prjfile; + char prjtype[]={0, 0, 0, 0, 0, 0, 0}; + int appendresult=0; #else - register PDFstrm *in; + PDFstrm *in; //PLFLT bufx[ncopies][200], bufy[ncopies][200]; unsigned char n_buff[2], buff[800]; long int t; - int k; #endif // // read map outline // - filename = malloc( strlen( type ) + strlen( MAP_FILE ) + 1 ); - strcpy( filename, type ); + + //strip the .shp extension if a shapefile has been provided and add + //the needed map file extension if we are not using shapefile + if( strstr( type, ".shp" ) ) + filenamelen=( int )( type-strstr( type, ".shp" ) ); + else + filenamelen = ( int )strlen( type ); + filename = ( char* )malloc( filenamelen + strlen( MAP_FILE ) + 1 ); + if(!filename) + { + plabort("Could not allocate memory for concatenating map filename"); + return; + } + strncpy( filename, type, filenamelen ); + filename[ filenamelen ] = '\0'; strcat( filename, MAP_FILE ); - warning = malloc( strlen( type ) + strlen( MAP_FILE ) + 50 ); + //copy the filename to a fixed length array in case it is needed for warning messages + if( strlen( filename ) < 899 ) + strcpy( truncatedfilename, filename ); + else + { + memcpy( truncatedfilename, filename, 896 ); + truncatedfilename[896] = '.'; + truncatedfilename[897] = '.'; + truncatedfilename[898] = '.'; + truncatedfilename[899] = '\0'; + } + strcpy( warning, "Could not find " ); strcat( warning, filename ); strcat( warning, " file." ); #ifdef HAVE_SHAPELIB + //Open the shp and shx file using shapelib if ( ( in = OpenShapeFile( filename ) ) == NULL ) { - plwarn( warning ); + plabort( warning ); + free(filename); return; } SHPGetInfo( in, &nentries, &shapetype, mins, maxs ); + //also check for a prj file which will tell us if the data is lat/lon or projected + //if it is projected then set ncopies to 1 - i.e. don't wrap round longitudes + prjfilename = ( char* )malloc( filenamelen + 5 ); + if(!prjfilename) + { + plabort("Could not allocate memory for generating map projection filename"); + free(filename); + return; + } + strncpy( prjfilename, type, filenamelen ); + prjfilename[ filenamelen ] = '\0'; + strcat( prjfilename, ".prj" ); + prjfile = plLibOpenPdfstrm( prjfilename ); + if ( prjfile && prjfile->file ) + { + fread( prjtype, 1, 6, prjfile->file ); + if( strcmp ( prjtype, "PROJCS" ) == 0 ) + islatlon = 0; + pdf_close( prjfile ); + } + free ( prjfilename ); + prjfilename = NULL; #else if ( ( in = plLibOpenPdfstrm( filename ) ) == NULL ) { @@ -173,61 +335,90 @@ } #endif - bufx = malloc( (size_t) ncopies * sizeof ( PLFLT* ) ); - bufy = malloc( (size_t) ncopies * sizeof ( PLFLT* ) ); - for ( i = 0; i < ncopies; i++ ) - { - bufx[i] = NULL; - bufy[i] = NULL; - } + bufx = NULL; + bufy = NULL; for (;; ) { #ifdef HAVE_SHAPELIB + //each object in the shapefile is split into parts. + //If we are need to plot the first part of an object then read in a new object + //and check how many parts it has. Otherwise use the object->panPartStart vector + //to check the offset of this part and the next part and allocate memory. Copy + //the data to this memory converting it to PLFLT and draw it. + //finally increment the part number or if we have finished with the object reset the + //part numberand increment the object. + //break condition if we've reached the end of the file - if ( entrynumber == nentries ) + if ( ( !plotentries && ( entrynumber == nentries ) ) || ( plotentries && ( entryindex == nplotentries ) ) ) break; + //if partnumber == 0 then we need to load the next object if ( partnumber == 0 ) { - object = SHPReadObject( in, entrynumber ); - nparts = object->nParts; + if( plotentries ) + object = SHPReadObject( in, plotentries[entryindex] ); + else + object = SHPReadObject( in, entrynumber ); } + //if the object could not be read, increment the object index to read and + //return to the top of the loop to try the next object. + if ( object == NULL ) + { + entrynumber++; + entryindex++; + partnumber = 0; + continue; + } //work out how many points are in the current part - if ( partnumber == ( nparts - 1 ) ) - n = object->nVertices - object->panPartStart[partnumber]; + if( object->nParts == 0 ) + nVertices = object->nVertices; //if object->nParts==0, we can still have 1 vertex. A bit odd but it's the way it goes + else if ( partnumber == ( object->nParts - 1 ) ) + nVertices = object->nVertices - object->panPartStart[partnumber];//panPartStart holds the offset for each part else - n = object->panPartStart[partnumber + 1] - object->panPartStart[partnumber]; + nVertices = object->panPartStart[partnumber + 1] - object->panPartStart[partnumber];//panPartStart holds the offset for each part #endif //allocate memory for the data - if ( n > bufsize ) + if ( nVertices > bufsize ) { - bufsize = n; - for ( i = 0; i < ncopies; i++ ) - { - if ( bufx[i] ) - free( bufx[i] ); - if ( bufy[i] ) - free( bufy[i] ); - bufx[i] = malloc( (size_t) bufsize * sizeof ( double ) ); - bufy[i] = malloc( (size_t) bufsize * sizeof ( double ) ); - } + bufsize = nVertices; + free( bufx ); + free( bufy ); + bufx = (PLFLT*)malloc( (size_t) bufsize * sizeof ( PLFLT ) ); + bufy = (PLFLT*)malloc( (size_t) bufsize * sizeof ( PLFLT ) ); + if(!bufx || ! bufy) + { + plabort("Could not allocate memory for map data"); + free(filename); + free (bufx); + free (bufy); + return; + } } #ifdef HAVE_SHAPELIB //point the plot buffer to the correct starting vertex - //and copy it to the PLFLT arrays - bufxraw = object->padfX + object->panPartStart[partnumber]; - bufyraw = object->padfY + object->panPartStart[partnumber]; - for ( i = 0; i < n; i++ ) + //and copy it to the PLFLT arrays. If we had object->nParts == 0 + //then panPartStart will be NULL + if(object->nParts>0) + { + bufxraw = object->padfX + object->panPartStart[partnumber]; + bufyraw = object->padfY + object->panPartStart[partnumber]; + } + else + { + bufxraw = object->padfX; + bufyraw = object->padfY; + } + + for ( i = 0; i < nVertices; i++ ) { - bufx[mid][i] = (PLFLT) bufxraw[i]; - for ( j = 0; j < ncopies; j++ ) - bufy[j][i] = (PLFLT) bufyraw[i]; + bufx[i] = (PLFLT) bufxraw[i]; + bufy[i] = (PLFLT) bufyraw[i]; } - //set the minlat/lon of the object + //set the min x/y of the object minsectlon = object->dfXMin; maxsectlon = object->dfXMax; minsectlat = object->dfYMin; @@ -235,36 +426,40 @@ //increment the partnumber or if we've reached the end of //an entry increment the entrynumber and set partnumber to 0 - if ( partnumber == nparts - 1 ) + if ( partnumber == object->nParts - 1 || object->nParts == 0 ) { entrynumber++; + entryindex++; partnumber = 0; + SHPDestroyObject( object ); + object=NULL; } else partnumber++; + + if (nVertices==0) + continue; #else // read in # points in segment if ( pdf_rdx( n_buff, (long) sizeof ( unsigned char ) * 2, in ) == 0 ) break; - n = ( n_buff[0] << 8 ) + n_buff[1]; - if ( n == 0 ) + nVertices = ( n_buff[0] << 8 ) + n_buff[1]; + if ( nVertices == 0 ) break; - pdf_rdx( buff, (long) sizeof ( unsigned char ) * 4 * n, in ); - if ( n == 1 ) + pdf_rdx( buff, (long) sizeof ( unsigned char ) * 4 * nVertices, in ); + if ( nVertices == 1 ) continue; - for ( j = i = 0; i < n; i++, j += 2 ) + for ( j = i = 0; i < nVertices; i++, j += 2 ) { t = ( buff[j] << 8 ) + buff[j + 1]; - bufx[mid][i] = ( (PLFLT) t - OFFSET ) / SCALE; + bufx[i] = ( (PLFLT) t - OFFSET ) / SCALE; } - for ( i = 0; i < n; i++, j += 2 ) + for ( i = 0; i < nVertices; i++, j += 2 ) { t = ( buff[j] << 8 ) + buff[j + 1]; - bufy[0][i] = ( (PLFLT) t - OFFSET ) / SCALE; - for ( k = 1; k < ncopies; k++ ) - bufy[k][i] = bufy[0][i]; + bufy[i] = ( (PLFLT) t - OFFSET ) / SCALE; } //set the min/max section lat/lon with extreme values //to be overwritten later @@ -274,63 +469,165 @@ maxsectlat = -1000.; #endif - //two obvious issues exist here with plotting longitudes: - // - //1) wraparound causing lines which go the wrong way round - // the globe - //2) some people plot lon from 0-360 deg, others from -180 - +180 - // - //we can cure these problems by conditionally adding/subtracting - //360 degrees to each data point in order to ensure that the - //distance between adgacent points is always less than 180 - //degrees, then plotting up to 2 out of 5 copies of the data - //each separated by 360 degrees. - for ( i = 0; i < n - 1; i++ ) - { - if ( bufx[mid][i] - bufx[mid][i + 1] > 180. ) - bufx[mid][i + 1] += 360.; - else if ( bufx[mid][i] - bufx[mid][i + 1] < -180. ) - bufx[mid][i + 1] -= 360.; - } - for ( i = 0; i < n; i++... [truncated message content] |