Тема: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

Re: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

1. Зачем плодить кучу однаковых тем в разных ветках? Это только вызывает раздражение и уменьшает вероятность получения ответа (IMHO)...
2. Что такое картинка (слайд (*.sld), preview чертежа, растр (*.bmp, *.jpg, ...) и т.д.)?
3. Если есть слайды, то достаточно написать соответствующий раздел в **image в меню (если это ограниченный набор блоков).
А вообще без подробной информации о том что у тебя есть и чего ты хочешь добиться - подсказки не жди. Кроме того, так как ты написал сразу во все разделы форума, напрашивается вывод, что ты знаешь и VisualLisp, и VBA, и ObjectARX - тогда ты бы и сам легко решил такую задачу... wink

Re: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

Действительно, вот загнул - целую графическую облочку для вставки блоков. Для примера приведу одно из своих графических меню без объяснений.
Пункт меню:

[_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)
)

Re: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

> Владимир Громов

;Захотелось после праздников немного побурчать...
;Этот кусок можно записать покороче.
(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))))
)
; И никаких переменных...
  

Re: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

> Евгений Елпанов
Если бы я только сейчас писал эту программу, то, возможно, воспользовался бы вашим предложением, но сейчас уже неохота переделывать кучу кодов для этого и подобных графических меню, которые уже давно работают и... да лень просто, ну его к бесу.

Re: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

> Владимир Громов
Прекрасно тебя понимаю...
Глаз просто зацепился за знакомые строки. Может в будущем пригодится.

Re: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

Благодарю за советы, тема писалась для нахождения наиболее быстрого подхода написания оболочки, тул палеты не удобны когда много блоков с различными параметрами, запутаешся кой найдёшь нужный блок. Пока оптимум вижу только в создание xml-меню либо использовании Autodesk Content Browser 2006(где удобно разложить блоки по катологам, соответствующим категориям и разделам). Повторюсь ещё раз тему создал лишь для нахождения оптимально удобного и быстро создаваемой оболочки!

Re: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

> Василий
Читай книгу "САПР на базе AutoCAD - как это делается". Там как раз это рассматривается - иллюстрированное дерево меню в XML с привязкой хоть вставок блоков, хоть любых других LISP- выражений.
http://www.kurganobl.ru/cad/images/ruca … nu_new.jpg
Все в исходниках - и на Delphi, и на LISP. Можно и на ObjectARX, естественно, если уж вопрос сразу во всех ветках.

Re: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

> ShaggyDoc
А не подскажешь где есть работоспособный исходник чтоб не набирать самому код XML

Re: Как написать графическую оболочку для вставки блоков, по нажатию на картинку?

> Василий
Все исходники на прилагаемом к книге компакт-диске.
Но при чем тут "не набирать самому код XML"?
В XML описывается документ, то есть то, что надо выводить. Лучше всего его именно "набирать" в обычном текстовом редакторе.  Только надо знать, что писать.
На диске также множество XML-меню.
А надеяться на то, что можно где-то взять "работоспособный исходник", решающий ваши задачи - бесполезно. При работе в системе ruCAD, описанной в книге, пользователи ничего не программируют. А вот меню свои )графическую оболочку)создают легко и много, включая иллюстрации прямо на лету, без мороки со слайдами. Но это уровень адаптации, а не ObjectARX, Delphi или LISP.
Впрочем, квалифицированный программист, получив идею, напишет такую оболочку за полдня. В любой среде.