Автоматизация работы с чертежами

Автор Alex152, 15.09.15, 23:47:15

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

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

Alex152

Доброго времени суток! Народ вновь нужна ваша профессиональная помощь!!
При работе с документацией с помощью своей программой, столкнулся вот с такой интересной проблемой.

Мы делаем конструкторскую документацию для различных фирм, не только для нашей и нас за частую просят в графе штампа "Наименование предприятия" установить тот или иной логотип предприятия.

При редактировании штампа картинку нельзя вставить, но ее можно вставить при редактировании главной таблицы основной надписи. Сервис-> Библиотеки стилей, типов и основных надписей . В приложении см. рис.

При работе с чертежом, эту проблему могу программно обойти - создаю новый слой вставляю картинку, ту которую надо!

А в спецификации такого не могу сделать! Вопрос, можно ли как то программно попасть в главную таблицу штампа и вставить нужный раст. (см. рис. 7)? Или может есть другой способ ?

Vin

Как вариант спецификацию делать в формате cdw.

Alex152

Vin. Увы но так нельзя! потому что поле того как проект окончен я программно из всех спецификаций считаю кол-во деталей, создаю ведомость покупных изделий. а переведя спецификацию в cdw. это все осложнит. Кроме того конструкторам удобнее использовать спецификацию spw,

Алхимик

#23
Хм... как так? :shu: :-)))

Все в рамках ТЗ.

Alex152

Алхимик! я не понял ваш ответ! Поясните пожалуйста!

Повторюсь - рукам вставить картинку в штамп спецификации я могу (то что вы показываете )
Но как сделать это программно ?
Вот например я заполняю штамп при открытии спецификации из базы чертежей
(В базе уже указано - Наименование, обозначение ..... Принадлежность к предприятию)

                                ksSpcDocument docSP = (ksSpcDocument)kompas.SpcDocument();
                                docSP.ksOpenDocument((Directory + @"\" + "`" + Stamp[1].ToString().Trim() + ".spw"), 0);
                                ksStamp S = (ksStamp)docSP.GetStamp(); // переменная штамп
                                S.ksOpenStamp();
                                ksTextItemParam itemParam = (ksTextItemParam)kompas.GetParamStruct((short)StructType2DEnum.ko_TextItemParam);
                                ksTextItemFont itemFont = (ksTextItemFont)itemParam.GetItemFont();
                                itemFont.SetBitVectorValue(ldefin2d.NEW_LINE, true);
                                S.ksColumnNumber(1);
                                itemParam.s = Stamp[3].ToString();// "Наименование";
                                S.ksTextLine(itemParam); и т.д. согласно данных базы!!


А здесь мне надо как то описать что бы в зависимости от принадлежности предприятия мне в спецификацию штампа добавлялся Растр.
И вот как это сделать за, что увязаться я не знаю!!
 

Дмитрий22

Решал такую задачу. Действительно, только через стиль можно вставить растр. в штамп спецификации. Но на др. компе штамп не откроется с растром. Программно добавить растр в штамп нельзя! Делал следующим образом: Транслировал спецификацию в чертеж, потом создавал слои с растром, потом уже все это хозяйство транслировал в PDF!
+ Благодарностей: 1

Alex152

Дмитрий спасибо! Понял!
Как вариант вместо логотипа текстом вбивать наименование предприятия!

pavel1992

#27
здравствуйте , так и не разобрался как прочитать и записать к себе в переменную материал если он  в виде дроби , прощу продемонстрировать на C# 

Все разобрался , если кому нужно , может конечно код кривой но работает  :)


            ksDocumentParam DocPm = (ksDocumentParam)kompas.GetParamStruct(35);

            ksStamp st = (ksStamp)doc2D.GetStamp();
            st.ksOpenStamp();
            ksTextItemParam item = null;
            st.ksColumnNumber(3);
            ksDynamicArray arr = (ksDynamicArray)st.ksGetStampColumnText(3);
            ksTextItemParam itemParam = (ksTextItemParam)kompas.GetParamStruct((short)StructType2DEnum.ko_TextItemParam);
            ksDynamicArray arrpLineText = (ksDynamicArray)kompas.GetDynamicArray(ldefin2d.TEXT_LINE_ARR);
            ksTextLineParam itemLineText = (ksTextLineParam)kompas.GetParamStruct((short)StructType2DEnum.ko_TextLineParam);
            if (itemLineText == null)
                return;
            itemLineText.Init();
            for (int i = 0, count = arr.ksGetArrayCount(); i < count; i++)
            {
                arr.ksGetArrayItem(i, itemLineText);
                ksDynamicArray arrpTextItem = (ksDynamicArray)itemLineText.GetTextItemArr();
                item = (ksTextItemParam)kompas.GetParamStruct((short)StructType2DEnum.ko_TextItemParam);

                if (item == null || arrpTextItem == null)
                    return;
                item.Init();
                string[] list = new string[arrpTextItem.ksGetArrayCount()];
                for (int j = 0, count2 = arrpTextItem.ksGetArrayCount(); j < count2; j++)
                {
                    arrpTextItem.ksGetArrayItem(j, item);
                    ksTextItemFont textItemFont = (ksTextItemFont)item.GetItemFont();
                    list[j] = item.s;
           
                }
                richTextBox1.Text = list[0] + "d$" + list[1] + ";" + list[2] + "$";
                arrpTextItem.ksDeleteArray();  //очистим массив компонент
            }
            arrpLineText.ksDeleteArray();

            arr.ksDeleteArray();
            arr = (ksDynamicArray)st.ksGetStampColumnText(3);