Что я пытаюсь сделать для Autodesk Inventor. Я пишу программу, которая выполняет итерации через кучу строк в эскизе. Он собирает группы связанных линий и помещает их в коллекцию. Затем он создает коллекцию этих коллекций для обработки.Коллекция коллекций - Как сделать под-коллекции по значению, а не ссылку?
Я пытаюсь сделать это, добавив строки во временную коллекцию, а затем добавив эту временную коллекцию в коллекцию циклов, так что мне не нужно генерировать неизвестное количество коллекций для каждого цикла. Однако, как только я сбрасываю временную коллекцию с помощью метода Clear, она удаляет информацию, которую я только что нажал в коллекцию циклов. Есть ли способ сделать информацию в наборах циклов независимо от того, что находится во временной коллекции?
Как вы можете видеть, проблема в том, что я никогда не знаю, сколько линий будет подключено, поэтому я никогда не знаю, сколько подкатегорий будет там.
Вот код, который у меня есть.
Dim oLoopColl As New Collection
Dim oSubColl As ObjectCollection
Set oSubColl = ThisApplication.TransientObjects.CreateObjectCollection
For j = 1 To oSLColl.Count
oSubColl.Add (oSLColl.Item(j))
'Check for last item to see if it is part of the first
If j = oSLColl.Count Then
If oSLColl.Item(j).EndSketchPoint Is oSLColl.Item(1).StartSketchPoint Then
MsgBox ("Last SL is part of first coll!")
oLoopColl.Item(1).Add (oSLColl.Item(j))
oSubColl.Clear
Else
Call oLoopColl.Add(oSubColl, CStr(j))
End If
Else
If Not oSLColl.Item(j).EndSketchPoint Is oSLColl.Item(j + 1).StartSketchPoint Then
Call oLoopColl.Add(oSubColl, CStr(j))
oSubColl.Clear
End If
End If
Next
oSubColl.Clear
Set oSubColl = Nothing
Код 'oLoopColl.Add (oSubColl, CStr (j))' добавляет 'reference' в подсерию к коллекции циклов. Эта ссылка просто указывает на одну и ту же подсерию, и поэтому, когда подсекция очищается, коллекция циклов указывает на эту коллекцию, которая теперь пуста. Вы не можете добавить подзадачу 'by-value'. Вы можете создавать новую коллекцию каждый раз, копировать элементы подзадачи в эту новую коллекцию и добавлять эту новую коллекцию в коллекцию циклов. Когда вы не очистите эту новую коллекцию, коллекция циклов сохранится. – dee
Но как я могу справиться с этим с переменным количеством подкатегорий в цикле? Насколько я знаю, я не могу точно определить переменную, основанную на переменной; т.е. oLoop & i = oLoop1, oLoop2 для i = 1 до 2 – MechMachineMan
Возможно, мне просто нужно переосмыслить мой подход и сохранить только oLoops как ObjectCollection прямо перед тем, как сделать вызов, требующий их как ObjectCollection ... ie; хранить их в массиве и преобразовывать массив в ObjectCollection. – MechMachineMan