很显然Pro/E中的普通阵列是不能达到图(1)阵列的目的,Wildfire版本的填充阵列也不够灵活。或许你是会觉得这是一个“超低能”的问题,就那几个圆跟本不值得使用阵列。若然右图不是21个圆柱而是上百个呢?“劲搞笑”吧! 下文是详细讲解实现金字塔形状的Pro/E关系阵列。读者首先要对关系式阵列有初步认识,并了解lead_v、memb_v、memb_i、idx1、idx2的含义,否则看下去会十分痛苦。 |
图(2)需然是一个最简单的只有一个方向的阵列,仍可用下面的关系式来实现:
memb_v = lead_v + inc_h * idx1此关系式很好理解,不作解释,接着再看下图的变形。
或 memb_i = inc_h,虽然用memb_i更加简便,但接下来更复杂的例子memb_i将无法实现
对于图(3)我恳请大家不要理解为有idx1和idx2两个方向的阵列,这是很关键的一步。实际上上图是只有idx1的一个方向的阵列,只用idx1分别控制两个增量尺寸inc_h和inc_v。
水平方向可理解为与图(2)相比未作变更,关系式与图(2)一样,如下:
memb_v = lead_v + inc_h * idx1垂直方向与图(2)相比向上移了位,关系式如下:
group = floor ( idx1/5 )floor是Pro/E的内部符号,以舍去的方式取整的意思,如A = floor ( 3.2583 ),即A = 3。group是用来识别每5个一组而用的一个临时参数,下表为根据idx1的编号而得到的group和memb_v的值
memb_v = lead_v + inc_v * group
idx1 | group | 垂直方向的memb_v |
0 -- 4 | 0 | lead_v |
5 -- 9 | 1 | lead_v + inc_v *1 |
10 -- 14 | 2 | lead_v + inc_v *2 |
15 --19 | 3 | lead_v + inc_v *3 |
20 -- …… | 4 | lead_v + inc_v *4 |
完全理解上面的关系式后,将图(3)按下图(4)的形式变形得到图(5)。
图(5)仍是只有idx1的一个方向的阵列,也只用idx1分别控制两个增量尺寸inc_h和inc_v。水平方向与图(3)相比向左移了位,每一组移位的尺寸为5*group*inc_h。因此只要在图(3)的基础上减去尺寸5*group*inc_h即可得到移位。
group = floor ( idx1/5 )垂直方向可理解为与图(3)相比未作变更,关系式不变如下:
memb_v = lead_v + inc_h * idx1 – 5 * group * inc_h
group = floor ( idx1/5 )
memb_v = lead_v + inc_v * group
看到了这里,相信大家已经大概知道金字塔是如何阵列过来的吧。没错,金字塔其实也只有一个方向阵列,请看下面的图片。以一字长蛇的阵列变成金字塔的阵列要比图(3)变化成图(5)的过程复杂得多。
要令变形出现在1、3、6、10、15……的地, 其实关键是要推导出任意一个圆与row的关系的公式。从图(6)中可以看出,任意row所对应的第一个圆的编号与该row编号的关系为:index = 1+2+……+n(其中index为任意row所对应的第一个圆的编号,n为row的编号)。因此有:
index = ( n + 1 ) * n / 2 n为未知数解此方程得
n = sqrt ( 1 + 8 * index ) / 2 - 0.5
n = -sqrt (1 + 8 * index ) / 2 - 0.5 (此负数解抛弃)
一步一步慢慢来,利用 n = sqrt ( 1 + 8 * index ) / 2 - 0.5可写出图(7)的阵列关系如下:
水平增量:memb_v = lead_v + idx1 * inc_h
垂直增量:row = floor ( sqrt ( 1 + 8 * idx1 ) / 2 - 0.5 )
memb_v = lead_v + row * inc_v
左移如图(8)的尺寸(row+1)*row/2*inc_h+row*inc_h/2即可得到图(6)的金字塔了,因此金字塔的阵列关系式如下:
水平增量:row=floor(sqrt(1+8*idx1)/2-0.5)
memb_v=lead_v+idx1*inc_h-(row+1)*row/2*inc_h-row*inc_h/2
垂直增量:row=floor(sqrt(1+8*idx1)/2-0.5)为方便理解,我没有将关系式进一步简化。至此,整个漫长的推导过程完毕。相信大家理解了上面的精髓后,便可自行做出更为复杂的关系式阵列了。接下来请试试做图(1)的实例吧。
memb_v=lead_v+row*inc_v
1)创建第一个圆柱特征,为方便后续的阵列工作,先不要将水平和垂直的位置尺寸设置为0。 2)接下来选择圆柱特征的两个位置尺寸作为阵列驱动尺寸。编辑关系式分别如下: |
inc_h=1.6
row=floor(sqrt(1+8*idx1)/2-0.5)
memb_v=lead_v+idx1*inc_h-(row+1)*row/2*inc_h-row*inc_h/2
inc_v=1.0就这么简便了,若然要更改阵列的水平和垂直驱动尺寸,进入关系式编辑,直接更改inc_h=???和inc_v=???就好了。到现在为止我是对野火版不感冒的,个人感觉2001版实现起来一样方便的,但下面野火的截图理解起来更直观一点。
row=floor(sqrt(1+8*idx1)/2-0.5)
memb_v=lead_v+row*inc_v
没有评论:
发表评论