Всем привет! Задача такая: есть чертёж и спецификация к нему вторым листом (см. прикреплённый скриншот). Нужно заполнить спецификацию на втором листе. Посмотрел в примерах от Аскона, и Step10 как раз про спецификацию. Однако, именно когда она отдельным документом, а не на одном из листов, как у меня. Соответственно, они не работают. Если быть конкретнее, то вот эта строка:
ksSpcDocument spcdoc = (ksSpcDocument)kompas.SpcActiveDocument();
Она всегда выдаёт 0 по понятной причине - у меня открыта не спецификация, а чертёж, в котором есть спецификация. Но как тогда её редактировать? Я, наверное, могу просто подобрать координаты ячеек и в них обычным ksText заполнять, но это всё равно что на индукционной плите развести костёр и на нём мясо жарить :-))) :-)))
Короче говоря, каким образом обращаться к такой спрятанной спецификации?
Обновление: во-первых, я забыл прикрепить скриншот :-))) Это должен был быть первый прикреплённый в этом сообщении
Во-вторых, решение такое: вся спецификация в таком документе это технически одна большая основная надпись, и её можно редактировать через интерфейс 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 мне категорически не нравится, спасибо что кто-то уже это всё написал и нужно просто взять и адаптировать под свои нужды
Чем плохи велосипеды
Они плохо сопрягаются со сторонними инструментами
Если вдруг вам понадобится PDM
От куда и как - бедной ПДМ брать информацию
или кто-то другой из вашей организации захочет использовать информацию со Сборочного чертежа
без костылей и знания вашего велосипеда - все кирдык-приехали
С вашей доморощенной псевдо-спецификации - Полу-штамп
Уф и на крутили
Может вам использовать спецификацию на листе
а рамку и штампа спецификации - так и быть свои доморощенные
Тем самым - вы сохраняете информацию в привычном для Компаса формате
А над представлением - изгаляетесь сами - в рамках позволенного Компасом
Если у вас есть 3Д Сборка
Также можно использовать Отчеты и их Таблицы, которые тоже можно настроить на отслеживание связи с головной сборкой, а внешний вид можно еще больше настраивать
Спецификация на листе
Специя на листе.png
Реализациядля доступа к спецификации на листе
воспользоваться интерфейсом
ISpecificationDescriptionsцитата из справки
Цитировать1. Для документа-спецификации возможно только одно описание, и оно есть всегда (т.е. добавлять и удалять нельзя).
2. В текстовом документе описаний нет.
3. Для остальных документов (чертеж, фрагмент, деталь и сборка) описаний может быть сколько угодно, в том числе и ни одного.
4. При добавлении нового описания оно становится текущим.
5. Данный интерфейс может быть получен следующими способами:
– от интерфейса документа IKompasDocument с помощью свойства IKompasDocument::SpecificationDescriptions,
– от интерфейса чертежа IDrawingDocument с помощью свойства IDrawingDocument::ChangeListDescriptions.
Справка онлайн (https://help.ascon.ru/KOMPAS_SDK/22/ru-RU/ispecificationdescriptions.html?q=ispecificationdescriptions)
Ручное управление
Спецификацией на листе
Специя на листе-1.png
Цитата: 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Справка онлайн (https://www.google.com/search?q=%D0%B7%D0%B0%D1%87%D0%B5%D0%BC+%D0%BD%D0%B0%D0%B6%D0%B8%D0%BC%D0%B0%D1%82%D1%8C+%D0%BD%D0%B0+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5+%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8+%D0%BD%D0%B0+%D1%84%D0%BE%D1%80%D1%83%D0%BC%D0%B0%D1%85&sca_esv=93393d72ee4371e2&sca_upv=1&sxsrf=ADLYWIIzCqMdIxDfSf2wK5pfD5Efz0G6Iw%3A1719478279855&ei=Byh9ZtfoM7TSwPAP1YepqAc&ved=0ahUKEwiXiMfgs_uGAxU0KRAIHdVDCnUQ4dUDCBA&uact=5&oq=%D0%B7%D0%B0%D1%87%D0%B5%D0%BC+%D0%BD%D0%B0%D0%B6%D0%B8%D0%BC%D0%B0%D1%82%D1%8C+%D0%BD%D0%B0+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5+%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8+%D0%BD%D0%B0+%D1%84%D0%BE%D1%80%D1%83%D0%BC%D0%B0%D1%85&gs_lp=Egxnd3Mtd2l6LXNlcnAiUtC30LDRh9C10Lwg0L3QsNC20LjQvNCw0YLRjCDQvdCwINGB0YLRgNCw0L3QvdGL0LUg0YHRgdGL0LvQutC4INC90LAg0YTQvtGA0YPQvNCw0YUyBRAhGKABSLlcUABY-1lwBHgBkAEAmAGZAaABxiSqAQUzMS4xN7gBA8gBAPgBAZgCNKACnCXCAgoQIxiABBgnGIoFwgIMECMYgAQYExgnGIoFwgILEC4YgAQY0QMYxwHCAggQLhiABBjUAsICBRAAGIAEwgIFEC4YgATCAgQQIxgnwgIIEC4YgAQYywHCAggQABiABBjLAcICBhAAGA0YHsICCBAAGA0YHhgPwgIGEAAYFhgewgIIEAAYFhgeGA_CAgkQABiABBgTGA3CAggQABgTGA0YHsICChAAGBMYCBgNGB7CAggQABiABBiiBMICBBAhGBXCAgcQIRigARgKwgIFECEYnwWYAwCSBwUzNS4xN6AH470C&sclient=gws-wiz-serp)
Предпочитаю оффлайн справку. Имхо - удобнее, и всегда на компе сохранена
Цитата: MrBarry от 27.06.24, 07:16:27Нужно заполнить спецификацию на втором листе
А в чем прелесть Спецификации именно на втором листе?
Если сделать Спецификацию отдельно?
Все Спецификации собрал и в отдел снабжения.
Честно, не знаю, вся конструкторская-проектировочная деятельность на стороне заказчика идёт, их надо за этим спрашивать
А меня это не интересует, моё дело не формат документа обсуждать, а заполнять его
А кто просил то Спецификацию на второй лист загнать?
Почти в ссылку-тюрьму.
Когда обсуждали формат документов с заказчиком, они сказали: вот так мы делаем, так же делайте
Ну вообще они чертёж с 1 листа печатают на А4. Если спецификация на том же листе, она случаем не печатается на том же листе? Если так, то там просто места не хватит, всё мелкое будет
А если не печатается на том же, то не знаю. Может, дело в том, что лист со спецификацией не последний, там ещё 1-3 листа другой специфичной информации. Наверное, им удобнее так, чтоб на каждом листе своя тема была
Ну Бог судья вашим заказчикам.
А вообще то Спецификация печатается отдельно.
Цитата: Валерий Изранов от 27.06.24, 13:39:43Ну Бог судья вашим заказчикам.
Вот-вот. Да и с получившимся документом тоже им работать, а не нам, так что пусть будет как хотят :D
Цитата: MrBarry от 27.06.24, 13:35:33Ну вообще они чертёж с 1 листа печатают на А4. Если спецификация на том же листе, она случаем не печатается на том же листе?
Есть такое в ЕСКД:
3.19 Допускается совмещение спецификации со сборочным чертежом при условии их
размещения на листе формата А4 (ГОСТ 2.301). При этом ее располагают над основной
надписью и заполняют в том же порядке и по той же форме, что и спецификацию, выполненную
на отдельных листах.Цитата: MrBarry от 27.06.24, 13:35:33Когда обсуждали формат документов с заказчиком, они сказали: вот так мы делаем, так же делайте
НИКОГДА НЕ ВРЕДНО ПОДСКАЗАТЬ людям, особенно об ошибке. А уж как они дальше поступят, это, разумеется, ИХ дело. Если это не касается ни вас, ни безопасности, разумеется.
MrBarry, настоятельно советую внимательнейшим образом перечитать пост №2 и №3 (особенно - пост №3)!
Цитата: СВ от 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) К тому же задача давно решена и ни я ни заказчик не заинтересованы в исправлении. Любые замечания нужно писать не мне, а им. Я - исполнитель, мне сказали как делать, я делаю. Решение как делать за ними, и они его уже приняли. И мы оба удовлетворены согласованным.