Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Проблема програмирования или глюк API?
 
Вот значит какая у меня проблема:
создана 3D модель объекта, она параметрическая. для определенных расчотов средств редактора переменных не хватило, а именно циклов :)
Поетому стояла задача написать макрос под это дело.
Макрос должен удалить все 3Д узлы(с ними и привязанные объекты), считать с редактора коекакие переменные, провести изменения с ними...
Дальше необходимо скопировать конкретный объект с исходной (привязаной к объекту) ЛСК в расчитаную координату (в целевую ЛСК). А вот и подобрались к проблеме!
Эсли на ПК реализовать этот макрос и не закрывать T-Flex, то всё работает, как только закрыть, больше макрос не будет работать. Проблему рашает: запуск файла на другом ПК, а дальше по новому, или полная перестановка программы(T-Flex). Он перестает находить ссылки на объкты :(
Вот скрин ошибки и листинг макроса:
в тексте выделены места где возникает подобная ошибка (самое странное, что код, то компилит, и ошибок нет) и работает всьоже, пока не закрить ;)


////////\\\\\\\\
private void button1_Click(object sender, System.EventArgs e)
{
Document Doc = TFlex.Application.ActiveDocument;
{error List<Node3D>Nodes = new List<Node3D>(200);
              foreach(Node3D Nod in Doc.Nodes3D)
             {
               Nodes.Add(Nod);
               }

   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<double> Volumes = new List<double>(100);
{error            List<LCS> LCSS = new List<LCS>(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);
                       
         if (Test.Contains(Volume))
                       {
                           H_Varibles[Convert.ToInt16(Volume-1)].Expression = (Math.Round(Height,0)).ToString();
                       }
D_v = D_v + Delta_V.RealValue;
         }
else
{
if (Test.Contains(Volume))
                           {
                            H_Varibles[Convert.ToInt16(Volume-1)].Expression = (Math.Round(Height,0)).ToString();
                            }
             }
                     
                         }
                       }
               
               SW.AppendLine(Volume.ToString());
               progressBar1.PerformStep();
           }
           textBox1.Text = SW.ToString();
           Doc.EndChanges();
}
//////\\\\\\
}
Изменено: Artem Klavak - 11.12.2010 01:49:35
Создание приложений с формой, задача Динамического Анализа!
 
:applanse:
У меня стоит задача:
1. создать диалогое окно, переменные...;
2. макрос должен изменять один из фалов зборки (открить и заменить внешний фрагмент);
3. запустить задачу динамического анализа с определьонными параметрами моделирования;
4. результаты моделирования (графики) считать как масив исходных данных и произвести математические расчоты;
5. результат сгенерировать в текстовый файлик.

С програмированием у меня так себе, но всё это я реализовал внутренними функциями и переменными, теперь НУЖНО привести это к человеческому виду.
Помогите хто чем сможет, С# я только начал учить, вроди не стою на месте. Желательно примеры, фрагменты кода, пишыте на мыло, буду рад.
Зарание благодарен.
Страницы: 1