Re: ObjectARX. Отслеживание и рисование

И все таки если  Вам будет не сложно написать пример для копирования без резиновой линии, был бы еще более благодарен за помощь. Думаю пример понадобится не только мне и Kosarev-у )))
При помощи примера хотел бы сделать следующую вещь: часто приходится нумеровать блоки, т.е. вставлять текст с увеличением на 1 возле каждого блока, т.е. функция запрашивает точку, указываю и вставляется текст, но часто бывает, что текст наплывает на другие блоки, т.к. не вижу размеров всего вставляемого текста, приходится дополнительно его еще двигать, а при помощи примера думаю возможно будет сделать вставку текста так, что было видно какой длины текст и как он вставится, так что не думаю что пример будет совсем ненужным) Резиновая линия здесь совсем не смотрится)

Re: ObjectARX. Отслеживание и рисование

Жаль.
Вообще-то это мне нужно было не для чистого копирования. У меня есть програмка для вставки заготовок-блоков в том числе, когда нужно, с последующим многократным копированием. При использовании (command "_.COPY") мне не нравиться обработка при сбое, когда последнюю копию нужно стирать и т.п., поэтому использую (acet-ss-drag-move ...) из экспрессов. Неплохая штука, но есть кое-какие неудобства при использовании привязок и не поддерживается возможность ввода макросов типа "<45" и т.п. Вот была надежда на DynDraw...

Re: ObjectARX. Отслеживание и рисование

> ВитаЛ
Пример с позиционировнием и изменением текста привел уважаемый AY. Модифицируйте его по своему усмотрению (т.е. в этом примере вместо координат - порядковый номер или еще что-то).

Re: ObjectARX. Отслеживание и рисование

> Kosarev
Для вас пример AY тоже подойдет. Нужно вызвать (dyndraw) в цикле до того момента пока она не вернет nil. В место курсора вставляте блок, а в callback-функции его позиционируете. Все остальное - обработка ошибок и исключительных ситуаций.

Re: ObjectARX. Отслеживание и рисование

Спасибо за подсказку, буду пытаться...

Re: ObjectARX. Отслеживание и рисование

Александр Ривилис, огромное спасибо за столь полезное приложение! Я с его помощью написал много мелких и полезных лиспов. В процессе работы выявилась одна особенность, в момент динамической отрисовки если пользователь изменяет маштаб, врашением колесика и таким путем перемещается в другую часть чертежа, все работает отлично, но стоит пользователю нажать колесико (на нажатие работает pan) и переместиться в другую часть чертежа Acad вылетает, предупредив что что-то там обратилось к памяти и память не может быть read.
Я не осмеливаюсь просить вас о том чтоб что-то исправить, но может быть этот момент как-то можно обойти в лиспе?
Работаю в Acad 2006.
P.S. На работе ходят слухи о переходе на ZWcad. А для ZWcad ваше приложение подойдет? Если нет, тогда в чем причина?

Re: ObjectARX. Отслеживание и рисование

Игорь пишет:

но стоит пользователю нажать колесико (на нажатие работает pan) и переместиться в другую часть чертежа Acad вылетает, предупредив что что-то там обратилось к памяти и память не может быть read.

Увы, но у меня такого не происходит. Проверь команду dyn-test (которая в DynDrawRus.lsp).

P.S. На работе ходят слухи о переходе на ZWcad. А для ZWcad ваше приложение подойдет? Если нет, тогда в чем причина?

Нет. В нем нет ObjectARX - есть какая-то его замена, но функциональность значительно урезана (насколько мне известно). Кроме того я не работаю с клонами. Так что тут ничем помочь не смогу.

Re: ObjectARX. Отслеживание и рисование

Внес ряд исправлений.

Re: ObjectARX. Отслеживание и рисование

Заранее прошу прощения, если это я туплю, но мне кажется последняя версия DYNDAW потеряла одно полезное свойство...
Выкачал последнюю версию. Загрузил на ACAD2008 dyndraw2007.arx. Теперь пытаюсь эксплуатировать флаг ввода AcceptOtherInputString (2048). Возьмём тестовую функцию, приведенную в DynDrawRus.lsp, куда надо добавим 2048. В ACAD2002 эта комбинация при попытке ввода "неправильной" строки эту строку возвращала, и это было очень полезной штукой. Dyndraw2007.arx для ACAD2008 не даёт манипулировать с "неправильной" строкой. Я уже всю голову сломал...
Обращаюсь с просьбой к автору, может где-то завалялась версия, где всё по-старому. Или приведите примерчик "тормозу", как использовать AcceptOtherInputString. С уважением.

Re: ObjectARX. Отслеживание и рисование

> Kosarev
Исправлено.

Re: ObjectARX. Отслеживание и рисование

А перезалить?

Re: ObjectARX. Отслеживание и рисование

> Kosarev
Не понял. Перезалито было еще в пятницу:

48003 May 30 2008 16:29  dyndraw.zip

Re: ObjectARX. Отслеживание и рисование

В таком случае я не понял - по мне так ничего и не изменилось...
В версии 2002 в указанном примере на запрос второй точки отрисовки квадрата (при условии присутствия флага 2048) если ввести произвольную строку - функция заканчивает работу и ругается, что пользователь ввёл такую-то строку. Мене как раз это и нужно (ну не конкретно в этом примере, просто я широко использую это свойство в своих программах, что-то вроде (progn (initget 128)(getpoint)) - вводи что хочешь и дальше разбирайся). В версии 2007 функция реагирует на ввод строки, как на ввод точки в текущем положении курсора и продолжает работать. Про неправильную строку вспоминает только когда выйдешь правой кнопкой. Пишет, что введена пустая строка...
Где я "торможу"?

Re: ObjectARX. Отслеживание и рисование

> Kosarev

Command: DYN_TEST
Укажите базовую точку (ENTER - завершение):
Укажите точку [Базовая точка]: неправильнаястрока
Неизвестное ключевое слово <неправильнаястрока>!!!
Пользователь ввел строку: <неправильнаястрока>

Re: ObjectARX. Отслеживание и рисование

Уважаемый, убейте ничено не понимаю...
Всё взял из последнего архива (размер dyndraw2007.arx составляет 40960 - точно этот?),
добавляю (+ 2 128 2048),

Command: DYN_TEST
Укажите базовую точку (ENTER — завершение):
Укажите точку [Базовая точка]: QWERTY
[b](квадрат отрисовывается!!!)[/b]
Укажите базовую точку (ENTER — завершение):
Укажите точку [Базовая точка]:
........
........

Re: ObjectARX. Отслеживание и рисование

Похоже что у тебя все равно не та версия:

DynDraw2007.arx 40960 30.05.08 16:10:13

Перекачай заново и убедись, что у тебя загружается именно она.
P.S.: Размер мог и не измениться. Он меняется блоками.

Re: ObjectARX. Отслеживание и рисование

Спасибо, Александр!
Всё НАКОНЕЦ-ТО заработало как надо!
Дело, похоже, было в моих каких-то, уже подгруженных, типа "программах" или ещё в чём (чёрт его теперь знает), но перезагрузка компьютера сняла все проблемы. Извините, что отнял время. Плохо быть бестолковым...
С уважением.

Re: ObjectARX. Отслеживание и рисование

Здравствуйте, Александр!
Планируете ли Вы выпустить версию arx-приложения Dyndraw для AutoCAD2010?
Очень хотелось бы продолжать использовать ее в своих маленьких lisp-ах и при переходе на новый AutoCAD.
С уважением.

Re: ObjectARX. Отслеживание и рисование

Сделал, но не тестировал.

Re: ObjectARX. Отслеживание и рисование

Тогда может пришлете мне тестовую версию?
Я ее попробую в тех программах, в которых она работала у меня без проблем на AutoCAD2007.
О результатах сообщу.

(изменено: Александр Ривилис, 31 августа 2009г. 12:35:24)

Re: ObjectARX. Отслеживание и рисование

Она выложена там же, где и всегда (т.е.: http://www.maestrogroup.com.ua/support/dyndraw.zip )
Тестируй на здоровье.

Re: ObjectARX. Отслеживание и рисование

При использовании в своей lisp-программе DynDraw2010x32.arx во время динамического отслеживания (примитивы LINE, ARC и TEXT) в командной строке AutoCAD беспрерывно отображается:

Command:
Regen terminated

Command:
Regen terminated

Command:
Regen terminated

.
.
.

В AutoCAD2007 этого не было.
AutoCAD2010 не вылетает и все, что lisp-программа должна сделать - делает.

(изменено: Александр Ривилис, 31 августа 2009г. 16:57:49)

Re: ObjectARX. Отслеживание и рисование

В чем проблема - не знаю. При работе тестовой функции это тоже происходит? Я имею в виду ту, которая в первом сообщении этой темы или в файле DynDrawRus.lsp. У меня такого сообщения нет. Я проверял в AutoCAD 2010 English Version 2

(изменено: AVSold, 31 августа 2009г. 19:47:41)

Re: ObjectARX. Отслеживание и рисование

При работе тестовой функции C:DYN_TEST -> все хорошо. А вот функция C:dyn_test-1 (координаты точки указания в виде текстового примитива) вызывает в командной строке непрерывное:

Command:
Regen terminated

У меня стоит AutoCAD 2010 English (_vernum = Stores the AutoCAD build version number=D.55.0.0 (UNICODE)).
Попробую найти Version 2 и проверить.

(изменено: Александр Ривилис, 1 сентября 2009г. 11:07:45)

Re: ObjectARX. Отслеживание и рисование

Проверил C:dyn_test-1 (а именно вот этот код):

(defun C:dyn_test-1 (/ p_prev p_base p min_step ang dist p1 p2 p3 _bm
                       _ce  draw-ent en e)
    (vl-load-com)
    ;; Задаем минимальный шаг (расстояние между точками,
    ;; при превышении которого будут выполняться перерисовка
    (setq min_step 1e-6)
    (if (null dyndraw)
        (progn
            (arxload "dyndraw.arx")
        )
    ) ;_endof if progn
    ;; Подавляем BLIPMODE - чтобы polar не тормозил
    (setq _bm (getvar "blipmode")
          _ce (getvar "cmdecho")
    )
    (setvar "blipmode" 0)
    (setvar "cmdecho" 0)
    ;; Регистрируем функцию для вызова из ObjectARX
    (vl-acad-defun 'dyn_call_back-1)
    ;;создание примитива
    (entmake
        (list '(0 . "text")
              (cons 1 "00000") ;текст
              (cons 40 10.0) ;высота шрифта
              (cons 10 '(0.0 0.0 0.0))
              (cons 11 '(0.0 0.0 0.0))
        ) ;конец list
    )
    (setq draw-ent (vlax-ename->vla-object (setq en (entlast))))
    (if dyndraw
        (progn
            (setq p
                     (dyndraw
                         "dyn_call_back-1"
                         "\nУкажите точку : "
                         nil
                         (+ 2 128)
                         -1
                         nil
                     )
            )
            (redraw)
            (entupd en)
            (if p
                (progn
                    (setq p (trans p 1 0))
                    (vla-put-insertionpoint draw-ent (vlax-3d-point p))
                    (vla-put-TextString
                        draw-ent
                        (strcat "X=" (rtos (car p)) "  Y=" (rtos (cadr p)))
                    )
                )
            ) ;_endof if progn
        )
    )
    (setvar "blipmode" _bm)
    (setvar "cmdecho" _ce)
    (princ)
)
(defun dyn_call_back-1 (p / p1)
    (if (and p (not p_prev))
        (progn
            (setq p_prev (trans p 1 0))
            (vla-put-insertionpoint draw-ent (vlax-3d-point p_prev))
            (vla-put-TextString
               draw-ent
               (strcat "X=" (rtos (car p_prev)) "  Y=" (rtos (cadr p_prev)))
            )
        )
    )
    (if (and (listp p) (>= (distance p_prev (setq p1 (trans p 1 0))) min_step))
      (progn
          (vla-put-insertionpoint draw-ent (vlax-3d-point p1))
          (vla-put-TextString
             draw-ent
             (strcat "X=" (rtos (car p1)) "  Y=" (rtos (cadr p1)))
          )
          (setq p_prev p1)
      )
    )
    (vla-update draw-ent)
    t
)

Никаких лишних сообщений не появилось.
На всякий случай внес одно дополнение в программу. Скачай снова arx-файл.