Создание библиотеки

Автор Ольга23, 07.06.13, 21:17:30

« назад - далее »

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

Ольга23

Здравствуйте. Прошу помощи у людей, хорошо разбирающихся как в Компасе так и в программировании на языке Delphi. А именно, имеющих опыт создания собственных 3D библиотек (с расширением .rtw), создание САПР на базе компас 3D. Надо подкорректировать код отвечающий за разработку САПР создающей по минимальному количеству исходных данных 3D - модель зубчатого колеса.(т.е. нужен правильный файл .rtw)

+ Благодарностей: 1

Ольга23

Если я правильно поняла, мой пост уже перенесли в нужный раздел. Вот тут архив с программой, которую надо подкорректировать так, чтобы строилось такое колесо. Кто-нибудь может помочь?

Так, а в чём проблема? Если Вы сделали данную библиотеку сами, то, что Вам мешает изменить плоскости эскизов с PlaneYOZ на PlaneXOY или  PlaneXOZ.
+ Благодарностей: 1

Ольга23

Извините, первоначальный проект конечно же не мой, это сделанный пример из книги КОМПАС-3D V10 на 100 % автор Максим Кидрук. На его основе я пыталась построить нечто похожее на моё колесо, но в результате только портила код до неузнаваемости не счесть сколько раз. Кстати с плоскостями эскизов я тоже пробовала экспериментировать вот тут:
// интерфейсы ортогональных плоскостей
      PlaneXOY := ksEntity(iPart.GetDefaultEntity(o3d_planeXOY));
      PlaneXOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeXOZ));
      PlaneYOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeYOZ));

на
PlaneXOY := ksEntity(iPart.GetDefaultEntity(o3d_planeYOZ));
      PlaneXOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeXOZ));
      PlaneXOY := ksEntity(iPart.GetDefaultEntity(o3d_planeYOZ));
но в результате получала только наклон колеса в другую сторону. Возможно я все-таки не там плоскости меняю, попробую ещё поэкспериментировать.

Менять название плоскостей нужно не там, где они задаются, а там, где на их основе строится вспомогательная геометрия.
// интерфейс параметров смещенной плоскости
iOffsetPlaneDef:=ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition); 
if (iOffsetPlaneDef <> nil) then
begin // величина, базовая плоскость и другие параметры смещения
     iOffsetPlaneDef.Offset:=b_k/2; // расстояние смещения
     iOffsetPlaneDef.SetPlane(PlaneYOZ); // менять здесь
     iOffsetPlaneDef.direction:=false; // направление смещения
     iOffsetPlaneEntity.Hidden := true; // делаем плоскость скрытой
     iOffsetPlaneEntity.Create; // создаем вспомогательную плоскость
end; 

Направление смещения должно у всех трёх эскизов быть одинаковое, для эскиза второго сечения нужно будет создать смещённую плоскость и задать её в строке место - этой iSketch3Def.SetPlane(PlaneYOZ);
+ Благодарностей: 1

Ольга23

Спасибо! Очень постараюсь сделать самостоятельно.

Ольга23

Здравствуйте. Очень извиняюсь, но что-то не то у меня получается. Результаты построения сильно отличаются от тех, которые надо получить. Получается либо так (скриншот1), либо так (скриншот2). Похоже с кодом я так и не разобралась до конца.
По ходу работы возникли неразрешенные вопросы:
1)
Цитировать"Направление смещения должно у всех трёх эскизов быть одинаковое"
Да, я поменяла строчку в «Интерфейсе параметров смещенной плоскости» здесь: iOffsetPlaneDef.SetPlane(PlaneYOZ); на
iOffsetPlaneDef.SetPlane(PlaneXOZ);
и если  правильно поняла, мне нужно поменять направление смещения ещё у двух эскизов. А можно уточнить конкретное место, где это надо менять.
2)
Цитировать«...для эскиза второго сечения нужно будет создать смещённую плоскость и задать её в строке вместо этой
iSketch3Def.SetPlane(PlaneYOZ);»
Т.е. весь код, прописанный после этой строчки  от «begin» до ближайшего «end» (включая её саму) я должна удалить и вместо него вписать этот код смещения плоскости:?
// интерфейс смещенной плоскости
    iOffsetPlaneEntity := ksEntity(iPart.NewEntity(o3d_planeOffset));
    if (iOffsetPlaneEntity <> nil) then
      begin
    // интерфейс параметров смещенной плоскости
        iOffsetPlaneDef := ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition);
        if (iOffsetPlaneDef <> nil) then
          begin
    // величина, базовая плоскость и другие параметры смещения
            iOffsetPlaneDef.Offset := b_k/2;
            iOffsetPlaneDef.SetPlane(PlaneXOZ);
            iOffsetPlaneDef.direction := false;
    // делаем плоскость скрытой
            iOffsetPlaneEntity.Hidden := true;
    // создаем вспомогательную плоскость
            iOffsetPlaneEntity.Create;
          end;
      end;

Я так и сделала и получила rtw-шник рисующий скрин-2.
Помогите, пожалуйста, разобраться.
Кстати, строится колесо почему-то очень и очень медленно. Я поначалу думала, что Компас зависает.

Вы просто не хотите разбираться.
Писать код не буду, есть другие более интересные задачи, тем более код элементарный, во вложении подредактированная модель созданная исходным кодом, эскиз 4 лишний, эскизы 3 и 5 нужно будет перечертить согласно ГОСТ, если Вам нужна картинка, можно не перечерчивать. Модель во вложении не соответствует ГОСТам, дана для наглядности, чтобы Вы могли сами подкорректировать код.
P.S. Был неделю на море, никакой цивилизации с собой не брал, чтобы не мешала от неё отдыхать, Ваш вопрос, только сегодня прочитал.

http://yadi.sk/d/owekKPuj64Qrn