Ориентация

Автор weer, 14.11.10, 17:20:22

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

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

weer

Здравствуйте.

Требуется программно ориентировать сборку (2 вида сверху, спереди) для ее последующего сохранения в растр.
Использую компонент KGAX.

Буду благодарен за ответы.

Misha

Здравствуйте, я использовал ниже приведенный код для этой операции.   

   #region Установить вид # - сверху
            ksViewProjectionCollection viewProjectionCollection = (ksViewProjectionCollection)Doc.GetViewProjectionCollection();

            if (viewProjectionCollection == null)
                return;

            ksViewProjection viewProjection = (ksViewProjection)viewProjectionCollection.GetByName("Сверху", false, true);
            if (viewProjection == null)
                return;

            if (!viewProjection.SetCurrent())
                return;
            #endregion

            Doc.UpdateDocumentParam();

weer

Спасибо, все работает.

weer

Возникла еще одна проблема, теперь никак не работает Doc.UpdateDocumentParam();
Меняются проекции, но при сохранении в файле первоначальный вид.

Попробуйте
ksViewProjectionCollection::Refresh
Метод перезаполняет массив проекциями, заданными в документе.

weer

Не помогло, использую следующий код:
                Document3D Doc;
                Kompas = (KompasObject)axKGAX1.GetKompasObject();
                Doc = (Document3D)Kompas.ActiveDocument3D();
                ksViewProjectionCollection vpcol = (ksViewProjectionCollection)Doc.GetViewProjectionCollection();
                ksViewProjection vp = (ksViewProjection)vpcol.GetByName("Спереди", false, true);
                vp.SetCurrent();
                Doc.UpdateDocumentParam();

                ksRasterFormatParam rfPar = (ksRasterFormatParam)Doc.RasterFormatParam();
                rfPar.colorBPP = 4;
                rfPar.colorType = 3;
                rfPar.extResolution = 25;
                rfPar.extScale = 1;
                rfPar.format = 0;
                rfPar.greyScale = false;

                Doc.SaveAsToRasterFormat(System.Windows.Forms.Application.StartupPath + "\\Temp files\\1.bmp", rfPar);

                vp = (ksViewProjection)vpcol.GetByName("Сверху", false, true);
                vp.SetCurrent();
                Doc.UpdateDocumentParam();

                Doc.SaveAsToRasterFormat(System.Windows.Forms.Application.StartupPath + "\\Temp files\\2.bmp", rfPar);
                return true;

Цитата: weer от 20.11.10, 13:42:23
Не помогло, использую следующий код:
               
                ksRasterFormatParam rfPar = (ksRasterFormatParam)Doc.RasterFormatParam();
                rfPar.colorBPP = 4;
                rfPar.colorType = 3;
                rfPar.extResolution = 25;
                rfPar.extScale = 1;
                rfPar.format = 0;
                rfPar.greyScale = false;

             
ksRasterFormatParam rfPar = (ksRasterFormatParam)Doc.RasterFormatParam();
                rfPar.init
                rfPar.colorBPP = 4;
                rfPar.colorType = 3;
                rfPar.extResolution = 25;
                rfPar.extScale = 1;
                rfPar.format = 0;
                rfPar.greyScale = false;

weer

Дело в том, что с сохранением проблем нет, просто сохраняется не нужный мне вид, а последнее положение сборки до выполнения процедуры. При этом сборка в окне вращается.
Все проверив, я нашел, что не работает функция Doc.UpdateDocumentParam();
Думаю скорее всего дело в ней.

Doc.UpdateDocumentParam();
ksDocument3D::RebuildDocumentт
Попробуйте так в любом случае нужно заставить обновить документ.

weer

Не выходит.
Свойство у ksDocument3D  invisibleMode, которое отвечает за изменение документа, равно false. Оно для чтения, соответственно его нельзя поменять. Может быть можно каким нибудь другим способом?

weer

Никто не подскажет?
Буду очень благодарен за совет.

Misha

Попробуйте после того, как вы начали поворачивать деталь, поставить брейкпоинт (допустим на Doc.SaveAsToRasterFormat(System.Windows.Forms.Application.StartupPath + "\\Temp files\\2.bmp", rfPar);) и затем посмотрите, как она сохраняет?