Hi,

There is a feature request about implementing 1.5 wide lines for rendering 
https://sourceforge.net/p/jump-pilot/feature-requests/189/. User interface does 
not allow anything else than integers and I even had a look at the code. I got 
to think that java renderer could take sub-pixels widths but in OpenJUMP code 
widths are defined to be integers.

Am I right with my conclusion that sub-pixel line widths would be doable with 
java and also allowed in SLD standard but it would require some changes to how 
basic styles are implemented in OpenJUMP and also to SLD import/export handling?

Reasoning:

a) For java the line width is of type "float"

https://docs.oracle.com/javase/1.5.0/docs/api/java/awt/BasicStroke.html?is-external=true
BasicStroke
public BasicStroke(float width,
                   int cap,
                   int join,
                   float miterlimit,
                   float[] dash,
                   float dash_phase) 

b) OpenJUMP accepts only integers as line width
Test by hand editing an OpenJUMP project file
  <line enabled="true" width="4">
              <pattern enabled="false">3</pattern>
              <color>125, 0, 0, 255</color>
  </line>

Changing width to integer values is OK but a try with value 1.5 gives
ava.lang.Exception: Loading project file 'C:\temp\poista\linew.jmp' failed with 
the error:
For input string: "1.5".
        at 
org.openjump.core.ui.plugin.file.open.OpenProjectWizard.open(OpenProjectWizard.java:167)
        at 
org.openjump.core.ui.plugin.file.open.OpenProjectWizard.open(OpenProjectWizard.java:106)
        at 
org.openjump.core.ui.plugin.file.open.OpenProjectWizard.run(OpenProjectWizard.java:101)
        at 
org.openjump.core.ui.plugin.AbstractWizardPlugin.run(AbstractWizardPlugin.java:73)
        at 
com.vividsolutions.jump.workbench.ui.task.TaskMonitorManager$TaskWrapper.run(TaskMonitorManager.java:152)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NumberFormatException: For input string: "1.5"
        at java.lang.NumberFormatException.forInputString(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at java.lang.Integer.<init>(Unknown Source)
        at 
com.vividsolutions.jump.util.java2xml.XMLBinder$6.toJava(XMLBinder.java:161)
        at 
com.vividsolutions.jump.util.java2xml.XMLBinder.toJava(XMLBinder.java:373)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.attributeSpecFound(XML2Java.java:146)
        at 
com.vividsolutions.jump.util.java2xml.XMLBinder.visit(XMLBinder.java:366)
        at com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:75)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.access$000(XML2Java.java:39)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.fillerTagSpecFound(XML2Java.java:87)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.tagSpecFound(XML2Java.java:109)
        at 
com.vividsolutions.jump.util.java2xml.XMLBinder.visit(XMLBinder.java:360)
        at com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:75)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:217)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:165)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.setValueFromTag(XML2Java.java:239)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.setValuesFromTags(XML2Java.java:234)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.access$100(XML2Java.java:39)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.normalTagSpecFound(XML2Java.java:92)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.tagSpecFound(XML2Java.java:111)
        at 
com.vividsolutions.jump.util.java2xml.XMLBinder.visit(XMLBinder.java:360)
        at com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:75)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.access$000(XML2Java.java:39)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.fillerTagSpecFound(XML2Java.java:87)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.tagSpecFound(XML2Java.java:109)
        at 
com.vividsolutions.jump.util.java2xml.XMLBinder.visit(XMLBinder.java:360)
        at com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:75)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:217)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:165)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.setValueFromTag(XML2Java.java:239)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.setValuesFromTags(XML2Java.java:234)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.access$100(XML2Java.java:39)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.normalTagSpecFound(XML2Java.java:92)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.tagSpecFound(XML2Java.java:111)
        at 
com.vividsolutions.jump.util.java2xml.XMLBinder.visit(XMLBinder.java:360)
        at com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:75)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:217)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.setValueFromTag(XML2Java.java:239)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.setValuesFromTags(XML2Java.java:234)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.access$100(XML2Java.java:39)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.normalTagSpecFound(XML2Java.java:92)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.tagSpecFound(XML2Java.java:111)
        at 
com.vividsolutions.jump.util.java2xml.XMLBinder.visit(XMLBinder.java:360)
        at com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:75)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.access$000(XML2Java.java:39)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.fillerTagSpecFound(XML2Java.java:87)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java$1.tagSpecFound(XML2Java.java:109)
        at 
com.vividsolutions.jump.util.java2xml.XMLBinder.visit(XMLBinder.java:360)
        at com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:75)
        at 
com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:217)
        at com.vividsolutions.jump.util.java2xml.XML2Java.read(XML2Java.java:57)
        at 
org.openjump.core.ui.plugin.file.open.OpenProjectWizard.open(OpenProjectWizard.java:124)
        ... 5 more
 
Also SLDImported defines line width to be integer in 
http://jump-pilot.sourceforge.net/javadoc/openjump_javadoc/org/openjump/util/SLDImporter.StrokeStyle.html.
However, according to SLD standard " Reference number of this OGC(r) document: 
OGC 05-077r4" fractional line widths are allowed:

"The "stroke-width" SvgParameter element gives the absolute width (thickness) 
of a
stroke in units of measure as defined in the LineSymbolizer encoded as a float. 
The
default is 1.0. Fractional numbers are allowed (with a system-dependent 
interpretation)
but negative numbers are not."


-Jukka Rahkonen-

------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk
_______________________________________________
Jump-pilot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to