Тема: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?
Как написать графическую оболочку для вставки блоков, по нажатию на картинку?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → ObjectARX → Как написать графическую оболочку для вставки блоков, по нажатию на картинку?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как написать графическую оболочку для вставки блоков, по нажатию на картинку?
1. Зачем плодить кучу однаковых тем в разных ветках? Это только вызывает раздражение и уменьшает вероятность получения ответа (IMHO)...
2. Что такое картинка (слайд (*.sld), preview чертежа, растр (*.bmp, *.jpg, ...) и т.д.)?
3. Если есть слайды, то достаточно написать соответствующий раздел в **image в меню (если это ограниченный набор блоков).
А вообще без подробной информации о том что у тебя есть и чего ты хочешь добиться - подсказки не жди. Кроме того, так как ты написал сразу во все разделы форума, напрашивается вывод, что ты знаешь и VisualLisp, и VBA, и ObjectARX - тогда ты бы и сам легко решил такую задачу...
Действительно, вот загнул - целую графическую облочку для вставки блоков. Для примера приведу одно из своих графических меню без объяснений.
Пункт меню:
[_Button("Локальные сети", "lvs.bmp", "lvs.bmp")]^C^C^P(if (not C:ЛВС) (load "ddlvs")) ЛВС
Файл lvs.dcl
lvs:dialog { label = "Блоки локальных сетей"; fixed_width=true; :row {alignment=centered; :column { :image_button { key="ЛВС_01";width=6;height=4;color=black;} :image_button { key="ЛВС_02";width=6;height=4;color=black;} } :column { :image_button { key="ЛВС_03";width=6;height=4;color=black;} :image_button { key="ЛВС_04";width=6;height=4;color=black;} } } cancel_button; }
Файл ddlvs.lsp
(defun C:ЛВС ( / echo sl lvs n x y sim done rez dcl_id c) (setq echo (getvar "CMDECHO")) (setvar "CMDECHO" 0) (setq slt (getvar "CLAYER")) ;Загрузка диалогового окна (setq dcl_id (load_dialog "lvs")) (if (not (new_dialog "lvs" dcl_id)) (exit)) ;Активизация переменных (setq sl '("ЛВС_01" "ЛВС_02" "ЛВС_03" "ЛВС_04")) (setq lvs '("ЛВС_01" "ЛВС_02" "ЛВС_03" "ЛВС_04")) (setq n 0) (repeat 4 (setq x (dimx_tile (nth n sl)) y (dimy_tile (nth n sl))) (start_image (nth n sl)) (slide_image 0 0 x y (nth n lvs)) (end_image) (setq n (+ n 1)) ) (action_tile "ЛВС_01" "(setq sim \"ЛВС_01\" done 1)(done_dialog)") (action_tile "ЛВС_02" "(setq sim \"ЛВС_02\" done 1)(done_dialog)") (action_tile "ЛВС_03" "(setq sim \"ЛВС_03\" done 1)(done_dialog)") (action_tile "ЛВС_04" "(setq sim \"ЛВС_04\" done 1)(done_dialog)") (action_tile "cancel" "(setq done 2) (done_dialog)") ; Взять значения переменных (start_dialog) (unload_dialog dcl_id) (if (and sim (= done 1)) (progn (command "_-LAYER" "_M" "СС_ЛВС" "") (princ "\n Укажите точку вставки: ") (command "_-insert" sim pause "" "" ""))) (if (= done 2) (princ "\n Отмена.")) (setvar "CLAYER" slt) (setvar "CMDECHO" echo) (princ) )
> Владимир Громов
;Захотелось после праздников немного побурчать... ;Этот кусок можно записать покороче. (setq sl'("ЛВС_01" "ЛВС_02" "ЛВС_03" "ЛВС_04")) (setq lvs'("ЛВС_01" "ЛВС_02" "ЛВС_03" "ЛВС_04")) (setq n 0) (repeat 4 (setq x (dimx_tile (nth n sl)) y (dimy_tile (nth n sl))) (start_image (nth n sl)) (slide_image 0 0 x y (nth n lvs)) (end_image) (setq n (+ n 1)) ) (action_tile "ЛВС_01" "(setq sim \"ЛВС_01\" done 1) (done_dialog)") (action_tile "ЛВС_02" "(setq sim \"ЛВС_02\" done 1) (done_dialog)") (action_tile "ЛВС_03" "(setq sim \"ЛВС_03\" done 1) (done_dialog)") (action_tile "ЛВС_04" "(setq sim \"ЛВС_04\" done 1) (done_dialog)") ; Например так: (foreach l '("ЛВС_01" "ЛВС_02" "ЛВС_03" "ЛВС_04") (start_image l) (slide_image 0 0 (dimx_tile l) (dimy_tile l) l) (end_image) (action_tile l(vl-prin1-to-string(list 'progn (list 'setq 'sim l 'done 1) '(done_dialog)))) ) ; И никаких переменных...
> Евгений Елпанов
Если бы я только сейчас писал эту программу, то, возможно, воспользовался бы вашим предложением, но сейчас уже неохота переделывать кучу кодов для этого и подобных графических меню, которые уже давно работают и... да лень просто, ну его к бесу.
> Владимир Громов
Прекрасно тебя понимаю...
Глаз просто зацепился за знакомые строки. Может в будущем пригодится.
Благодарю за советы, тема писалась для нахождения наиболее быстрого подхода написания оболочки, тул палеты не удобны когда много блоков с различными параметрами, запутаешся кой найдёшь нужный блок. Пока оптимум вижу только в создание xml-меню либо использовании Autodesk Content Browser 2006(где удобно разложить блоки по катологам, соответствующим категориям и разделам). Повторюсь ещё раз тему создал лишь для нахождения оптимально удобного и быстро создаваемой оболочки!
> Василий
Читай книгу "САПР на базе AutoCAD - как это делается". Там как раз это рассматривается - иллюстрированное дерево меню в XML с привязкой хоть вставок блоков, хоть любых других LISP- выражений.
http://www.kurganobl.ru/cad/images/ruca … nu_new.jpg
Все в исходниках - и на Delphi, и на LISP. Можно и на ObjectARX, естественно, если уж вопрос сразу во всех ветках.
> ShaggyDoc
А не подскажешь где есть работоспособный исходник чтоб не набирать самому код XML
> Василий
Все исходники на прилагаемом к книге компакт-диске.
Но при чем тут "не набирать самому код XML"?
В XML описывается документ, то есть то, что надо выводить. Лучше всего его именно "набирать" в обычном текстовом редакторе. Только надо знать, что писать.
На диске также множество XML-меню.
А надеяться на то, что можно где-то взять "работоспособный исходник", решающий ваши задачи - бесполезно. При работе в системе ruCAD, описанной в книге, пользователи ничего не программируют. А вот меню свои )графическую оболочку)создают легко и много, включая иллюстрации прямо на лету, без мороки со слайдами. Но это уровень адаптации, а не ObjectARX, Delphi или LISP.
Впрочем, квалифицированный программист, получив идею, напишет такую оболочку за полдня. В любой среде.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → ObjectARX → Как написать графическую оболочку для вставки блоков, по нажатию на картинку?
Форум работает на PunBB, при поддержке Informer Technologies, Inc