И снова о временных сопряжениях.

Автор A.n.d.r.e.w, 28.12.09, 16:52:45

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

A.n.d.r.e.w

Уважаемые коллеги, задача такая.
В сборку из файла вставляется деталь. Пользователь указывает в окне несколько ksEntity , количества которых достаточно чтобы исчерпать степени свободы вставляемой детали. При этом деталь все равно может иметь несколько фиксированных  положений взависимости от направления наложенного сопряжения, пользователь должен выбрать сам какой именно вариант его устраивает, так вот как изменить положение фантома детали  ИЗ ПАНЕЛИ СВОЙСТВ!

Во время работы функции UserGetPlacementAndEntity при клике мыши по окну модели вызывается функция USERSELECTCALLBACKPROC в которой я могу корректировать коллекцию временных сопряжений. И с этим проблем нет. Но как мне изменить эти сопряжения вне функции CallBack.
Курсор у меня находится на панели свойств, я нажимаю на кнопочки, в обработчике которых меняются сопряжения через info.SetMateConstraintCollection при этом фантом на экране должен менять свое положение.
Ни фантом не меняет положение, ни набор выделеных объектов не меняется при попытке таким же образом править info.setEntityCollection. обновлять после изменения типа part.update, part.updateplacementex не помогает, при rebuildDocument вообще глюки наступают.
Хотя изменять геометрические параметры фантома из панели получается без проблем.

A.n.d.r.e.w

Опять отвечу сам себе.

С привязками так и не получилось. Более сложное позиционирование чем вставка болта в отверстие сопряжениями не выполнить!
Взять хотябы привязку под углом. Угол привязки изменяется от 0 до PI если угол A задать больше PI то получится привязка под углом 2*PI-A, если вы попытаетесь угадать направление в котором создасться привязка то это зависит только от начального положения привязываемой детали. Изменение направления привязки dir = -1 даст привязку под углом  PI-A.
Короче я бился почти месяц. Потом плюнул, повспоминал стереометрию, написал свои функции вычисления углов, проекций, пересечений, расстояний.... и.т.д и за 2 дня все переделал через вычисление пласемента вставляемой детали. Все работает как надо.
Теперь в UserGetPlacementAndEntity я указываю опорные объекты (поверхности и ребра) получаю их математические параметры, пересчитываю пласемент устанавливаю в него фантом и фиксирую его. Нажимая на панеле свойств кнопочки которые изменяют параметры влияющие на положение фантома после пересчета пласемента командую Phantom.UpdatePlacementEx(true) фантом в окне меняет положение. Если нажимаю кнопочки которые изменяют параметры влияющие на геометрию детали (деталь предварительно созданая с внешними переменными вставляется из файла) , то после изменения внешних переменных командую Part.rebuildModelEx(true) но фантом в окне изменится только после команды ksRefreshActiveWindow (как долго я искал это).
Вот. Если кому вдруг пригодится.