ThinkGeo.com    |     Documentation    |     Premium Support

Custom arrow line style?

Hi,


I've been asked whether it's possible to utilize an arrow line style ?


As far as I can se, I need to build and employ a custom LineDashStyle, but how ?


All examples, pointers and suggestions are welcome.


Cheers.


 



Lars,


An arrow style is not too tough.  You need to use the StartCap and EndCap property on the Geopen.  I have included a few lines of sample code to show you. From the code you can see it can be used directly on the LineStyle. Also there is a picture to show you what it would look like.


            mapShape4.ZoomLevels.ZoomLevel01.DefaultLineStyle = new LineStyle(new GeoPen(GeoColor.StandardColors.Red, 14));

            mapShape4.ZoomLevels.ZoomLevel01.DefaultLineStyle.OuterPen.EndCap = DrawingLineCap.ArrowAnchor;

            mapShape4.ZoomLevels.ZoomLevel01.DefaultLineStyle.OuterPen.StartCap = DrawingLineCap.ArrowAnchor;

 




Thanks David,


Are there any caveats to this ?


I'm applying the end cap changes to my (stand-alone) LineStyle object, which I then serialize using base64 (for storage in a database). When I retrieve (read and decode) and apply it to the feature, the end cap information is apparently lost, and the line is shown with the default rounded cap. The rest of the line style attributtes (color, width etc.) are intact.


Is it the serialization that strips my end cap info, or could something else  be wrong ?


Cheers.


 



Hi,


I'm still working on this. Apparently, the style object reports the caps to be 'ArrowAnchor', but they're not shown.as such in the display.


On a side note:


In the DrawCore routine in my custom symbology object (Inherits LineStyle), I have a loop going thru the features in the features collection passed as argument. Is is built so, that a polyline with multiple line segments is passed to DrawCore as a collection of simple lines (i.e. straight lines with start and end points) ?


I seem to receive multiple features even though I only have a single polyline ?


Cheers.


 



Ah, got it :-)


The "culprit" was me failing to appriciate that a line style has three distinct drawing components, OuterPen, InnerPen, and CenterPen.


I was using CreateSimpleLineStyle to create a line style with (as it turns out) only a center line component, and only setting the end cap properties on OuterPen and InnerPen, which (of course) made no display difference whatsoever.


Setting the end cap property on CenterPen did the trick :-)


Cheers.


 



Lars I, 
  
 Sorry for delaying your questions and thanks for sharing your idea. I think there is some issues during the serialization, we have added it to the our issue list and check it out later. 
  
 Thanks and let me know if you have more questions. 
  
 Thanks, 
 Howard

Hi again,


Still issues with arrowed line styles, I'm afraid.


As per my last post, the interactive display now works fine. But my app also includes a routine that draws the map image onto a PDF, using the PDF extension provided with Map Suite.


It seems that setting EndCap's to ArrowAnchor works fine, but setting the StartCap property throws an exception ! To be fair, I haven't tested any StartCap values other than (the default) "Round" and "ArrowAnchor".


The precise error message is as follows (if it gives any clues) :




[NotSupportedException: Specified method is not supported.]
   ThinkGeo.MapSuite.Core.PdfGeoCanvas.xce9efe48ac37f443(DrawingLineCap x924d47924ddd687d) +73
   ThinkGeo.MapSuite.Core.PdfGeoCanvas.xf23b15e646fcae4d(GeoPen x90279591611601bc) +326
   ThinkGeo.MapSuite.Core.PdfGeoCanvas.xbb05d5a723766091(IEnumerable`1 x848e9a85f0afcfc0, GeoPen x316ea114932829fc, Single xf79f95b297b243b5, Single x77628737d203d4ed) +75
   ThinkGeo.MapSuite.Core.PdfGeoCanvas.x1f0b4fcba039b0b8(Collection`1 xf6035ba09c7c2cc2) +1318
   ThinkGeo.MapSuite.Core.PdfGeoCanvas.EndDrawingCore() +251
   ThinkGeo.MapSuite.Core.GeoCanvas.EndDrawing() +29


Is there a way to enable StartCap drawing in the PDF extension, or is it a permanent no-go ?


Thanks.


 



And by closer examination of the PDF output, the EndCap isn't drawn onto the PDF at all, it just doesn't throw an exception.




Cheers.


 



Lars I,  
  
 Sorry that we are on vacation these two days, so we don’t have the environment to test. We’ll test it this weekend and let your know the result. Sorry for the inconvenience. 
  
 Thanks, 
 Howard

Lars I, 
  
 Yes, the EndCap isn’t drawn onto the PDF at all, you just could set the StartCap property and make it work. 
 Sorry for the inconvenience, we only support Flat, Round, Square of StartCap property, and if you set any other value, the NotSupportedException will throw. 
  
 Thanks, 
  
 Khalil

Hi Khalil,


The map display supports ArroweAnchor in both ends, it's only the PdfExtension that doesn't.


And swapping StartCaps with EndCaps will require reversing the polylines, to ensure having the cap in the right end. Not very neat, imho.


But if the StartCap doesn't support ArrowAnchor in PdfExtension regardless, there's no way at all to draw an arrowed polyline onto a PDF - is this not so ?


Cheers.


 



Lars I,


Here is a workaround for you temporarily. First off you need to draw the arrow polyline feature onto a bitmap object, and then draw this bitmap onto a PDF document. The attachment you could refer to.


Thanks,


Khalil



1809-UsePdfExtension.zip (2.86 KB)