Тема: Jig+потомок от AcDbEntity

В потомке перегружены worldDraw и transformBy.
В worldDraw используется функция ... gtometry().pline(< шаблон полилинии >,...).
При работе механизма Jig объект отображается только при движении курсора мыши,
если курсор стоит на месте, а объект еще недобавлен в БД, drag, еще не
отработала, объекта не видно. В стандартном примере rect - рисуемымй объект видно
постоянно, когда мышь движется и когда стоит не месте ( в рамках работы Jig),
там операции Jig осуществляются над стандартной полилинией.
Если в worldDarw использовать другой метод polyline или region - все работает
нормально. Без  Jigа также все работает прекрасно с ф-ей
(< шаблон полилинии >,...), созданный объект надежно добавляется в базу данных.
Может быть не все функции перегружены в потомке AcDbEntity???
Как я понял из документации  для механизма Jig нужен только метод worldDraw,
а он перегружен и работает (объект добавляется в БД и прорисовывается как надо).
есть ли в данном случае перегружать все функции, от AcDbObject, AcDbTntity и т.д.
Может быть совсем не перегрузке дело???
Заранее большое спасибо. Алексеев С.

Re: Jig+потомок от AcDbEntity

Тут может быть много причен. Одна из которых - объект отрисовывается чётное кол-во раз на одном месте, то есть затирает сам себя.
Если бы можно было взглянуть на код, то может быть прояснилось бы больше.

Re: Jig+потомок от AcDbEntity

не знаю, по крайней мере у меня стандартные объекты тоже так же отрисовываются - видны только когда двигаешь мышкой, а иначе он просто перерисовывается постоянно. конец перекрытого метода sampler:
    if ((stat == kNormal)
        && (mPoint == oldPoint)
        && !isInUpdate) return kNoChange;
    return stat;
то есть, если предыдущая точка равна вновь полученной, то надо вернуть kNoChange.

Re: Jig+потомок от AcDbEntity

Про своё отношение к Jig, я уже писАл. Но, тем не менее, повторюсь - гораздо проще создать свой inputPointMonitor и вызывать функцию draw() из графического контекста с передачей указателя либо на один объект, либо на столько, с колько вам нужно
Вызывая acedGetPoint() и параллельно передавая в монитор значение режима отрисовки (int m_mode)
например

Acad::ErrorStatus _TST_monitor::monitorInputPoint(bool& appendToTooltipStr,
                                                  char*& additionalTooltipString,
                                                  AcGiViewportDraw* mode,
                                                  AcApDocument* document,
                                                  ...)
{
    ...
    if (m_mode==0)
    {
        pEnt->transformBy(matritsaPerenosa);
        mode->geometry().draw(pEnt);
    }
    if (m_mode==1)
    {
        mode->geometry().draw(pEnt2);
    }
    //AcDbEntity *pEnt
    ...
}

указатели на pEnt и pEnt2 можно использовать в дальнейшем , например, для вставки в базу данных

сам долго парился с джигой, пока не нашел этот вариант
Гораздо удобней, и работает без глюков и заморочек меньше, а самое главное - можно без геморроя отрисовывать как один, так и несколько объектов. Причём любых.
Господа, если я чего-то не понимаю в Jig'е, поделитесь. Но моё мнение - Jig страшно неудобная штука

Re: Jig+потомок от AcDbEntity

Использую monitorInputPoint, таскаю несколько примитивов, в том числе  и блок с аттрибутами. Все вроде нормально, вот только, если в стиле текста используется True Type шрифт, то остается мусор на экране. Как от этого избавиться? С векторными шрифтами все нормально....

Re: Jig+потомок от AcDbEntity

Jig - это возможность интерактивного общения с пользователем чтобы задать ряд ключевых параметров при построении объекта с визуальным отображением.
Т.е. если просто надо разместить что-то на экране указав точку, то это одно.
Если надо запросить последовательно N параметров, каждый из которых может быть введен опционально, то как это сделать с monitorom... я не знаю...
Ну типа самый приметивный способ. Создать окружность. Сначала указать центр - а потом указать радиус - либо мышкой, либо вбив в строке double указав что это радиус. Т.е. механизм keywords - тоже можно всунуть в монитор, но все это счастье будет размазано по программе, а так вроде как все в одном классе - я пользуюсь и гемора не испытываю. Гемор в предметной логике создания объекта... но он будет и в Jig-e и в monitore.

Re: Jig+потомок от AcDbEntity

Теперь по теме.
1) В Jige - надо создавать копию объекта. В этом случае оригинал надо поставить invisible т.к. если паралельно с копией объекта менять оригинал объекта - то... они будут друг друга затирать. После завершения создания - вернуть объект оригинал в visible.
2) Если возвращаешь из Jiga - сам объект который уже добавлен в базу, то он при изменении отрисовывается и базой (стандартным механизмом) и Jig-ом - опять получаем затирание.
Когда таскаешь мышку, то обрабатывается только Jig - объект видно. Мышку остановил - хлопс перерисовался и сам объект поверх того что отрисовал Jig. Получаем симпатичное мигание.

Re: Jig+потомок от AcDbEntity

Спасибо за разъяснения по поводу Jig'a, но вопрос был в другом: как избавиться от мусора на экране, когда таскаешь True Type текст в monitorInputPoint (просто не хотелось создавать новую тему). По-моему экран в этом случае не перерисовывается. Можно конечно посылать акаду комманду regen, но смотреть на это больно...
ЗЫ Посмотрел программку DynDraw.arx Александра Ривилиса, там все путем и с True Type текстом, но там реализация через Jig. Может зря я с monitorInputPoint связался. Но в документации написано, что в Jig нельзя использовать комплексные объекты...
Ладно, будем копать, если кто чего подскажет - буду благодарен:)

Re: Jig+потомок от AcDbEntity

Ж:) Наверное с InputPM - зря связался. Типа Jig специально делали для этих целей. А InputPM - это поделка людей с "пытливым" умом. :) Ничего плохого, просто свои траблы.
И еще вспомнил - затирание может поисходить когда говоришь aquarePoint(pt1, lastPoint) - тогда между указанной и пред. точкой рисуется линия - и сам объект там же рисует линию - получается опять же затираие - у меня по-крайней мере такой косяк есть - но мне его пока править не хочется - есть и пусть пока будет - другие вопросы более насущны.

Re: Jig+потомок от AcDbEntity

> bkrug
Константин как раз и реализовывал это для сложных объектов. Поищи по форуму - он об этом писал. Конечно не без нюансов, но это все реализуемо. А в моей програмке dyndraw я тоже помучался с ненормальным отображением, пока не пиханул всю графику в метод worldDraw() фиктивного примитива, чего и тебе советую.

Re: Jig+потомок от AcDbEntity

> Александр Ривилис
Опробовал Ваш вариант, по-моему получается лучше, чем было и без мусора;) В очередной раз - спасибо огромное!!!
И > KonstantinM (2005-12-09 11:29:40) спасибо, через Jig все же лучше...