ThinkGeo.com    |     Documentation    |     Premium Support

Trouble with Transparency

I am Creating several Shape Objects on the map that  have a transparency 


 bcolor = GeoColor.FromArgb(48,128,0,0)


When I draw this shape it Look Great.


however , if I remove the shape from the layer


mylayer.InternalFeatures.Clear()


then re add the shape  I find the transparency slowly goes away.


These features are constantly changing and I have to update them every  10 seconds.


My Approach is the Clear the Feature layer  then re add the updated items.


each update causes the Transparency to become less significant to the point that after a minute it is completely solid.


 the style for the object is defined as


    ValueStyle.ValueItems.Add(New ValueItem(name, AreaStyles.CreateSimpleAreaStyle(fcolor, lcolor, lwidth, LineDashStyle.Solid)))


One thing I have noticed is that it only seems to happed with a fill color.


Drawing a line with transparency doesnt seem to be affected.


Any Thoughts would be appreciated.



Hi Steve, 
  
 Could you please provide a sample which could recreate the issue? Then we can debug it and find out the problems quickly. 
  
 Thanks, 
  
 Edgar

sub testfill()


 


Public SectorLayer As InMemoryFeatureLayer = New InMemoryFeatureLayer() '

  Public MainOverlay As LayerOverlay = New LayerOverlay()

 


     SectorLayer.FeatureSource.Open()

        SectorLayer.Columns.Add(New FeatureSourceColumn("Name"))  'Each Sector has a name

        SectorLayer.Close()


   MainOverlay.Layers.Add(SectorLayer.Name,SectorLayer)

    Form1.WinformsMap1.Overlays.Add("MainOverlay", MainOverlay)

 


Dim Points(5) as string


points(0)= "-75.123 45.123"    ' Create the Points for a square


points(1) = "-75.223,45.123"


points(2) = "-75.223 45.223"


points(3) = "-75.123  45.223"


points(4) = "-75.123 45.123"


 dim fill as geocolor


for i=1 to 100


     thread.sleep(1000)  ' wait one second


     fill = geocolor.fromargb(25,255,0,0)  '   Mostly transparent red


     drawpolygon("Test",Sectorlayer,points,geocolor.simplecolors.yellow,fill,2)


next i


end sub


 


 


Public Sub DrawPolygon(ByVal name As String, ByRef lyr As InMemoryFeatureLayer, ByVal pts() As String, ByVal lcolor As GeoColor, ByVal fcolor As GeoColor, ByVal lwidth As Integer)

        'create a polygon 

        ''   Dim poly As PolygonShape



        Try

            lyr.InternalFeatures.Remove(name) 'Attempt to remove the feature if it exists.



        Catch ex As Exception

        End Try



        Dim columnValuesForLine As New Dictionary(Of String, String)

        columnValuesForLine.Add("Name", name)



        Dim ValueStyle As ValueStyle = New ValueStyle()

        ValueStyle.ColumnName = "Name"



        ValueStyle.ValueItems.Add(New ValueItem(name, AreaStyles.CreateSimpleAreaStyle(fcolor, lcolor, lwidth, LineDashStyle.Solid)))



        lyr.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(ValueStyle)

        lyr.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20



      

        Dim lstring As String = "POLYGON(("

        For p As Integer = 0 To pts.Count - 1

            lstring &= pts(p)

            If p < pts.Count - 1 Then lstring &= ","

        Next

        lstring &= "))"

        ''  poly = New PolygonShape(lstring)

        Try

            lyr.InternalFeatures.Add(name, New Feature(BaseShape.CreateShapeFromWellKnownData(lstring), columnValuesForLine))

        Catch ex As Exception

        End Try

    End Sub




 So I let the application run for about 10 minutes .  updating every 10 seconds. 
 The result was that the Map.refresh took longer and longer to the point the system appeared to lock up.   
 This leads me to believe that although the layer visibly clears , there is some sort of memory hole. The previously removed items are still there.   
  
 Does a layer.internalfeatures.clear()   actually remove the items or just make them invisible.   
  
 Again. this only appears to be an issue with Polygon Fills. 


Hi Steve, 
  
 Thanks for your code, the reason is that you put the lyr.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(ValueStyle) in the method which will loop 100 times, so the customStyles become more and more so the polygon would be drawn many times, please set the styles  outside of the loop and everything will be OK. 
  
 Regards, 
 Edgar

Ahh. That actually makes sense.  The reason I have it this way is because the Styles can change every iteration. 
  
 Can the custom styles be removed along with the features? 


I think so, you may clear the customstyles and add a new one into it every time. 
  


Absolutely…we’ve had code in place to restyle several layers on demand for a couple of years: 
  
 facilityLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Clear(); 
 facilityLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(normalFacilityStyle); 
 facilityLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
  
 Allen 



 Perfect.  That’s what I was missing. 


Hi Allen,  
  
 Thanks for providing that code!