Интересный пример с пользовательскими объектами для изучения

Автор Тема: Интересный пример с пользовательскими объектами для изучения  (Прочитано 38772 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Вы инициализировали указатель на ноль и это все изменило,
почему то.
35. ACHAR* str = NULL;

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Так что действительно str надо освобождать?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Александр, а освободить str? :):):)
Я был не прав. :) Я просто проверял работоспособность кода.
а вот вопросик такой, убрать то не сложно, только как тогда будет работать readItem? ведь по логике то внутри readItem должен стоять вызов readString (ну я б так сделал, чтоб не городить кучу лишнего кода). но информации о том, что поменяется входной парамерт для readItem не нашел.
Если уберут, значит сделают параметр с AcString. Хотя я думаю это будет еще очень не скоро.
Так что действительно str надо освобождать?
Да. Читай документацию.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вы инициализировали указатель на ноль и это все изменило,
почему то.
35. ACHAR* str = NULL;
Думаю, что если str != NULL, то AutoCAD считает, что нужно считывать именно в эту область памяти (а у тебя там в этот момент мусор), а если str == NULL, то он сам распределяет память. Но это только мои предположения, т.к. в документации ни слова об этом не сказано.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
чуток дополню ответ Александра.
ClassName * pVariable = NULL; Это просто запись нуля в переменную (указатель ведь тоже переменная, которая содержит число). Обычно нулем помечаются невалидные указатели.

PS: Когда пишем NULL, то объект не создается. Cкорей всего внутри readString есть что-то типа

{
   if (pVal== NULL)
     pVal = new ACHAR[255];
   // ну а дальше наполняем pVal
   // и, если не было new, то наполнить не получится :):):)
}

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Александр Ривилис: "А вот так у меня и Undo/Redo корректно работает:
Вся тонкость в строке   if (es == Acad::eOk) SetupEntitys();"

Жаль, я нарочно хотел записывать все свойства объектов массива в файл и убрал setupEntites(),
а теперь получается масло масляное.

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Хотя можно разбить функцию SetupMe на две, чтоб вторая изменяла только вершины штриховки.
Нет я хотел бы, чтобы все свойства штриховки измененные пользователем, тоже подчинялись команде undo.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я не очень понял чего ты добиваешься и чем тебя не устраивает этот код. Попробуй так:
Код - C++ [Выбрать]
  1. if (es == Acad::eOk && pFiler->filerType() == AcDb::kUndoFiler) {
  2.     SetupEntitys();
  3. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Я попрбую обяснить, я хочу дописать код, чтобы пользователь мог в течении сеанса менять свойства вложенных объектов, например цвет этой штриховки, шаг штрихов, угол наклона. Дописать такой код мне вроде не трудно. А вот команды undo , redo работать тут не будут. Другими словами будет возможность восстановить только вершины этой штриховки.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А вот команды undo , redo работать тут не будут.
Не будут потому что ты не хочешь чтобы они работали или не будут потому что ты не знаешь как это сделать?
Свойства объектов будут у каждого объекта отдельно или они общие для всех MyHatch в чертеже?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Не будут, потому что я не знаю как это сделать. Либо надо создавать с ноля свою базу для каждого объекта с запоминанием шагов пользователя.

Что то типа очереди. Я думал, что можно сделать проще.
« Последнее редактирование: 14-11-2014, 10:55:02 от Эд »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не будут, потому что я не знаю как это сделать.
Ну это горе - не беда. Мы ему поможем. Сохраняй/восстанавливай все эти данные в MyHatch::dwgOutFields/MyHatch::dwgInFields.
В том числе и контур штриховки. А в AuPolyline::dwgInFields не забывай вызывать SetupEntitys(); только этот метод должен работать не с фиксированными значеними, а с теми, которые ввел пользователь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, обратил внимание, что в твоих исходниках те же грабли, что и у Николая Горлова: http://adn-cis.org/forum/index.php?topic=1076.0
Ты еще на них не наступил, но обязательно наступишь. Так что исправляй.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Опять проблема, установил 64 платформу WIN7 (была WIN7 x32), теперь этот пример не компилируется, хотя на x32 все было нормально. В частности в данном случае компилятор (VS2008) не понимает ссылки $(ARX2012) в настройках проекта. Если указать полный путь то компилируется.
Также, если создать новое решение с 2-мя проектами вновь, запускаемый проект не может связаться со вторым и не понимает уже остальные макросы (или не знаю как их назвать) $(ARX2012)\lib-$(PlatformName).
Буду благодарен если подскажите как с этим разобраться, и как правильно называются эти "макросы" из за этого не могу в гугле найти самостоятельно тему. И какую литературу надо читать для того чтоб разобраться.