将变体存储在数组中以创建3维数组

时间:2018-12-06 16:53:16

标签: arrays excel vba excel-vba

我有一个描述隧道的点数据的Excel表。我正在使用宏将这些点导入3d建模程序(SolidWorks)。很显然,有18个配置文件构成了此隧道。我偶尔被要求做的一个任务是创建一个像这样的数据3D模型。这涉及到我为18个轮廓点中的每一个创建一个闭合样条线,然后放样这些闭合样条线以形成实体。

我想做的是通过将每组轮廓​​点传递到绘制样条曲线的函数中来自动创建样条曲线。为此,我需要对点进行重新排序,以免发生意外的交叉。

我正在使用的一种方法是从每个轮廓的质心中找到点之间的角度。

在Excel中,我首先对从最小x值到最大x值的点进行排序。然后,我使用For循环遍历数据集和条件语句,以查看x_n + 1-x_n是否低于我设置的公差值。如果差异低于公差,则Point_n + 1属于轮廓的先前点集。在这个条件语句中,我也要取一个连续的数字。如果差异大于公差,我将计算该轮廓的点的质心。

我遇到的问题是,为了计算质心点之间的角度,我需要为轮廓的每个点集使用适当的质心值。在我的条件语句中,我将x,y,z值存储在一个名为data的变量中。我需要将数据存储在数组中的帮助,因此我可以调出供以后使用的样例,以创建样条曲线。 here

包含一个示例点集合
Dim rownum As Integer
Dim sh As Worksheet
Dim j As Integer
Dim k As Integer
Dim temp As Double
Dim yc As Double
Dim zc As Double
Dim temp2 As Variant
Dim xsum As Double
Dim ysum As Double
Dim zsum As Double
Dim a1 As Double
Dim a2 As Double
Dim data As Variant
Dim adiff As Double
Dim count As Integer

Set sh = ThisWorkbook.Sheets("Sheet1")

rownum = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.count
ReDim data(rownum, 3) As Variant


ysum = 0
zsum = 0

count = 0
For j = 1 To rownum - 1
    If j = 1 Then
        temp = 0
    Else
        temp = Abs(sh.Range("A" & j + 1).Value - sh.Range("A" & j).Value)
    End If

    If temp <= 2 Then
        data(j, 1) = sh.Range("A" & j).Value
        data(j, 2) = sh.Range("B" & j).Value
        data(j, 3) = sh.Range("C" & j).Value


        ysum = ysum + data(j, 2)
        zsum = zsum + data(j, 3)
        count = count + 1


        'Part.CreatePoint2 data(j, 1) / 1000, data(j, 2) / 1000, data(j, 3) / 1000
    ElseIf temp > 2 Then


        'calculate centroid
        yc = (ysum + sh.Range("B" & j).Value) / rownum
        zc = (zsum + sh.Range("C" & j).Value) / rownum


        'a1 = ATan2(data(j, 2) - yc, data(j, 3) - zc)
        'a2 = ATan2(data(j + 1, 2) - yc, data(j, 3) - zc)

        'adiff = a1 - a2


        ysum = 0
        zsum = 0

    End If

Next

0 个答案:

没有答案