Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: VLADIMIRnext от 01-07-2022, 16:03:36

Название: Разделение текста
Отправлено: VLADIMIRnext от 01-07-2022, 16:03:36
Еще раз здравствуйте))
Из чертежа получаю текст AcDbMText без разделителей, но автокад его делит на строки.
Как можно восстановить полностью исходный текст с переносами, где они есть в автокаде, но без управляющих символов?

Знаю что есть ограничивающие точки, но не приходит в голову правильного решения с использованием их. Я так понимаю задача непростая
Название: Re: Разделение текста
Отправлено: Александр Ривилис от 01-07-2022, 22:25:07
Я так понимаю задача непростая
Очень непростая и в общем случае не имеющая решения.
Название: Re: Разделение текста
Отправлено: Tever от 03-07-2022, 14:13:38
Я делал вот так:
Код - C++ [Выбрать]
  1. AcString readString = L"", readAll  = L"";
  2. AcDbObjectId objId;
  3. acdbGetObjectId(objId, ss0);
  4. AcDbObject* tmpObj;
  5. if (acdbOpenAcDbObject(tmpObj, objId, AcDb::kForRead, true)== Acad::eOk)
  6. {
  7.         if(tmpObj->isKindOf(AcDbMText::desc()))
  8.         {
  9.                 AcDbMText *pMText = AcDbMText::cast(tmpObj);
  10.                 AcDbVoidPtrArray allMtext;
  11.                 pMText->explode(allMtext);
  12.                 if (allMtext.length() > 0)
  13.                 {
  14.                         for (int i=0; i < allMtext.length(); i++)
  15.                         {              
  16.                                 AcDbText *pText = (AcDbText *)allMtext[i];
  17.                                 pText->close();
  18.                                 readString = L"";
  19.                                 if (pText->isKindOf(AcDbText::desc()))
  20.                                 {
  21.                                         readString.format(L"%s",pText->textString());
  22.                                         readAll  = readAll  + readString;
  23.                                 }
  24.                         }
  25.                 }
  26.                 pMText->close();
  27.         }
  28.         tmpObj->close();
  29. }      
  30.  
Название: Re: Разделение текста
Отправлено: Александр Ривилис от 03-07-2022, 20:18:14
Я делал вот так:
Я не уверен, что это именно то, что требуется VLADIMIRnext. Если я правильно понял, то его интересует не только разбиение на отдельные части и но их местоположение.
Название: Re: Разделение текста
Отправлено: Александр Ривилис от 04-07-2022, 00:01:12
VLADIMIRnext,
Можешь попробовать воспользоваться AcDbMText::explodeFragments
Название: Re: Разделение текста
Отправлено: VLADIMIRnext от 04-07-2022, 10:20:23
Я делал вот так:
Хорошо, спасибо посмотрю.
Название: Re: Разделение текста
Отправлено: VLADIMIRnext от 04-07-2022, 10:21:31
его интересует не только разбиение на отдельные части и но их местоположение.
Вы правы.
AcDbMText::explodeFragments
Сейчас все буду пробовать. Надеюсь получится не сильно костыльно)
Название: Re: Разделение текста
Отправлено: VLADIMIRnext от 04-07-2022, 11:13:06
Александр Ривилис,
А в explodeFraments нужно память освобождать, выделенную под фрагмент?
Название: Re: Разделение текста
Отправлено: Александр Ривилис от 04-07-2022, 19:22:57
Александр Ривилис,
А в explodeFraments нужно память освобождать, выделенную под фрагмент?
Насколько я помню - не нужно.