# Confusion over points & features

**URL:** <https://community.thinkgeo.com/t/confusion-over-points-features/1403>\
**Category:** WinForms\
**Created:** [August 30, 2010, 3:36am UTC](https://community.thinkgeo.com/t/confusion-over-points-features/1403 "2010-08-30T03:36:20Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![David4](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/d/8e7dd6/32.png) [@David4](https://community.thinkgeo.com/u/David4)\
**Post date:** [August 30, 2010, 3:36am UTC](https://community.thinkgeo.com/t/confusion-over-points-features/1403/1 "2010-08-30T03:36:20Z")

</div>

Is&nbsp;there&nbsp;anywhere&nbsp;that&nbsp;explains&nbsp;simply&nbsp;the&nbsp;principles&nbsp;of&nbsp;shapes&nbsp;&&nbsp;features&nbsp;&&nbsp;the&nbsp;differences&nbsp;between&nbsp;them?

For&nbsp;example,&nbsp;are&nbsp;the&nbsp;following&nbsp;2&nbsp;statements&nbsp;true?

1)&nbsp;Features&nbsp;can&nbsp;have&nbsp;labels&nbsp;but&nbsp;shapes&nbsp;cannot.

2)&nbsp;Shapes&nbsp;can&nbsp;be&nbsp;rotated&nbsp;&&nbsp;moved&nbsp;but&nbsp;features&nbsp;cannot.

Looking&nbsp;at&nbsp;example&nbsp;projects,&nbsp;whenever&nbsp;I&nbsp;see&nbsp;sample&nbsp;code&nbsp;for&nbsp;labels,&nbsp;it&nbsp;is&nbsp;associated&nbsp;with&nbsp;features,&nbsp;not&nbsp;shapes,&nbsp;but&nbsp;whenever&nbsp;I&nbsp;see&nbsp;sample&nbsp;code&nbsp;for&nbsp;moving&nbsp;&&nbsp;rotating,&nbsp;the&nbsp;code&nbsp;is&nbsp;associated&nbsp;with&nbsp;shapes,&nbsp;not&nbsp;features.

What&nbsp;I&nbsp;was&nbsp;originally&nbsp;trying&nbsp;to&nbsp;do&nbsp;was&nbsp;have&nbsp;a&nbsp;shape&nbsp;(a&nbsp;ship)&nbsp;which&nbsp;I&nbsp;could&nbsp;move&nbsp;&&nbsp;rotate&nbsp;&&nbsp;label,&nbsp;after&nbsp;reading&nbsp;the&nbsp;data&nbsp;from&nbsp;a&nbsp;SQL&nbsp;Server&nbsp;2008&nbsp;table&nbsp;(with&nbsp;no&nbsp;spatial&nbsp;data&nbsp;in&nbsp;it).&nbsp;I&nbsp;got&nbsp;all&nbsp;done&nbsp;apart&nbsp;from&nbsp;the&nbsp;labeling.&nbsp;It&nbsp;seemed&nbsp;I&nbsp;needed&nbsp;to&nbsp;be&nbsp;using&nbsp;features&nbsp;instead&nbsp;of&nbsp;shapes&nbsp;to&nbsp;get&nbsp;labeling&nbsp;done&nbsp;but&nbsp;that&nbsp;brought&nbsp;up&nbsp;problems&nbsp;of&nbsp;then&nbsp;not&nbsp;being&nbsp;able&nbsp;to&nbsp;move&nbsp;or&nbsp;rotate&nbsp;features....

I&nbsp;seem&nbsp;to&nbsp;spend&nbsp;more&nbsp;time&nbsp;trying&nbsp;to&nbsp;find&nbsp;examples&nbsp;than&nbsp;actually&nbsp;reading&nbsp;them.&nbsp;There&nbsp;are&nbsp;C#&nbsp;sample&nbsp;&&nbsp;VB&nbsp;samples&nbsp;to&nbsp;choose&nbsp;from,&nbsp;then&nbsp;if&nbsp;I&nbsp;find&nbsp;a&nbsp;VB&nbsp;sample&nbsp;it&nbsp;invariably&nbsp;is&nbsp;in&nbsp;VB.Net&nbsp;2005&nbsp;or&nbsp;something&nbsp;else&nbsp;old&nbsp;that&nbsp;VB.Net&nbsp;2010&nbsp;can't&nbsp;read&nbsp;because&nbsp;it&nbsp;has&nbsp;a&nbsp;vbproj&nbsp;file.&nbsp;I&nbsp;will&nbsp;certainly&nbsp;be&nbsp;looking&nbsp;forward&nbsp;to&nbsp;the&nbsp;day&nbsp;when&nbsp;we&nbsp;get&nbsp;a&nbsp;real&nbsp;user&nbsp;manual,&nbsp;even&nbsp;if&nbsp;it&nbsp;is&nbsp;in&nbsp;the&nbsp;form&nbsp;of&nbsp;a&nbsp;Wiki&nbsp;-&nbsp;trying&nbsp;to&nbsp;work&nbsp;from&nbsp;examples&nbsp;and&nbsp;an&nbsp;API&nbsp;document&nbsp;involves&nbsp;a&nbsp;huge&nbsp;learning&nbsp;curve.

Dave

---

<div class="post-metadata">

**Author:** ![Ted](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/t/db5fbb/32.png) [@Ted](https://community.thinkgeo.com/u/Ted)\
**Post date:** [August 30, 2010, 1:09pm UTC](https://community.thinkgeo.com/t/confusion-over-points-features/1403/2 "2010-08-30T13:09:15Z")

</div>

I’m&nbsp;a&nbsp;customer,&nbsp;rather&nbsp;than&nbsp;support,&nbsp;but&nbsp;I&nbsp;might&nbsp;be&nbsp;able&nbsp;to&nbsp;help&nbsp;a&nbsp;little.&nbsp;  
&nbsp;&nbsp;  
&nbsp;A&nbsp;shape&nbsp;is&nbsp;the&nbsp;actual&nbsp;geometry&nbsp;object&nbsp;that&nbsp;gets&nbsp;drawn.&nbsp;&nbsp;A&nbsp;shape&nbsp;has&nbsp;no&nbsp;properties&nbsp;other&nbsp;than&nbsp;it’s&nbsp;geometry…&nbsp;whether&nbsp;a&nbsp;point,&nbsp;line,&nbsp;polygon,&nbsp;etc.&nbsp;&nbsp;&nbsp;And,&nbsp;David&nbsp;would&nbsp;indicate&nbsp;that’s&nbsp;an&nbsp;oversimplification.&nbsp;&nbsp;&nbsp;Actually,&nbsp;what&nbsp;gets&nbsp;drawn&nbsp;is&nbsp;binary&nbsp;data&nbsp;and&nbsp;the&nbsp;shape&nbsp;is&nbsp;a&nbsp;wrapper&nbsp;tha&nbsp;exposes&nbsp;that&nbsp;data&nbsp;in&nbsp;a&nbsp;way&nbsp;that&nbsp;is&nbsp;fairly&nbsp;standard&nbsp;in&nbsp;a&nbsp;GIS.&nbsp;  
&nbsp;&nbsp;  
&nbsp;A&nbsp;feature&nbsp;is&nbsp;an&nbsp;object&nbsp;that&nbsp;contains&nbsp;a&nbsp;logical&nbsp;shape,&nbsp;along&nbsp;with&nbsp;a&nbsp;collection&nbsp;of&nbsp;other&nbsp;attributes.&nbsp;&nbsp;&nbsp;Many&nbsp;of&nbsp;the&nbsp;drawing&nbsp;functions&nbsp;take&nbsp;a&nbsp;collection&nbsp;of&nbsp;features,&nbsp;and&nbsp;a&nbsp;related&nbsp;style&nbsp;may&nbsp;reference&nbsp;one&nbsp;or&nbsp;more&nbsp;attributes&nbsp;of&nbsp;the&nbsp;feature&nbsp;in&nbsp;order&nbsp;to&nbsp;determine&nbsp;visual&nbsp;presentation&nbsp;and&nbsp;label&nbsp;placement.&nbsp;&nbsp;&nbsp;&nbsp;One&nbsp;can&nbsp;query&nbsp;a&nbsp;shape&nbsp;out&nbsp;of&nbsp;a&nbsp;feature,&nbsp;or&nbsp;construct&nbsp;a&nbsp;feature&nbsp;around&nbsp;a&nbsp;shape.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Think&nbsp;of&nbsp;a&nbsp;shape&nbsp;as&nbsp;the&nbsp;geometry&nbsp;part&nbsp;of&nbsp;a&nbsp;shapefile,&nbsp;and&nbsp;a&nbsp;feature&nbsp;as&nbsp;the&nbsp;equivalent&nbsp;row&nbsp;in&nbsp;the&nbsp;.dbf,&nbsp;with&nbsp;the&nbsp;shape&nbsp;embedded.&nbsp;  
&nbsp;&nbsp;  
&nbsp;It&nbsp;is&nbsp;so&nbsp;incredibly&nbsp;easy&nbsp;create&nbsp;your&nbsp;own&nbsp;layers,&nbsp;deriving&nbsp;from&nbsp;the&nbsp;ThinkGeo&nbsp;layer,&nbsp;that&nbsp;we&nbsp;have&nbsp;become&nbsp;less&nbsp;and&nbsp;less&nbsp;dependent&nbsp;upon&nbsp;the&nbsp;native&nbsp;Feature&nbsp;classes.&nbsp;&nbsp;It’s&nbsp;pretty&nbsp;easy&nbsp;to&nbsp;draw&nbsp;directly&nbsp;to&nbsp;the&nbsp;canvas&nbsp;or&nbsp;via&nbsp;a&nbsp;style&nbsp;within&nbsp;the&nbsp;DrawCore&nbsp;implementation&nbsp;of&nbsp;your&nbsp;own&nbsp;layer&nbsp;object.&nbsp;&nbsp;&nbsp;If&nbsp;you&nbsp;have&nbsp;to&nbsp;do&nbsp;much&nbsp;work&nbsp;to&nbsp;construct&nbsp;a&nbsp;feature,&nbsp;you&nbsp;might&nbsp;be&nbsp;happiest&nbsp;just&nbsp;having&nbsp;your&nbsp;own&nbsp;class&nbsp;and&nbsp;draw/label&nbsp;things&nbsp;exactly&nbsp;the&nbsp;way&nbsp;you&nbsp;want&nbsp;from&nbsp;your&nbsp;own&nbsp;business&nbsp;objects.&nbsp;  
&nbsp;&nbsp;  
&nbsp;We&nbsp;have&nbsp;objects&nbsp;that&nbsp;we&nbsp;want&nbsp;drawn&nbsp;rotated.&nbsp;&nbsp;They&nbsp;are&nbsp;actually&nbsp;grids.&nbsp;&nbsp;&nbsp;We&nbsp;have&nbsp;a&nbsp;single&nbsp;record&nbsp;defines&nbsp;the&nbsp;origin&nbsp;and&nbsp;rotation&nbsp;of&nbsp;the&nbsp;grid,&nbsp;as&nbsp;well&nbsp;as&nbsp;the&nbsp;cell&nbsp;size&nbsp;and&nbsp;number&nbsp;of&nbsp;rows&nbsp;and&nbsp;columns.&nbsp;&nbsp;&nbsp;Each&nbsp;cell&nbsp;is&nbsp;divided&nbsp;into&nbsp;another&nbsp;grid.&nbsp;&nbsp;Depending&nbsp;upon&nbsp;scale,&nbsp;we&nbsp;want&nbsp;to&nbsp;display&nbsp;only&nbsp;the&nbsp;grid&nbsp;boundary,&nbsp;the&nbsp;main&nbsp;cells,&nbsp;or&nbsp;the&nbsp;subcells.&nbsp;&nbsp;&nbsp;We&nbsp;used&nbsp;to&nbsp;create&nbsp;a&nbsp;collection&nbsp;of&nbsp;features&nbsp;for&nbsp;each&nbsp;cell,&nbsp;and&nbsp;a&nbsp;collection&nbsp;of&nbsp;features&nbsp;that&nbsp;were&nbsp;the&nbsp;subcells.&nbsp;&nbsp;But&nbsp;we&nbsp;had&nbsp;to&nbsp;do&nbsp;the&nbsp;math&nbsp;to&nbsp;generate&nbsp;them&nbsp;dynamically,&nbsp;anyway.&nbsp;&nbsp;&nbsp;We&nbsp;ended&nbsp;up&nbsp;creating&nbsp;a&nbsp;derived&nbsp;layer&nbsp;and&nbsp;we&nbsp;just&nbsp;do&nbsp;the&nbsp;calculations&nbsp;dynamically&nbsp;in&nbsp;the&nbsp;draw&nbsp;core&nbsp;method.&nbsp;&nbsp;&nbsp;It&nbsp;was&nbsp;much&nbsp;easier&nbsp;than&nbsp;trying&nbsp;to&nbsp;create&nbsp;features&nbsp;and&nbsp;build&nbsp;styles&nbsp;to&nbsp;turn&nbsp;them&nbsp;on&nbsp;and&nbsp;off&nbsp;and&nbsp;color&nbsp;and&nbsp;label&nbsp;them&nbsp;appropriately.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;I&nbsp;guess&nbsp;it’s&nbsp;just&nbsp;what&nbsp;you&nbsp;get&nbsp;used,&nbsp;too,&nbsp;but&nbsp;we&nbsp;are&nbsp;a&nbsp;fan&nbsp;of&nbsp;rolling&nbsp;your&nbsp;own&nbsp;layers&nbsp;that&nbsp;wrap&nbsp;your&nbsp;native&nbsp;business&nbsp;objects.&nbsp;

---

<div class="post-metadata">

**Author:** ![ThinkGeo](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/thinkgeo/32/25029_2.png) [@ThinkGeo](https://community.thinkgeo.com/u/ThinkGeo)\
**Post date:** [August 30, 2010, 1:44pm UTC](https://community.thinkgeo.com/t/confusion-over-points-features/1403/3 "2010-08-30T13:44:33Z")

</div>

David,&nbsp;  
&nbsp;&nbsp;  
&nbsp;I&nbsp;think&nbsp;Ted’s&nbsp;answer&nbsp;is&nbsp;very&nbsp;good,&nbsp;it’s&nbsp;better&nbsp;than&nbsp;my&nbsp;words,&nbsp;Thanks&nbsp;for&nbsp;your&nbsp;help,&nbsp;Ted.&nbsp;  
&nbsp;&nbsp;  
&nbsp;In&nbsp;short,&nbsp;basically&nbsp;feature&nbsp;is&nbsp;shape&nbsp;+&nbsp;columnValues&nbsp;which&nbsp;is&nbsp;a&nbsp;dictionary&nbsp;of&nbsp;values&nbsp;represent&nbsp;column&nbsp;data&nbsp;related&nbsp;to&nbsp;this&nbsp;feature.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Please&nbsp;let&nbsp;me&nbsp;know&nbsp;if&nbsp;you&nbsp;have&nbsp;more&nbsp;questions&nbsp;about&nbsp;that.&nbsp;&nbsp;  
&nbsp;Thanks&nbsp;  
&nbsp;James

---

<div class="post-metadata">

**Author:** ![David](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@David](https://community.thinkgeo.com/u/David)\
**Post date:** [August 31, 2010, 3:48am UTC](https://community.thinkgeo.com/t/confusion-over-points-features/1403/4 "2010-08-31T03:48:27Z")

</div>

Guys,&nbsp;  
&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;If&nbsp;there&nbsp;is&nbsp;one&nbsp;thing&nbsp;I&nbsp;would&nbsp;change&nbsp;about&nbsp;our&nbsp;API&nbsp;it&nbsp;would&nbsp;be&nbsp;to&nbsp;merge&nbsp;the&nbsp;Feature&nbsp;and&nbsp;Shape.&nbsp;&nbsp;It&nbsp;is&nbsp;the&nbsp;source&nbsp;of&nbsp;allot&nbsp;of&nbsp;confusion&nbsp;out&nbsp;there.&nbsp;&nbsp;It’s&nbsp;funny&nbsp;because&nbsp;when&nbsp;I&nbsp;designed&nbsp;the&nbsp;feature&nbsp;and&nbsp;the&nbsp;shape&nbsp;I&nbsp;thought&nbsp;it&nbsp;was&nbsp;a&nbsp;very&nbsp;good&nbsp;idea&nbsp;and&nbsp;was&nbsp;a&nbsp;big&nbsp;improvement&nbsp;over&nbsp;Map&nbsp;Suite&nbsp;2.0.&nbsp;&nbsp;Here&nbsp;is&nbsp;a&nbsp;little&nbsp;history&nbsp;on&nbsp;how&nbsp;it&nbsp;came&nbsp;to&nbsp;be…&nbsp;  
&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;I&nbsp;the&nbsp;beginning,&nbsp;well&nbsp;Map&nbsp;Suite&nbsp;1.0/2.0&nbsp;more&nbsp;precisely,&nbsp;we&nbsp;only&nbsp;had&nbsp;shapes.&nbsp;&nbsp;What&nbsp;I&nbsp;mean&nbsp;by&nbsp;shapes&nbsp;are&nbsp;high&nbsp;level&nbsp;classes&nbsp;like&nbsp;Polygon&nbsp;which&nbsp;is&nbsp;a&nbsp;class&nbsp;and&nbsp;has&nbsp;collections&nbsp;of&nbsp;things&nbsp;like&nbsp;inner&nbsp;rings&nbsp;which&nbsp;in&nbsp;turn&nbsp;has&nbsp;collections&nbsp;of&nbsp;smaller&nbsp;things&nbsp;like&nbsp;points.&nbsp;&nbsp;Life&nbsp;was&nbsp;good,&nbsp;but&nbsp;slow…&nbsp;&nbsp;The&nbsp;problem&nbsp;was&nbsp;that&nbsp;drawing&nbsp;was&nbsp;action&nbsp;the&nbsp;map&nbsp;did&nbsp;more&nbsp;than&nbsp;anything&nbsp;else&nbsp;and&nbsp;in&nbsp;drawing&nbsp;we&nbsp;read&nbsp;the&nbsp;binary&nbsp;data,&nbsp;convert&nbsp;it&nbsp;to&nbsp;a&nbsp;shape&nbsp;and&nbsp;then&nbsp;draw&nbsp;it.&nbsp;&nbsp;We&nbsp;wanted&nbsp;to&nbsp;convert&nbsp;the&nbsp;raw&nbsp;data&nbsp;to&nbsp;a&nbsp;shape&nbsp;so&nbsp;that&nbsp;through&nbsp;our&nbsp;API&nbsp;it&nbsp;would&nbsp;be&nbsp;easy&nbsp;for&nbsp;our&nbsp;users&nbsp;to&nbsp;get&nbsp;the&nbsp;shapes&nbsp;and&nbsp;possibly&nbsp;manipulate&nbsp;them.&nbsp;&nbsp;The&nbsp;problem&nbsp;was&nbsp;that&nbsp;for&nbsp;every&nbsp;drawing&nbsp;cycle&nbsp;the&nbsp;shapes&nbsp;were&nbsp;throw&nbsp;away,&nbsp;meaning&nbsp;after&nbsp;we&nbsp;drew&nbsp;them&nbsp;we&nbsp;no&nbsp;longer&nbsp;needed&nbsp;them.&nbsp;&nbsp;This&nbsp;was&nbsp;a&nbsp;problem&nbsp;because&nbsp;each&nbsp;polygon&nbsp;was&nbsp;a&nbsp;big&nbsp;object&nbsp;and&nbsp;it&nbsp;had&nbsp;lots&nbsp;of&nbsp;little&nbsp;objects&nbsp;in&nbsp;it.&nbsp;&nbsp;Drawing&nbsp;something&nbsp;like&nbsp;the&nbsp;world&nbsp;countries&nbsp;map&nbsp;would&nbsp;generate&nbsp;millions&nbsp;of&nbsp;classes&nbsp;and&nbsp;each&nbsp;of&nbsp;these&nbsp;had&nbsp;to&nbsp;be&nbsp;created&nbsp;and&nbsp;destroyed&nbsp;on&nbsp;the&nbsp;heap.&nbsp;&nbsp;I&nbsp;imagine&nbsp;it&nbsp;drove&nbsp;the&nbsp;garbage&nbsp;collector&nbsp;nuts&nbsp;since&nbsp;the&nbsp;scope&nbsp;of&nbsp;the&nbsp;variables&nbsp;were&nbsp;well&nbsp;outside&nbsp;of&nbsp;one&nbsp;function&nbsp;which&nbsp;meant&nbsp;they&nbsp;could&nbsp;possibly&nbsp;be&nbsp;promoted&nbsp;to&nbsp;higher&nbsp;levels&nbsp;of&nbsp;the&nbsp;memory&nbsp;hierarchy.&nbsp;  
&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;The&nbsp;solution,&nbsp;I&nbsp;thought&nbsp;at&nbsp;the&nbsp;time,&nbsp;would&nbsp;be&nbsp;to&nbsp;create&nbsp;a&nbsp;very&nbsp;lightweight&nbsp;structure,&nbsp;the&nbsp;feature,&nbsp;that&nbsp;at&nbsp;its&nbsp;core&nbsp;would&nbsp;be&nbsp;well&nbsp;known&nbsp;binary.&nbsp;&nbsp;This&nbsp;lightweight&nbsp;structure&nbsp;would&nbsp;be&nbsp;used&nbsp;in&nbsp;the&nbsp;main&nbsp;drawing&nbsp;cycle&nbsp;and&nbsp;always&nbsp;reside&nbsp;on&nbsp;the&nbsp;stack.&nbsp;&nbsp;If&nbsp;you&nbsp;had&nbsp;lots&nbsp;of&nbsp;these&nbsp;features&nbsp;then&nbsp;they&nbsp;would&nbsp;be&nbsp;stored&nbsp;in&nbsp;an&nbsp;array&nbsp;and&nbsp;get&nbsp;even&nbsp;better&nbsp;memory&nbsp;packing&nbsp;and&nbsp;efficiency.&nbsp;&nbsp;99%&nbsp;of&nbsp;the&nbsp;time&nbsp;you&nbsp;never&nbsp;actually&nbsp;have&nbsp;to&nbsp;touch&nbsp;the&nbsp;features&nbsp;as&nbsp;they&nbsp;are&nbsp;most&nbsp;commonly&nbsp;just&nbsp;drawn.&nbsp;&nbsp;The&nbsp;problem&nbsp;with&nbsp;a&nbsp;feature,&nbsp;as&nbsp;it&nbsp;was&nbsp;a&nbsp;light&nbsp;weight&nbsp;structure,&nbsp;was&nbsp;that&nbsp;it&nbsp;was&nbsp;not&nbsp;specialized&nbsp;like&nbsp;the&nbsp;LineShape&nbsp;and&nbsp;PolygonShape&nbsp;etc&nbsp;so&nbsp;you&nbsp;could&nbsp;not&nbsp;do&nbsp;much&nbsp;with&nbsp;it&nbsp;exect&nbsp;draw&nbsp;it&nbsp;or&nbsp;convert&nbsp;it&nbsp;to&nbsp;a&nbsp;shape.&nbsp;&nbsp;We&nbsp;wanted&nbsp;the&nbsp;shapes&nbsp;to&nbsp;be&nbsp;nice&nbsp;high&nbsp;level&nbsp;object&nbsp;with&nbsp;great&nbsp;intellisense&nbsp;and&nbsp;a&nbsp;rich&nbsp;straight&nbsp;forward&nbsp;API.&nbsp;&nbsp;They&nbsp;were&nbsp;heavier&nbsp;than&nbsp;the&nbsp;feature&nbsp;but&nbsp;we&nbsp;thought&nbsp;the&nbsp;trade&nbsp;off&nbsp;was&nbsp;good.&nbsp;&nbsp;It&nbsp;was&nbsp;easy,&nbsp;of&nbsp;course,&nbsp;to&nbsp;convert&nbsp;a&nbsp;feature&nbsp;to&nbsp;a&nbsp;shape&nbsp;and&nbsp;vice&nbsp;versa.&nbsp;&nbsp;We&nbsp;also&nbsp;included&nbsp;overloads&nbsp;to&nbsp;take&nbsp;both&nbsp;shapes&nbsp;and&nbsp;features&nbsp;in&nbsp;nearly&nbsp;every&nbsp;API.&nbsp;&nbsp;If&nbsp;you&nbsp;wanted&nbsp;to&nbsp;loop&nbsp;through&nbsp;the&nbsp;rings&nbsp;of&nbsp;a&nbsp;polygon&nbsp;and&nbsp;looks&nbsp;at&nbsp;its&nbsp;points&nbsp;then&nbsp;the&nbsp;shape&nbsp;was&nbsp;for&nbsp;you.&nbsp;&nbsp;If&nbsp;you&nbsp;wanted&nbsp;raw&nbsp;performance&nbsp;then&nbsp;the&nbsp;feature&nbsp;was&nbsp;the&nbsp;way&nbsp;to&nbsp;go.&nbsp;  
&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;There&nbsp;was&nbsp;a&nbsp;rub&nbsp;though&nbsp;and&nbsp;as&nbsp;Ted&nbsp;pointed&nbsp;out&nbsp;when&nbsp;we&nbsp;draw&nbsp;we&nbsp;many&nbsp;times&nbsp;need&nbsp;more&nbsp;than&nbsp;just&nbsp;the&nbsp;geometry&nbsp;data,&nbsp;we&nbsp;need&nbsp;column&nbsp;data.&nbsp;&nbsp;We&nbsp;had&nbsp;to&nbsp;tack&nbsp;on&nbsp;the&nbsp;ColumnValues&nbsp;to&nbsp;the&nbsp;feature&nbsp;and&nbsp;we&nbsp;did&nbsp;not&nbsp;do&nbsp;the&nbsp;same&nbsp;for&nbsp;the&nbsp;shape.&nbsp;&nbsp;Looking&nbsp;ahead&nbsp;we&nbsp;might&nbsp;just&nbsp;do&nbsp;that&nbsp;and&nbsp;make&nbsp;sure&nbsp;when&nbsp;you&nbsp;convert&nbsp;to&nbsp;and&nbsp;from&nbsp;that&nbsp;data&nbsp;is&nbsp;preserved.&nbsp;&nbsp;More&nbsp;than&nbsp;that&nbsp;the&nbsp;creation&nbsp;of&nbsp;the&nbsp;two&nbsp;brother&nbsp;classes&nbsp;created&nbsp;confusion.&nbsp;&nbsp;Couple&nbsp;that&nbsp;with&nbsp;less&nbsp;than&nbsp;stellar&nbsp;documentation,&nbsp;being&nbsp;gracious,&nbsp;in&nbsp;the&nbsp;end&nbsp;it&nbsp;caused&nbsp;more&nbsp;harm&nbsp;than&nbsp;good.&nbsp;&nbsp;We&nbsp;gained&nbsp;the&nbsp;performance,&nbsp;the&nbsp;shapes&nbsp;are&nbsp;nice&nbsp;and&nbsp;high&nbsp;level,&nbsp;but&nbsp;the&nbsp;end&nbsp;effect&nbsp;is&nbsp;that&nbsp;you&nbsp;feel&nbsp;like&nbsp;you&nbsp;are&nbsp;always&nbsp;getting&nbsp;one&nbsp;type&nbsp;when&nbsp;you&nbsp;need&nbsp;the&nbsp;other.&nbsp;&nbsp;It&nbsp;just&nbsp;didn’t&nbsp;work&nbsp;out&nbsp;so&nbsp;well.&nbsp;&nbsp;The&nbsp;other&nbsp;side&nbsp;effect&nbsp;was&nbsp;that&nbsp;average&nbsp;developer&nbsp;tend&nbsp;not&nbsp;to&nbsp;be&nbsp;very&nbsp;familiar&nbsp;in&nbsp;dealing&nbsp;with&nbsp;structures&nbsp;and&nbsp;their&nbsp;inherit&nbsp;differences&nbsp;with&nbsp;references&nbsp;types.&nbsp;&nbsp;With&nbsp;the&nbsp;features&nbsp;you&nbsp;always&nbsp;get&nbsp;copies&nbsp;as&nbsp;you&nbsp;pass&nbsp;it&nbsp;around&nbsp;and&nbsp;this&nbsp;can&nbsp;cause&nbsp;some&nbsp;strange&nbsp;effects&nbsp;and&nbsp;even&nbsp;more&nbsp;confusion.&nbsp;&nbsp;I&nbsp;get&nbsp;tripped&nbsp;up&nbsp;with&nbsp;it&nbsp;all&nbsp;the&nbsp;time&nbsp;especially&nbsp;when&nbsp;the&nbsp;feature&nbsp;is&nbsp;passed&nbsp;through&nbsp;an&nbsp;event’s&nbsp;arguments.&nbsp;  
&nbsp;&nbsp;  
&nbsp;&nbsp;&nbsp;The&nbsp;better&nbsp;solution&nbsp;came&nbsp;to&nbsp;me&nbsp;when&nbsp;it&nbsp;was&nbsp;released&nbsp;and&nbsp;already&nbsp;too&nbsp;late,&nbsp;as&nbsp;it&nbsp;seems&nbsp;to&nbsp;always&nbsp;go.&nbsp;&nbsp;I&nbsp;am&nbsp;not&nbsp;sure&nbsp;how&nbsp;we&nbsp;could&nbsp;shoe&nbsp;horn&nbsp;this&nbsp;in&nbsp;but&nbsp;I&nbsp;will&nbsp;explain&nbsp;the&nbsp;approach&nbsp;anyway.&nbsp;&nbsp;What&nbsp;I&nbsp;would&nbsp;do&nbsp;now&nbsp;is&nbsp;to&nbsp;just&nbsp;have&nbsp;shapes&nbsp;however&nbsp;I&nbsp;would&nbsp;change&nbsp;their&nbsp;nature&nbsp;a&nbsp;bit.&nbsp;&nbsp;I&nbsp;would&nbsp;add&nbsp;the&nbsp;ColumnValues&nbsp;to&nbsp;them&nbsp;so&nbsp;that&nbsp;they&nbsp;could&nbsp;be&nbsp;used&nbsp;in&nbsp;the&nbsp;drawing&nbsp;cycle.&nbsp;&nbsp;The&nbsp;reason&nbsp;I&nbsp;would&nbsp;go&nbsp;this&nbsp;route&nbsp;is&nbsp;because&nbsp;of&nbsp;the&nbsp;Vertex&nbsp;structure.&nbsp;&nbsp;In&nbsp;the&nbsp;3.0+&nbsp;model&nbsp;the&nbsp;shapes&nbsp;store&nbsp;their&nbsp;points&nbsp;as&nbsp;arrays&nbsp;of&nbsp;the&nbsp;Vertex&nbsp;structure.&nbsp;&nbsp;This&nbsp;means&nbsp;that&nbsp;we&nbsp;have&nbsp;a&nbsp;slight&nbsp;overhead&nbsp;of&nbsp;a&nbsp;few&nbsp;classes&nbsp;per&nbsp;record&nbsp;but&nbsp;the&nbsp;vast&nbsp;amount&nbsp;of&nbsp;point&nbsp;data&nbsp;is&nbsp;in&nbsp;structure&nbsp;form&nbsp;on&nbsp;the&nbsp;stack&nbsp;and&nbsp;very&nbsp;effective&nbsp;to&nbsp;store&nbsp;and&nbsp;collect.&nbsp;&nbsp;In&nbsp;hindsight&nbsp;we&nbsp;didn’t&nbsp;really&nbsp;need&nbsp;the&nbsp;feature&nbsp;and&nbsp;could&nbsp;have&nbsp;enhanced&nbsp;the&nbsp;shapes&nbsp;and&nbsp;made&nbsp;life&nbsp;easier&nbsp;for&nbsp;all.&nbsp;&nbsp;I&nbsp;am&nbsp;sure&nbsp;I&nbsp;am&nbsp;forgetting&nbsp;some&nbsp;critical&nbsp;aspect&nbsp;of&nbsp;this&nbsp;but&nbsp;thats&nbsp;my&nbsp;thoughts&nbsp;for&nbsp;now.&nbsp;&nbsp;The&nbsp;feature&nbsp;seemed&nbsp;like&nbsp;a&nbsp;good&nbsp;idea&nbsp;at&nbsp;the&nbsp;time&nbsp;and&nbsp;I&nbsp;apologize&nbsp;for&nbsp;saddling&nbsp;you&nbsp;all&nbsp;with&nbsp;it.&nbsp;:-(&nbsp;  
&nbsp;&nbsp;  
&nbsp;David
