I wrote a piece of code a while ago for colouring lines depending on what was in a certain column. I struggled through it, but managed to get it to work. Now, I want to write a piece of code that will do the same for points, rather than lines. I'm presuming I can alter my existing code slightly to do this but I can't for the life of me figure it out! It doesn't help that I'm not that experienced with MapBasic, and have forgotten most of what I learned the first time round!
Here is my existing code. It looks at what each entry in the table has in column called 'symbology', and changes the colour and line style as such.
My new code will need to make all points a size 5 circle (from Map Symbols font) with a border. The only thing that will change will be the colour.
Include "MapBasic.def" Declare Sub Main Declare Function ChangeLineColour (ByVal objTarget as Object, ByVal stringAttribute as String) as Object Sub Main() Update ww_gravity_pipe_location set Obj = ChangeLineColour(obj, symbology) End Sub Function ChangeLineColour (ByVal objTarget as Object, ByVal stringAttribute as String) as Object Dim curPen, newPen as Pen Dim penWidth, penPattern, penColour as Integer '// check that the object is a line object, if not just return the original object If Not ObjectInfo(objTarget, OBJ_INFO_TYPE) = Any(OBJ_TYPE_LINE, OBJ_TYPE_PLINE) then ChangeLineColour = objTarget Exit Function End if '// get the current pen style curPen = ObjectInfo(objTarget, OBJ_INFO_PEN) '// get the individual style attributes of the current pen '// set the new pen colour based on the numerical attribute Do Case stringAttribute Case "Surface Water (S)" penColour = BLUE penWidth = 2 Case "Combined (C)" penColour = RED penWidth = 2 Case "Foul (F)" penColour = 11239175 penWidth = 2 Case "Proposed" penColour = GREEN penWidth = 2 penPattern = 12 Case "Abandoned" penColour = 9079434 penWidth = 2 penPattern = 112 End Case '// - Colour codes from http://www.tydac.ch/color/ '// create a new pen with the new colour newPen = MakePen(penWidth, penPattern, penColour) '// alter the object we passed into the function to use the new pen Alter Object objTarget Info OBJ_INFO_PEN, newPen '// return the altered object to the update statement ChangeLineColour = objTarget End Function
All the cases will remain the same, so they don't need to be changed.
I'm guessing I need to change all the 'pens' to 'symbols' or something along those lines.