Сохранение документов компаса в растровые и другие форматы

Автор Петрович-47, 25.02.20, 13:19:39

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

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

Петрович-47

Помогите уважаемые знатоки.
Наконец устал работать руками и решил автоматизировать рутину
Напряг память, вспомнил всё чего не знал и собрал код:
'Сохраняем файл как
Sub SaveFileAsCatalogItems(ByRef iKompas As Kompas6API5.Application)
                 
Dim kompas7 As kompasAPI7.IApplication  'подключить АПИ7
Set kompas7 = iKompas.ksGetApplication7
Dim docs7 As kompasAPI7.Documents   'Получим ссылку на колекцию Документов
Set docs7 = kompas7.Documents
Dim doc52D As Kompas6API5.ksDocument2D  'Подключить интерфейс Доументов 2Д
Set doc52D = iKompas.Document2D
Dim doc53D As Kompas6API5.ksDocument3D  'Подключить интерфейс Доументов 3Д
Set doc53D = iKompas.Document3D
Dim FullPathFile As String  'Полное имя текущего обрабатываемого файла, с путём и расширением
Dim NameAsDXF, NameAsJPG, NameAsPNG, NameAsSTL As String   'Полное имя будущего сохранённого-как файла, с путём и расширением
Dim SaveTrue As Boolean 'Признак успешного выполнения операции сохранить-как
Dim rasterParJPG, rasterParPNG As Kompas6API5.ksRasterFormatParam   '  Интерфейсы параметров сохранения-как растровые форматы
Set rasterParJPG = doc52D.RasterFormatParam ' необходимо ли получать аналогичный указатель для 3Д?
    rasterParJPG.colorBPP = 1
    rasterParJPG.ColorType = 1
    rasterParJPG.extResolution = 300
    rasterParJPG.Format = 2
Set rasterParPNG = doc52D.RasterFormatParam
    rasterParPNG.colorBPP = 1
    rasterParPNG.ColorType = 1
    rasterParPNG.extResolution = 300
    rasterParPNG.Format = 3
Dim rasterParSTL As Kompas6API5.ksAdditionFormatParam   '  Интерфейс параметров сохранения-как вектрорные форматы
Set rasterParSTL = doc53D.AdditionFormatParam ' Почему???? здесь создаётся дополнительный пустой объект коллекции kompasAPI7.Documents ??????????
    rasterParSTL.Format = 6

Dim i, j As Integer: j = docs7.Count - 1
For i = 0 To j
    FullPathFile = docs7.Item(i).PathName
    Select Case docs7.Item(i).DocumentType  'сортировочная по типам документов
        Case ksDocumentDrawing
            NameAsDXF = Replace(FullPathFile, ".cdw", ".dxf")
            NameAsJPG = Replace(FullPathFile, ".cdw", ".jpg")
            SaveTrue = doc52D.ksSaveToDXF(NameAsDXF)
            SaveTrue = doc52D.SaveAsToRasterFormat(FullPathFile, rasterParJPG)
        Case ksDocumentPart
            NameAsSTL = Replace(FullPathFile, ".m3d", ".stl")
            SaveTrue = doc53D.ksSaveToAdditionFormat(FullPathFile, rasterParSTL)
        Case ksDocumentAssembly
            NameAsJPG = Replace(FullPathFile, ".a3d", ".jpg")
            SaveTrue = doc53D.SaveAsToRasterFormat(FullPathFile, rasterParJPG)
            NameAsSTL = Replace(FullPathFile, ".a3d", ".stl")
            SaveTrue = doc53D.SaveAsToAdditionFormat(FullPathFile, rasterParSTL)
    End Select
Next i
End Sub

Всё бы ничего, да только не работает.
1. Не происходит сохранение, SaveAs... Команда отрабатывает, возвращает ложь и ничего не создаётся.
2. При получении интерфейса AdditionFormatParam в коллекции документов появляется неизвестный объект и при закрытии окна Компаса появляется сообщение библиотеки "Неверный указатель на документ", я конечно могу отследить этот НЛО и пофиксить проблемы, но мне кажется что это не верно.
3. Надо ли получать отдельно RasterFormatParam для документов-3Д?

Спасибо, всем откликнувшимся.
Если что не так в терминологии? сильно не пинайте, а то больно...


YS

Знатоком я, конечно не являюcь, но посмотрел у себя (VB NET 2010 express+KOMPAS 18.1.35) файл 3D модели сохранил в STL.
Файл создался и лишних объектов в docs7.Documents не появилось.
Судя по операторам Set Вы пишете в VB или VBA?
В смысле не в NET?


Петрович-47

Спасибо, значит код и ход мыслей правильный, спишем все на эксель и косячность...