• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Как получить технические требования чертежа

Автор SDV, 24.10.07, 18:41:19

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

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

SDV

Помогите разобраться.
КОМПАС 8, Delphi 7.
Получаю ТТ из чертежа так:

  // Получаем указатель на ТТ
  pTT := iDoc.ksGetReferenceDocumentPart(1);

// Получаем и указатель на структуру параметров ТТ и создем ее
  TTPar := ksTechnicalDemandParam(iKompas.GetParamStruct(ko_TechnicalDemandParam));
  TTPar.Init;

  // Заполняем структупу параметров ТТ данными из текущего документа
  iDoc.ksGetObjParam(pTT,TTPar,TECHNICAL_DEMAND_PAR);

  // Получаем указатель на структуру параметров текстовой строки в ТТ и создаем ее
  iLine := ksTextLineParam(iKompas.GetParamStruct(ko_TextLineParam));
  iLine.Init;

  // Получаем указательна структуру параметров элемента строки в ТТ и создаем его
  iItem := ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  iItem.Init;

  // Получаем указатель на динамический массив строк ТТ
  iDLine := ksDynamicArray(iKompas.GetDynamicArray(TEXT_LINE_ARR));
  if iDLine = nil then Exit;

  // Перебираем все строки ТТ активного документа
  for i := 0 to TTPar.strCount - 1 do
  begin
   iDoc.ksGetObjParam(pTT,iLine,TT_FIRST_STR+i);
   iDLine := ksDynamicArray(iLine.GetTextItemArr);
   TTStr := ' ';
   for j := 0 to iDLine.ksGetArrayCount - 1 do
   begin
    iDLine.ksGetArrayItem(j,iItem);
    TTStr := TTStr + iItem.s;
   end;
   iKompas.ksMessage(TTStr);
  end;
 
В TTStr получаем строки ТТ.
Когда вручную вводим ТТ в чертеж и строка не помещается в габаритный прямоугольник,
КОМПАС сам делает перенос на следующую строку. При нажатии Enter - перенос делается
принудительно и вводится очередной параграф. Когда же получаю строку ТТ из программы,
то нет возможности определить конец (начало следующего) параграфа. Строки следуют подряд:
и те, что получились в результате автоматического переноса и те которые начинают новый параграф.
Каким образом в программе определить начало и конец параграфа ТТ?
Заранее благодарен за помощь.

SDV

Наверное возникает вопрос, а для чего все это нужно?
Мы хотим разработать битблиотеку для автоматизрованного формирования ТТ
по нашим шаблонам с возможностью их перевода на иностранные языки.
Использовать штатные средства (текстовые шаблоны) КОМПАС не получается,
т.к. не возможно связать строки на разных языках.
Для начала хотим из всех черетжей, котроые у нас есть в КОМПАС-е вытащить
ТТ в Excel, что бы отсортировать, сгруппировать и классифицировать.
Готовая библиотека вместе с базой данных ТТ (оболочка) будет выложена на сайте
АСКОН, как свободно распространяемая.
Помогите в благородном деле бесплатного развития ПО под КОМПАС !!!

Олег Лысенко

Как на меня это правильней делать в Лоцмане,  вытаскивать туда тех.требования.  и в нем же хранить оригинал и перевод,  и сделать процедуру по автоматической подстановке.

SDV

Вопрос не в среде разработки и перевода ТТ, а в алгоритме.
То, что вы предлагаете: вытащить ТТ из чертежа (например интегратором ЛОЦМАН), затем отдать их на перевод, переведенный текст процедурой подставить в документ требует оплачивать услуги переводчика для каждого чертежа в отдельности.
Т.к. техтребования в наших чертежах можно составить на основании глоссария из  2-3 сотен стандартных фраз (шаблонов), мы хотим сначала составить этот глоссарий, а затем отдать его на перевод и в последствии использовать его для перевода всех вновь выпускаемых чертежей не оплачивая услуги переводчиков. Поверьте, при 2-3 тысячах черетежей на изделие, в каждом из которых в среднем по 10-20 фраз ТТ - это гораздо выгоднее.
Вот для того, что бы составить этот глоссарий нам и необходимо "набрать статистику", т.е. вытащить ТТ из всех чертежей по одному изделию, но не построчно, а цельными фразами (параграфами). Уж очень не хочется делать это "ручками" и "глазками".
Вопрос не снимается. Жду помощи !!!

chelkar

Посмотрел что есть в справке SDK на эту тему. А ничего и нет :(
Ввести параграф можно, а вот прочитать похоже никак.
А если брать предложениями? Точку в тексте выделить можно наверное. Хотя при орфографических ошибках и это не поможет.

Judzhin

Попробуйте увеличить ширину техтребований, так чтобы один абзац занимал одну строку (если не ошибаюся, метод ksDocument2D::ksOpenTechnicalDemand принимает в качестве первого аргумента указатель на габаритные прямоугольники).

Олег Лысенко

Цитата: SDV от 26.10.07, 17:01:50
Вопрос не в среде разработки и перевода ТТ, а в алгоритме.


Я хотел бы предложить другой алгоритм.  Первое в Лоцмане 3 атрибута, текст на руском, английском и состояние ТТ (1-руский, 2- английский, 3-..)
Далее делается плагин который автоматически выбирает тексты в глосарий. Глосарий переводится.  Второй плагин,  заполняет атрибуты английским текстом.  Третий управляет какие ТТ актуальные на данный момент руские или английские.

Главное что у вас остается и руский и английский текст. 

SDV

Господа, просьба продолжить тему.
Вариант с расширением габаритного прямоугольника мне очень понравился.
Пробую так:
iKompas := KompasObject(CreateKompasObject); 
iDoc := ksDocument2D(iKompas.ActiveDocument2D);
pTT := iDoc.ksGetReferenceDocumentPart(1);
TTPar := ksTechnicalDemandParam(iKompas.GetParamStruct(ko_TechnicalDemandParam));
TTPar.Init;

iDoc.ksGetObjParam(pTT,TTPar,TECHNICAL_DEMAND_PAR);

iGab := ksDynamicArray(iKompas.GetDynamicArray(RECT_ARR));
iRect := ksRectParam(iKompas.GetParamStruct(ko_RectParam));
iPoint := ksMathPointParam(iKompas.GetParamStruct(ko_MathPointParam));

iGab := ksDynamicArray(TTPar.GetPGab);

iPoint.x := 0;
iPoint.y := 400;
iRect.SetpTop(iPoint);
iPoint.x := 1400;
iPoint.y := 0;
iRect.SetpBot(iPoint);

iGab.ksSetArrayItem(0, iRect);
TTPar.SetPGab(iGab);
iDoc.ksSetObjParam(pTT,TTpar,TECHNICAL_DEMAND_PAR);

Но в документе ничего не происходит. Технические требования остаются в своих габаритах и на своих местах.

Подскажите, что не так.

SDV

Прошу модераторов закрыть эту тему в связи с открытием новой