Изменения в API Компас 8

Автор Gek, 31.01.06, 19:13:59

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

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

Gek

Когда переносил свою прогу с 7+ на 8, столкнулся с такой ботвой - значение свойства DirectionType операции Cut поменялось на противоположное  :o То есть если режете в направлении dtNormal, надо менять на dtReverse, и наоборот. Зачем это было нужно делать, не знаю. Предлагаю сюда складывать другие подобные фишки

IronMaxxx

Поздравляю, Gek! Я с этой "ботвой" еще месяца три назад столкнулся... Ругался страшно :). Прикольно, что не я один из-за этого парюсь. И так же, как и ты, я не знаю, зачем такое было делать.
Вот только проект у меня тогда был серьезный и нужно было как нибудь выкручиваться. Я тогда вот что придумал: вместо направлений dtNormal и dtReverse всегда использовать dtBoth, а величину вырезания оставить прежней. Этот способ действует, если эскиз, использующийся в операции вырезания, лежит в торцевой плоскости детали, т.е. за ним ничего нет и вырез в противоположную сторону никак не повредит конфигурацию модели. В 90% случаев такое помогает (речь идет о том, чтобы прога коректно все строила в 7, 7+ и 8-ой версиях). Я думаю, ты понял о чем речь - куда б небыла направлена нормаль от плоскости эскиза, вырез произойдет на равные расстояния в обе стороны и модель построится как надо.
В редких случаях вырез в противоположную сторону исказит структуру модели. Тогда сделай следующее. Например, тебе нужно было создать вырез длиной h в направлении dtNormal от плоскости Plane. Теперь следует построить еще одну плоскость на расстоянии h/2 от Plane в направлении dtNormal (направления для смещения плоскостей еще поменять не успели :o:). В этой плоскости построить нужный эскиз и вырезать его в обе стороны (dtBoth) на величину h/2. Все!
Работы не намного больше, зато прога будет работать в любых версиях КОМПАСа.

P.S. Я об этой, как ты говоришь, "ботве" узнал, когда у меня еще 8-ки не было. Кодил под 7+, а проект тестировали уже на 8. Представляешь ситуацию: я наклепал программку, где все прекрасно работает, сижу ею любуюсь, доволен собой и жизнью, отослал эту прогу тестировать... Мне когда скриншоты пришли чего она там понастроила, я чуть не ёб....., ну жутко удивлен был, словом :-)))... Вот так вот...

IronMaxxx

Еще одна подбная фишка...
Есть такой способ построения плоскости - под углом к другой плоскости. В интерфейсе для ее построения есть свойство angle, задающее угол смещения относительно базовой. Тип свойства double, и принимать значения вроде бы должно в градусах... Как бы не так! Я тогда тоже кодил под 7+ и была у меня переменная ang, в которой содержалось расчитанное значение угла в радианах, т.е. чтоб установить величину угла смещения стоило просто воспользоваться функцией для перевода радиан в градусы: RadToDeg(ang). Вот только ничего не работало. Как оказалось позже (уже й не помню, как тогда догадался) нужно было дважды вызывать эту функцию, т.е. записать RadToDeg(RadToDeg(ang)). И только тогда :!: угол получался в градусах.
Ситуация еще усложнялась тем, что интерфейс воспринимал RadToDeg(ang) за градусы и внутри API переводил в радианы, т.е. возвращался к "чистому" ang, что приводило к тому, что угол между плоскостями в модели был микроскопическим (тысячные доли градуса). На первый взгляд никакого смещения не происходило, и я долго думал, что это я неправильно инициализирую интерфейс.
Тоже долго ругался, когда допер в чем дело :o:.
Зато в восьмерке уже все нормально...

P.S. К слову, Gek, эти два нюанса и стали главной причиной перекомпиляции "РЕДУКТОРа 3D" под КОМПАС 8. Зато теперь он фурычит и в 7+ и в 8-ке.

Gek

Ты ловко выкрутился с вырезанием, брателла  :fr: Копперфильд отдыхает  :) Но в следующий раз это может и не прокатить.
Предлагаю такой вариант. С помощью KompasObject.ksGetSystemVersion узнаем версию запущенного Компаса и в соответствии с этим оперативно меняем проблемные куски кода. А компилируем 1 раз под последнюю версию. Как тебе мыслишка?

IronMaxxx

Цитата: Gek от 31.01.06, 21:55:22
Ты ловко выкрутился с вырезанием, брателла  :fr: Копперфильд отдыхает  :) Но в следующий раз это может и не прокатить.
Предлагаю такой вариант. С помощью KompasObject.ksGetSystemVersion узнаем версию запущенного Компаса и в соответствии с этим оперативно меняем проблемные куски кода. А компилируем 1 раз под последнюю версию. Как тебе мыслишка?


Ты абсолютно прав! Так выкрутиться можно только в случае с вырезаниями. Для вспомогательной плоскости этот фокус не пройдет, и тут от KompasObject.ksGetSystemVersion уже никуда не деться...

Gek

То, что происходят такие изменения, подчас нелепые - это полбеды.
Беда в том, что они нигде не отражены. Залезаешь в раздел "Что нового" - куча новых интерфейсов и методов сомнительной нужности, а про эти вот приколы - ни полслова  >:(
И работаем как саперы - пока не наступим на мину, не узнаем о ней  :-)))