Официальный форум российского программного комплекса 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 ListNodes = new List(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 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);

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();
}
//////\\\\\\
}
error.jpg (32.7 КБ)
Изменено: Artem Klavak - 11.12.2010 01:49:35
Страницы: 1