Редактирование спецификации на 2 листе

Автор MrBarry, 27.06.24, 07:16:27

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

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

MrBarry

Всем привет! Задача такая: есть чертёж и спецификация к нему вторым листом (см. прикреплённый скриншот). Нужно заполнить спецификацию на втором листе. Посмотрел в примерах от Аскона, и Step10 как раз про спецификацию. Однако, именно когда она отдельным документом, а не на одном из листов, как у меня. Соответственно, они не работают. Если быть конкретнее, то вот эта строка:
ksSpcDocument spcdoc = (ksSpcDocument)kompas.SpcActiveDocument();Она всегда выдаёт 0 по понятной причине - у меня открыта не спецификация, а чертёж, в котором есть спецификация. Но как тогда её редактировать? Я, наверное, могу просто подобрать координаты ячеек и в них обычным ksText заполнять, но это всё равно что на индукционной плите развести костёр и на нём мясо жарить :-)))  :-)))
Короче говоря, каким образом обращаться к такой спрятанной спецификации?

MrBarry

Обновление: во-первых, я забыл прикрепить скриншот :-))) Это должен был быть первый прикреплённый в этом сообщении
Во-вторых, решение такое: вся спецификация в таком документе это технически одна большая основная надпись, и её можно редактировать через интерфейс ksStamp. Вот код, который я честно позаимствовал из другой темы на этом форуме и модифицировал:

(Язык C#)
// ksDocument2D doc определён раньше в коде

// Редактирование надписи
ksStamp stamp2 = (ksStamp)doc.GetStampEx(2);
stamp2.ksOpenStamp();

// Создание массивов для добавления текста
ksDynamicArray arrItemText = (ksDynamicArray)kompas.GetDynamicArray(ldefin2d.TEXT_ITEM_ARR);
arrItemText.ksClearArray();
ksDynamicArray arrLineText = (ksDynamicArray)kompas.GetDynamicArray(ldefin2d.TEXT_LINE_ARR);
arrLineText.ksClearArray();

// В цикле я записываю в каждую ячейку текст вида "testX", где Х - номер этой ячейки. Так можно определить номер каждой ячейки, чтоб потом знать к какой обращаться
for (int i=1; i < 2000; ++i) {
    addStr(kompas, "test" + i, arrItemText, arrLineText);
    stamp2.ksSetStampColumnText(i, arrLineText);
   
    arrItemText.ksClearArray(); arrLineText.ksClearArray();
}
stamp2.ksCloseStamp();

private static void addStr(KompasObject kompas, string str, ksDynamicArray itemText, ksDynamicArray lineText) {
    ksTextLineParam lineParam = (ksTextLineParam)kompas.GetParamStruct((short)StructType2DEnum.ko_TextLineParam);
    lineParam.Init();
    lineParam.style = 3;
    ksTextItemParam itemParam = (ksTextItemParam)kompas.GetParamStruct((short)StructType2DEnum.ko_TextItemParam);
    itemParam.Init();

    itemParam.s = str;
    itemText.ksAddArrayItem(-1, itemParam);
    lineParam.SetTextItemArr(itemText);
    lineText.ksAddArrayItem(-1, lineParam);
    lineParam.Init();
}


Результат на втором прикреплённом скриншоте

p.s. и да, вот это извращение с ksTextLineParam и ksTextItemParam мне категорически не нравится, спасибо что кто-то уже это всё написал и нужно просто взять и адаптировать под свои нужды

KrissKross

Чем плохи велосипеды
Они плохо сопрягаются со сторонними инструментами

Если вдруг вам понадобится PDM
От куда и как - бедной ПДМ брать информацию

или кто-то другой из вашей организации захочет использовать информацию со Сборочного чертежа
без костылей и знания вашего велосипеда - все кирдык-приехали

С вашей доморощенной псевдо-спецификации - Полу-штамп
Уф и на крутили

Может вам использовать спецификацию на листе
а рамку и штампа спецификации - так и быть свои доморощенные
Тем самым - вы сохраняете информацию в привычном для Компаса формате
А над представлением - изгаляетесь сами - в рамках позволенного Компасом

Если у вас есть 3Д Сборка
Также можно использовать Отчеты и их Таблицы, которые тоже можно настроить на отслеживание связи с головной сборкой, а внешний вид можно еще больше настраивать

Спецификация на листе
Специя на листе.png

KrissKross

Реализация

для доступа к спецификации на листе
воспользоваться интерфейсом
ISpecificationDescriptions

цитата из справки
Цитировать1. Для документа-спецификации возможно только одно описание, и оно есть всегда (т.е. добавлять и удалять нельзя).

2. В текстовом документе описаний нет.

3. Для остальных документов (чертеж, фрагмент, деталь и сборка) описаний может быть сколько угодно, в том числе и ни одного.

4. При добавлении нового описания оно становится текущим.

5. Данный интерфейс может быть получен следующими способами:

– от интерфейса документа IKompasDocument с помощью свойства IKompasDocument::SpecificationDescriptions,

– от интерфейса чертежа IDrawingDocument с помощью свойства IDrawingDocument::ChangeListDescriptions.

Справка онлайн
+ Благодарностей: 1

KrissKross

Ручное управление
Спецификацией на листе

Специя на листе-1.png

MrBarry

Цитата: KrissKross от 27.06.24, 10:42:37Чем плохи велосипеды
Цитата: KrissKross от 27.06.24, 10:42:37без костылей и знания вашего велосипеда - все кирдык-приехали
Цитата: KrissKross от 27.06.24, 10:42:37С вашей доморощенной псевдо-спецификации - Полу-штамп
Уф и на крутили
Я не инженер, не конструктор и вообще моя работа с Компасом не связана. Я - программист, и с Компасом познакомился только в рамках одного большого проекта, над которым работаю. Соответственно, я вообще ни в зуб ногой как там всё работает.
Не мне менять формат, в котором чертёж и спецификация будут представлены - это всё требование заказчика (тем более что там ещё будут листы с другими данными). Я работаю с тем, что имею.
Цитата: KrissKross от 27.06.24, 10:42:37Если вдруг вам понадобится PDM
Ну вообще нет, движение идёт как раз наоборот - вся информация уже есть в документе в нашей ERP системе, а чертёж и спецификация по нему чертятся на основе данных из неё. Соответственно, в обратную сторону данные читать смысла ноль)

Цитата: KrissKross от 27.06.24, 10:42:37Если у вас есть 3Д Сборка
Также можно использовать Отчеты и их Таблицы, которые тоже можно настроить на отслеживание связи с головной сборкой, а внешний вид можно еще больше настраивать
Впрочем за все советы спасибо, возможно в будущем когда будем разрабатывать новые 2D и 3D документы, я предложу сделать такой, более стандартизированный вариант.

Цитата: KrissKross от 27.06.24, 10:46:41Справка онлайн
Предпочитаю оффлайн справку. Имхо - удобнее, и всегда на компе сохранена

Валерий Изранов

Цитата: MrBarry от 27.06.24, 07:16:27Нужно заполнить спецификацию на втором листе
А в чем прелесть Спецификации именно на втором листе?

Если сделать Спецификацию отдельно?
Все Спецификации собрал и в отдел снабжения.

MrBarry

Честно, не знаю, вся конструкторская-проектировочная деятельность на стороне заказчика идёт, их надо за этим спрашивать
А меня это не интересует, моё дело не формат документа обсуждать, а заполнять его
+ Благодарностей: 1

Валерий Изранов

А кто просил то Спецификацию на второй лист загнать?
Почти в ссылку-тюрьму.

MrBarry

Когда обсуждали формат документов с заказчиком, они сказали: вот так мы делаем, так же делайте

Ну вообще они чертёж с 1 листа печатают на А4. Если спецификация на том же листе, она случаем не печатается на том же листе? Если так, то там просто места не хватит, всё мелкое будет
А если не печатается на том же, то не знаю. Может, дело в том, что лист со спецификацией не последний, там ещё 1-3 листа другой специфичной информации. Наверное, им удобнее так, чтоб на каждом листе своя тема была

Валерий Изранов

Ну Бог судья вашим заказчикам.
А вообще то Спецификация печатается отдельно.

MrBarry

Цитата: Валерий Изранов от 27.06.24, 13:39:43Ну Бог судья вашим заказчикам.
Вот-вот. Да и с получившимся документом тоже им работать, а не нам, так что пусть будет как хотят :D

СВ

#12
Цитата: MrBarry от 27.06.24, 13:35:33Ну вообще они чертёж с 1 листа печатают на А4. Если спецификация на том же листе, она случаем не печатается на том же листе?
Есть такое в ЕСКД:
3.19 Допускается совмещение спецификации со сборочным чертежом при условии их
размещения на листе формата А4 (ГОСТ 2.301). При этом ее располагают над основной
надписью и заполняют в том же порядке и по той же форме, что и спецификацию, выполненную
на отдельных листах.


Цитата: MrBarry от 27.06.24, 13:35:33Когда обсуждали формат документов с заказчиком, они сказали: вот так мы делаем, так же делайте
НИКОГДА НЕ ВРЕДНО ПОДСКАЗАТЬ людям, особенно об ошибке. А уж как они дальше поступят, это, разумеется, ИХ дело. Если это не касается ни вас, ни безопасности, разумеется.

p3452

MrBarry, настоятельно советую внимательнейшим образом перечитать пост №2 и №3 (особенно - пост №3)!

MrBarry

Цитата: СВ от 27.06.24, 16:19:43Есть такое в ЕСКД:
3.19 Допускается совмещение спецификации со сборочным чертежом при условии их
размещения на листе формата А4 (ГОСТ 2.301). При этом ее располагают над основной
надписью и заполняют в том же порядке и по той же форме, что и спецификацию, выполненную
на отдельных листах.
У нас там сам чертёж то мелковат на А4, если туда ещё и спецификацию добавить, то придётся не то что с лупой, с микроскопом всё читать :angel:
Потому лучше чтобы она была размещена на другом листе
Цитата: СВ от 27.06.24, 16:19:43НИКОГДА НЕ ВРЕДНО ПОДСКАЗАТЬ людям, особенно об ошибке.
Как человек "не в теме", я и не знал что в этом есть какая-то проблема
Собственно, и сейчас не вижу, этот документ предназначен не столько для хранения и переиспользования, а для печати и выдачи инженерам, которые это всё будут собирать на месте. Им будет фиолетово, как Компас будет получать информацию из спецификации
Цитата: p3452 от 27.06.24, 18:50:57MrBarry, настоятельно советую внимательнейшим образом перечитать пост №2 и №3 (особенно - пост №3)!
1) С такими намёками у нас снова будет пикировка на 10-20 постов, пока мы оба поймём о чём говорит собеседник
2) К тому же задача давно решена и ни я ни заказчик не заинтересованы в исправлении. Любые замечания нужно писать не мне, а им. Я - исполнитель, мне сказали как делать, я делаю. Решение как делать за ними, и они его уже приняли. И мы оба удовлетворены согласованным.