Вот значит какая у меня проблема: создана 3D модель объекта, она параметрическая. для определенных расчотов средств редактора переменных не хватило, а именно циклов Поетому стояла задача написать макрос под это дело. Макрос должен удалить все 3Д узлы(с ними и привязанные объекты), считать с редактора коекакие переменные, провести изменения с ними... Дальше необходимо скопировать конкретный объект с исходной (привязаной к объекту) ЛСК в расчитаную координату (в целевую ЛСК). А вот и подобрались к проблеме! Эсли на ПК реализовать этот макрос и не закрывать T-Flex, то всё работает, как только закрыть, больше макрос не будет работать. Проблему рашает: запуск файла на другом ПК, а дальше по новому, или полная перестановка программы(T-Flex). Он перестает находить ссылки на объкты Вот скрин ошибки и листинг макроса: в тексте выделены места где возникает подобная ошибка (самое странное, что код, то компилит, и ошибок нет) и работает всьоже, пока не закрить
if (Nodes.Count>0) { ObjectArray O = new ObjectArray(); foreach (Node3D Nod in Nodes) { O.Add(Doc.GetObjectByName(Nod.Name)); } }error Doc.DeleteObjects(O, new DeleteOptions(true)); } Doc.BeginChanges("process");
///////\\\\\\\
Doc.Regenerate3D(); StringBuilder SW = new StringBuilder(); progressBar1.Minimum = 0; progressBar1.Maximum =Convert.ToInt16(Math.Round(H_Max.RealValue / Delta_H.RealValue,0)); List Volumes = new List(100); {error List LCSS = new List(5); foreach (LCS L in Doc.LCSs) { if (L.ID == 0x6C000008) }error LCSS.Add(L); }
for (int i = 0; i < H_Max.RealValue / Delta_H.RealValue; i++) { Height = Height + Delta_H.RealValue;
h.Expression = Height.ToString(); Doc.Regenerate3D(); Volume = Math.Round(Doc.FindVariable("V_bytulki_kor").RealValue, 2); if (Check(Volume)) { if (Volumes.Contains(Volume) == false) { if(Volume != V_Max.RealValue) { CoordinateNode3D Point = new CoordinateNode3D(Doc); Point.X = L1.RealValue - t.RealValue; Point.Y = 0; Point.Z = -(H1.RealValue - t.RealValue) + Height; PointsLCS P = new PointsLCS(Doc); P.PointToOrigin = Point.Geometry.Point; {error CopyOperation2 copy = new CopyOperation2(Doc); copy.Operations.Add((Operation)Doc.GetObjectByID(0x31000037)); copy.SourceLCS = LCSS[0]; }error copy.TargetLCS = (LCS)P; Volumes.Add(Volume);