LINUX.ORG.RU

LispWorks CAPI, как отрисовать несколько срелок в одном и том же окне

 , ,


0

2
(setq po
      (capi:contain
       (make-instance 'capi:arrow-pinboard-object
                      :start-x 50 :end-x 50
                      :start-y 50 :end-y 20
                      :graphics-args
                      '(:thickness 1 :foreground :red))))
;;I tried accessors

(pinboard-object-pinboard po)
;;=> #<CAPI:PINBOARD-LAYOUT  402001FCC3>
(pinboard-object-activep po)
;;=> T
(pinboard-object-graphics-args po)
;;=> (:THICKNESS 1 :FOREGROUND :RED)

but I would like to access, say :start-x, change it and draw other arrow in the same window, how to?

;start-x is initarg т.е. я его не могу менять налету, лезу в superclasses но там тоже не могу менять initargs.



Последнее исправление: saufesma (всего исправлений: 2)

Я мало работал с CAPI, но он как-то не особо развитым показался. А нельзя сделать несколько и скрывать ненужные?

den73 ★★★★★
()
Ответ на: комментарий от monk
(move-line po 100 50 100 20)
(move-line po 50 50 50 20)

двигает, да.

(line-pinboard-object-coordinates po)  

координаты возвращает.

Да, дело за малым осталось, надо написать что-то вроде make-many-copies-magically function.

saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 2)
Ответ на: комментарий от den73

но он как-то не особо развитым показался.

не сыпь мне соль на рану, у меня лицензия на Lispworks.

А нельзя сделать несколько и скрывать ненужные?

Ненужных нет.

saufesma
() автор топика
Ответ на: комментарий от monk

Сегодня такая мысль пришла

list-of-args (startx starty endx endy ... startxn startyn endxn endyn)

(defun make-arrow (startx starty endx endy)
       (make-instance 'capi:arrow-pinboard-object
                      :start-x startx :end-x endx
                      :start-y starty :end-y endy
                      :graphics-args
                      '(:thickness 1 :foreground :red))))

(setq my-arrows (list
(if (< 0 (length list-of-args))
do
(make-arrow startx starty endx endy)
(capi:contain my-arrows)
saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 2)
Ответ на: комментарий от saufesma

У тебя опять что-то странное написано.

defun - это определение функции. Что оно делает внутри вычисления? Что такое do? Переменная?

monk ★★★★★
()
Ответ на: комментарий от monk

defun - это определение функции. Что оно делает внутри вычисления?

Только-что исправил, я с работы, только зашёл.

saufesma
() автор топика
Ответ на: комментарий от monk
(defvar starty)
(defvar endy)
(setq starty 50)
(setq endy 20)
(defun make-arrow (startx endx starty endy)
(make-instance 'capi:arrow-pinboard-object
                      :start-x startx :end-x endx
                      :start-y starty :end-y endy
                      :graphics-args
                      '(:thickness 1 :foreground :red)))
(setq list-of-startx (list 50 100 200))
(setq my-arrows (list
(setq startx (car list-of-startx))
(setq endx startx)
(make-arrow startx endx starty endy)

До нормального цикла ещё далеко

saufesma
() автор топика
Ответ на: комментарий от saufesma

startx starty endx endy

а нормальных координат не завезли что-ли?

у меня лицензия на Lispworks.

и как, лучше чем sbcl? какие плюсы?

что пилишь, если не секрет?

troy-harder
()
Ответ на: комментарий от monk
(defvar startx)
(defvar starty)
(defvar endx)
(defvar endy)
(setq startx 0)
(setq starty 50)
(setq endx 0)
(setq endy 20)
(defun make-arrow (startx endx starty endy)
(make-instance 'capi:arrow-pinboard-object
                      :start-x startx :end-x endx
                      :start-y starty :end-y endy
                      :graphics-args
                      '(:thickness 1 :foreground :red)))

(setq list-of-startx (list 50 100 200))

(defun slave (list-of-startx startx endx starty endy)
(if (eq (car list-of-startx) nil)
my-arrows
(progn
(setq endx (setq startx (car list-of-startx)))
(setq my-arrows (list (make-arrow startx endx starty endy))) ;;алгоритм не тот
(slave (cdr list-of-startx) startx endx starty endy))))

(slave list-of-startx startx endx starty endy)
(capi:contain my-arrows)

Не знаю пока где косяк, рисует только последнюю стрелку my-arrows => (#<CAPI:ARROW-PINBOARD-OBJECT 40200A27AB>)

saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 2)
Ответ на: комментарий от troy-harder

и как, лучше чем sbcl?

не знаю

какие плюсы?

шикарная документация

что пилишь, если не секрет?

просто разбираюсь как с зверем бороться

saufesma
() автор топика
Ответ на: комментарий от saufesma

Понимаю. Тот же клим я бы даже пяткой трогать не стал, что угодно лучше. Правда щас повыходил КЛОГ, но я вебней не увлекаюсь.

troy-harder
()
Ответ на: комментарий от saufesma

У тебя же (setq my-arrows (list (make-arrow startx endx starty endy))) устанавливает список из одного элемента.

Можно просто безо всяких defun slave

(setq my-arrows 
      (mapcar 
        (lambda (x) (make-arrow x endx starty endy))
        list-of-startx))
monk ★★★★★
()
Ответ на: комментарий от monk

Можно просто безо всяких defun slave

Я согласен с тобой. Но меня на практику никто не берёт, понимаешь.

У меня вот так

(defvar startx)
(defvar starty)
(defvar endx)
(defvar endy)
(defvar my-arrows)
(setq startx 0)
(setq starty 50)
(setq endx 0)
(setq endy 20)
(setq my-arrows nil)
(defun make-arrow (startx endx starty endy)
(make-instance 'capi:arrow-pinboard-object
                      :start-x startx :end-x endx
                      :start-y starty :end-y endy
                      :graphics-args
                      '(:thickness 1 :foreground :red)))

(setq list-of-startx (list 50 100 200))

(defun slave (list-of-startx startx endx starty endy)
(if (eq (car list-of-startx) nil)
my-arrows
(progn
(setq endx (setq startx (car list-of-startx)))
(push (make-arrow startx endx starty endy) my-arrows)
(slave (cdr list-of-startx) startx endx starty endy))))

(slave list-of-startx startx endx starty endy)
(capi:contain my-arrows)

proof
my-arrows=>(#<CAPI:ARROW-PINBOARD-OBJECT  402017EDAB> #<CAPI:ARROW-PINBOARD-OBJECT  402017E70B> #<CAPI:ARROW-PINBOARD-OBJECT  4020160803>)

saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 1)
Ответ на: комментарий от saufesma

Лиспворкс стоит своих денег благодаря хорошему отладчику, который умеет заходить в макросы. А гуй я рисовал на tcl/tk в проекте «Яр». Это лучший вариант, хотя и религиозно неприемлемый для истинного лиспера, потому что половина приложения оказывается на другом языке. При том, тикль сам по себе вполне лисп, так что можно и стерпеть. Для гуёвой стороны используется чистый тикль, без всяких cltk и прочих ужасных ненужных обёрток. https://gitlab.com/budden/jar, само приложение работает сервером, а обмен сообщениями между гуем и сервером происходит через локальный сокет.

По программе tcl bounty для тикля оживили среду разработки, https://github.com/flightaware/Tcl-bounties, на на гитхабе у самого этого flightaware рядышком лежит, TclPro. Вероятно, её наиболее целесоображно использовать для работы с кодом на tcl/tk, но я её не застал - закрыл «Яр» до того как её починили.

Соответственно, при таком подходе ты просто пишешь, а не удохаешься. Бери «яр» за основу, смотри как там сделано, делай своё приложение на его основе.

den73 ★★★★★
()
Последнее исправление: den73 (всего исправлений: 4)
Ответ на: комментарий от den73

Бери «яр» за основу, смотри как там сделано, делай своё приложение на его основе.

Спасибо за предложение, но мне пока рано, надо с CAPI разобраться.

saufesma
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.