Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 19.06.2024
Сообщений: 13
.NET 4.x

Работа с компас 3D через C#, проблема с открытием файла

22.11.2024, 17:56. Показов 2084. Ответов 0

Студворк — интернет-сервис помощи студентам
Нужно разобраться с работой компаса 3D через библиотеки: KompasAPI7; Kompas6Constants; Kompas6API5; Работаю с проектом в Visual Studio C# WPF. Сделал дизайн, перешёл к коду.
Задача приложения проста, она должна открывать заранее установленный компас, открывать файл через мой путь и сохранить в другую папку. Довольно просто, но для первого опыта, подумал, что не плохо было бы хотя-бы это сделать.
Выбрал NET: 4.8; Компас 3D: v23

Подключил библиотеки через COM ссылки, добавил в проект, начал писать код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System.Windows.Forms;
using System;
using System.Windows;
using System.Windows.Input;
using System.IO;
using System.Windows.Controls;
using KompasAPI7;
using Kompas6Constants;
using Kompas6API5;
 
if (string.IsNullOrWhiteSpace(OutFiles.Text) == false && string.IsNullOrWhiteSpace(InpFiles.Text) == false) // Inp - Входные файлы, Out - Папка для хранения файлов
{
    try
    {
        string[] files = Directory.GetFiles(InpFiles.Text); // Получаем файлы из папки
 
        System.Windows.Forms.MessageBox.Show("Путь файла - " + files[1]);
        if (!File.Exists(files[1])) throw new Exception("Файл не существует");
 
        // Создание экземпляра Компаса
        KompasObject kompas = (KompasObject)Activator.CreateInstance(Type.GetTypeFromProgID("KOMPAS.Application.5"));
        if (kompas == null) throw new Exception("Не удалось инициализировать Компас.");
        else
        {
            kompas.Visible = true; kompas.ActivateControllerAPI();
            if(files[1] == "*.cd2" || files[1] == "*.ksd") // 2D
            {
                ksDocument2D doc = (ksDocument2D)kompas.Document2D();
                if (doc == null) throw new Exception("Не удалось получить активный документ.");
 
                bool opened = doc.ksOpenDocument(files[1], true);
                if (!opened)throw new Exception("Не удалось открыть файл");
            }
            else if(files[1] == "*.cdw" || files[1] == "*.kst" || files[1] == "*.ksg") // 3D
            {
                ksDocument3D doc = (ksDocument3D)kompas.Document3D();
                if (doc == null) throw new Exception("Не удалось получить активный документ.");
 
                bool opened = doc.Open(files[1]);
                if (!opened) throw new Exception("Не удалось открыть файл");
            }
            else throw new Exception("расширение файла: " + files[1] + "не поддерживается");
        }
    }
    catch
    {
        throw new Exception("Ошибка при обработке файлов");
    }
}
else throw new Exception("Не все пути указаны");
Хотел сделать так, чтобы у меня бралась папка с файлами и сразу вся папка обрабатывалась, но из-за ошибки решил пока брать "files[1]", чтобы настроить работу хотя-бы с одним файлом, поэтому в начале идёт сбор файлов в список, а потом обрабатывается только один файл из списка.

И вроде бы неплохо, сделал обработку и 2D и 3D, но столкнулся с проблемой. По коду всё ровно идёт, и через откладку нет проблем. Сам компас открывается, но вот сам файл не открывается.

Просматривал путь, думал, что он не правильный, но с ним всё в порядке C:\...\Пластина.cdw.
Просмотрел безопасность файла, думая, что к нему нет доступа, но там всё есть.
В самом компасе, через открытие документа, файл открывается без проблем.

Почитал статьи от аскона, но там решения не нашёл.
Буду рад помощи и советам.

Добавлено через 1 час 6 минут
Разобрался. То ли забыл, то ли из головы выпало..
Причина проблемы:
C#
1
bool opened = doc.ksOpenDocument(files[1], true);
Параметр true - отвечает за отображение, для того, чтобы показывать, что файл открылся, нужно указывать - false.

Обработку 3d и 2d решил убрать, ибо как оказалось, форматы чертежей и т.п. работают так-же с ksDocument2D.
Итоговый код получился такой:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
string[] files = Directory.GetFiles(InpFiles.Text); // Получаем файлы из папки
 
System.Windows.Forms.MessageBox.Show("Путь файла - " + files[1]);
if (!File.Exists(files[1])) throw new Exception("Файл не существует");
 
ProgressBar.Maximum = files.Length; // Устанавливаем 100% относительно файлам
 
// Создание экземпляра Компаса
KompasObject kompas = (KompasObject)Activator.CreateInstance(Type.GetTypeFromProgID("KOMPAS.Application.5"));
if (kompas == null) throw new Exception("Не удалось инициализировать Компас.");
else
{
    kompas.Visible = true; kompas.ActivateControllerAPI();
    ksDocument2D doc = (ksDocument2D)kompas.Document2D();
    if (doc == null) throw new Exception("Не удалось получить активный документ.");
 
    bool opened = doc.ksOpenDocument(files[1], false);
    if (!opened)throw new Exception("Не удалось открыть файл");
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.11.2024, 17:56
Ответы с готовыми решениями:

Проблема с открытием bat файла через код на С++
Доброго времени суток, есть код очень простенький суть его в том что в компиляторе VS 2017 он запускается и с помощью него должна...

Проблема с открытием файла
Доброго времени! Есть код(агент) в котором получаю содержимое файла (NotesStream). Если этот агент вызываю другим агентом или по CORBA,...

Проблема с открытием файла
from PyQt5 import QtCore, QtGui, QtWidgets from sys import * class Ui_MainWindow(object): def setupUi(self, MainWindow): ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.11.2024, 17:56
Помогаю со студенческими работами здесь

проблема с открытием файла
Доброго времени суток! Есть документы. Все бы ничего, но... есть документы, которые не открываются, выдавая ошибку, что на форме...

Проблема с открытием файла sh
Всем привет! При открытии sh файла при помощи notepad++ или gvim, содержимое файла отображается иероглифами. Скажите пожалуйста в чем...

Проблема с открытием файла
Здравствуйте уважаемые форумчане , проблема в том что я сделал форму регистрации на python и когда я вхожу в аккаунт должен запускаться...

Проблема с открытием текстового файла
Добрый вечер, форумчане! Прошу вашей помощи. У меня есть следующий фрагмент кода: FILE* openInputFile() { printf("Enter...

Проблема:с открытием файла в VB проге
Нужно чтобы при двойном клике на имени файла в проводнике запускалась моя прога и открывала этот файл.С открытием файла из самой проги...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru