我有一个构成数学集的对象列表。所以我想用椭圆形显示它们:
如果我然后添加一个新对象,椭圆应该增长,第六个元素应该放在椭圆内。
我以为我可以通过迭代来解决这个问题。在第一个地方object1
和集合名称并绘制椭圆。其次添加object2
并让椭圆增长,依此类推。
但是我已经努力为第一步的安排找到合适的解决方案,更不用说第二步中椭圆的增长了。我的第一步问题是,当集合名称和object1
具有小字符串表示时,椭圆应该更小。如果集合名称和object1
具有更长的字符串表示,则椭圆应该更大。
或者我是否走错了路?也许这个问题已经存在(框架?)解决方案,我忽略了。
答案 0 :(得分:0)
创建一个名为MyCount
的整数属性。
创建整数常量OriginalWidth和OriginalHeight。
创建整数变量ScaledWidth和ScaledHeight。
创建集后,将mySet.Name.Count()
添加到MyCount
。
添加对象时,请将myObject.SomeProperty.ToString().Count()
添加到MyCount
。
删除对象后,从myObject.SomeProperty.ToString().Count()
中减去MyCount
。
更改MyCount后,重新计算ScaledWidth
和ScaledHeight
- 类似ScaledWidth = OriginalWidth * (MyCount * [insert number here])
为了使椭圆保持正确的视角,椭圆的高度和宽度将基于常数值乘以比例因子MyCount
。您需要4个整数值:OriginalWidth
,OriginalHeight
,ScaledWidth
和ScaledHeight
。 OriginalWidth
和OriginalHeight
是定义椭圆的最小宽度和高度的整数常量。 ScaledWidth
和ScaledHeight
是您的Ellipse的高度和宽度属性绑定的整数变量。
每次向您的论坛添加或移除新对象时,其SomeProperty
中的字符数都会添加到MyCount
。每次MyCount
更改时,都会触发ScaledWidth
和ScaledHeight
的重新计算。将Ellipse的宽度和高度属性绑定到ScaledWidth
和ScaledHeight
,并在这些属性上实现INotifyPropertyChanged,应相应地缩放椭圆。
更新
此处发布的算法:http://programming.nullanswer.com/forum/11925似乎可以解决将子元素放在父椭圆中的问题。我在适当的地方用椭圆取代了正方形/圆形:
在[父椭圆]&内选择一个随机点。实例a此时的[非常低的宽度/高度椭圆]。 增加[椭圆]的半径,直到满足这些标准:
如果满足这些标准,请选择[椭圆]。