Как сделать "прозрачный" lisp?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сделать "прозрачный" lisp?

Как сделать "прозрачный" lisp?

Ответ
Поиск в этой теме
Непрочитано 31.05.2007, 12:14 #1
Как сделать "прозрачный" lisp?
ASLYS
 
Delineante
 
Ростов-на-Дону/Madrid
Регистрация: 26.12.2006
Сообщений: 396

Как сделать чтобы во время выполнения функции, например рисование кружков
Код:
[Выделить все]
(defun c:Ax(/ p)(while(setq p(getpoint "\nPoint :"))(command "_circle" p 10)))
в "прозрачном" режиме выполнить другую функцию, например поменять цвет
Код:
[Выделить все]
(defun bx()(vla-put-color(vlax-ename->vla-object(car(entsel "\nSelect a circle:")))1))
есть подозрения, что это делается с помощью vlax-add-cmd, но не могу понять как она работает
И еще вопрос. В Visual LISP Editor, программа распознаёт стандартные функции-они выделяются синим цветом. Eсли установить DOSLib, то его функции тоже распознаются. Можно ли сделать так, что бы моя функция, например bx или Ax тоже распознавалась (выделялась синим цветом), и каждый раз мне не надо было ее прописывать заново
Просмотров: 9230
 
Непрочитано 31.05.2007, 12:28
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


В зачем использовать ком.методы, когда можно без них обойтись? Например, так:
Код:
[Выделить все]
(defun c:ax (/ pt)
  (vl-load-com)
  (while
    (and (not (vl-catch-all-error-p
                (vl-catch-all-apply
                  '(lambda () (setq pt (getpoint "\nУкажите точку <Отмена> : ")))
                  ) ;_ end of VL-CATCH-ALL-APPLY
                ) ;_ end of VL-CATCH-ALL-ERROR-P
              ) ;_ end of not
         pt
         ) ;_ end of and
     (entmakex (list (cons 0 "CIRCLE")
                     (cons 10 pt)
                     (cons 40 10.)
                     (cons 62 1) ; это назначение цвета
                     ) ;_ end of list
               ) ;_ end of entmakex
     ) ;_ end of while
  ) ;_ end of defun
Можно и через vla, но там писать просто больше надо будет
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 31.05.2007, 12:46
#3
ASLYS

Delineante
 
Регистрация: 26.12.2006
Ростов-на-Дону/Madrid
Сообщений: 396
<phrase 1=


Я написал простой пример, в данном случае, конечно можно сделать просто, но для других случаев нужен именно ПРОЗРАЧНЫЙ lisp (как OSNAP или ORTHO)
ASLYS вне форума  
 
Непрочитано 31.05.2007, 13:02
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Честно говоря, я пока не могу представить необходимость "прозрачного" лиспа. Можно примерчик?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.05.2007, 13:03
#5
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Ну дык поставь vla-put-color в свой прогу у всего делов...
Код:
[Выделить все]
(defun c:Ax(/ p)
  (while(setq p(getpoint "\nPoint :"))
    (command "_circle" p 10)
    (vla-put-color(vlax-ename->vla-object (entlast))1)
    )
  )
Krieger вне форума  
 
Непрочитано 31.05.2007, 13:07
#6
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


Цитата:
В зачем использовать ком.методы, когда можно без них обойтись?
Ну, например, для нормальной работы "отката" ;)
AY вне форума  
 
Непрочитано 31.05.2007, 13:33
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


> AY: Для этого достаточно в начале и конце поставить соотвтственно vla-startundomark и vla-endundomark.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.05.2007, 13:34
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Так?
Код:
[Выделить все]
(vl-load-com)
(defun rd ()(setvar "CECOLOR" "1"))
(defun grn ()(setvar "CECOLOR" "3"))
(defun blay ()(setvar "CECOLOR" "Bylayer"))
(vlax-add-cmd "RD1" 'rd "RD1" ACRX_CMD_TRANSPARENT)
(vlax-add-cmd "GRN" 'grn "GRN" ACRX_CMD_TRANSPARENT)
(vlax-add-cmd "BL" 'blay "BL" ACRX_CMD_TRANSPARENT)
Цитата:
Команда: _line Первая точка:
Следующая точка или [Отменить]:
Следующая точка или [Отменить]: 'rd1

Возобновляется команда ОТРЕЗОК.

Следующая точка или [Отменить]:
Следующая точка или [Замкнуть/Отменить]:
Следующая точка или [Замкнуть/Отменить]: 'grn

Возобновляется команда ОТРЕЗОК.

Следующая точка или [Замкнуть/Отменить]:
Следующая точка или [Замкнуть/Отменить]:
Следующая точка или [Замкнуть/Отменить]: 'bl

Возобновляется команда ОТРЕЗОК.

Следующая точка или [Замкнуть/Отменить]:
Следующая точка или [Замкнуть/Отменить]:
VVA вне форума  
 
Автор темы   Непрочитано 31.05.2007, 13:44
#9
ASLYS

Delineante
 
Регистрация: 26.12.2006
Ростов-на-Дону/Madrid
Сообщений: 396
<phrase 1=


Пример
У меня висит панелька, похожая на Object Snap, которая показывает какие привязки включены в данный момент. Если при отключенных привязках запустить Ax, выбрать привязку в стандартной панеле Object Snap, вставить круг, то для следующего круга надо опять щелкать на панель Object Snap. Моя панель сохраняет привязку, и для следущего круга не надо повторно нажимать на панель, всегда видно какие привязки включенны, и одним кликом можно выбирать нужную. Проблема в том, что я не могу кликнуть на моей панельке, пока не закончу выполнять Ax
ASLYS вне форума  
 
Непрочитано 31.05.2007, 13:50
#10
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


Цитата:
Сообщение от Кулик Алексей aka kpblc
> AY: Для этого достаточно в начале и конце поставить соотвтственно vla-startundomark и vla-endundomark.
Ну так, а я о чем - учишь как надо, а откат пропустил - выходит у автора был более функциональный вариант ;)
AY вне форума  
 
Непрочитано 31.05.2007, 13:51
#11
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Код:
[Выделить все]
(defun test ()
  (alert "Проба прозрачного режима.")
)

(vlax-remove-cmd "mycom")
(vlax-add-cmd "mycom" 'test "моякоманда" ACRX_CMD_TRANSPARENT)
Будут доступны команды "mycom" и "моякоманда", в том числе в прозрачном режиме. Вызываться будет функция "test".
Alaspher вне форума  
 
Непрочитано 31.05.2007, 13:55
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Цитата:
Сообщение от AY
Цитата:
Сообщение от Кулик Алексей aka kpblc
> AY: Для этого достаточно в начале и конце поставить соотвтственно vla-startundomark и vla-endundomark.
Ну так, а я о чем - учишь как надо, а откат пропустил - выходит у автора был более функциональный вариант
Я не знаю, но подобные цикличные вещи (ИМХО) все же лучше отменять по шагам, а не чохом все. Хотя это зависит от задачи
Правда, посты VVA и Alaspher'a уде проблему решили...
Завидую я им и их уровню - они где прошли, там воевать уже нечего
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.05.2007, 14:15
#13
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


>крыс
А кто говорил про чох?

Кстати, если вызывать функцию не именем команды 'ax, а как лисп-функцию вроде (c:ax), то обрабатываться она будет прозрачно и без (vlax-add- ...). Это может не очень красиво если команды вводятся в командной строке вручную, но если ввод из меню, то вполне "прокатит".
AY вне форума  
 
Автор темы   Непрочитано 31.05.2007, 19:25
#14
ASLYS

Delineante
 
Регистрация: 26.12.2006
Ростов-на-Дону/Madrid
Сообщений: 396
<phrase 1=


спасибо за помощь, идея примерно такая
Код:
[Выделить все]
;включает osmode --> j.                                                
;необходимо создать соответствующие "OSMODE" иконки макрос 'act-osm-1 'act-osm-128...
(defun act-osm(j) 
 (if(=(logand (getvar "osmode")j) 0)(setvar "osmode" (+ (getvar "osmode")j))(setvar "osmode" (- (getvar "osmode")j)))
)

;создать прозрачные команды "act-osm-1" = (act-osm 1) ... "act-osm-8192" = (act-osm 8192)                       
(setq i 1)
(repeat 13
 (vlax-add-cmd
   (strcat "act-osm-"(itoa i))
   (eval(read (strcat "(defun act-osm-"(itoa i)"(/)(act-osm "(itoa i)"))")))
   (strcat "act-osm-"(itoa i))
   ACRX_CMD_TRANSPARENT
 )  
 (setq i(* 2 i))  
)
ASLYS вне форума  
 
Непрочитано 31.05.2007, 20:49
#15
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


http://dwg.ru/forum/viewtopic.php?t=12478
mmax вне форума  
 
Непрочитано 31.05.2007, 21:52
#16
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


> ASLYS : По-моему, во-первых, того же эффекта можно добиться простым выполнением
Код:
либо Ctrl (или Shift) + правый пинок либо нажатием на соответствующие кнопки панели Object Snap. ИМХО ты закошмариваешь ситуацию...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2007, 06:51
#17
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Кулик Алексей aka kpblc
Ctrl (или Shift) + правый пинок либо нажатием на соответствующие кнопки панели Object Snap. ИМХО ты закошмариваешь ситуацию...
Согласен. Плюс F3 в момент ожидания ввода точки. Это же стандартные способы, которым просто надо научить. Должны выполняться на уровне инстинкта.

А вообще тема прозрачного вызова "LISP из LISP" интересна, но для других случаев. Или даже для привязки, но нестандартной, а определенной в какой-то функции.
ShaggyDoc вне форума  
 
Непрочитано 01.06.2007, 08:05
#18
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Кулик Алексей aka kpblc
они где прошли, там воевать уже нечего
Ты сильно преувеличиваешь, по крайней мере в части меня - я так много не знаю в АКАДе, что аж обидно!

На счёт стандартных средств - полностью согласен.
Alaspher вне форума  
 
Непрочитано 01.06.2007, 09:15
#19
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Цитата:
Сообщение от Alaspher
Ты сильно преувеличиваешь, по крайней мере в части меня - я так много не знаю в АКАДе, что аж обидно!
Хороший шутк. Мой сознаний в ступоре.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.06.2007, 14:26
#20
ASLYS

Delineante
 
Регистрация: 26.12.2006
Ростов-на-Дону/Madrid
Сообщений: 396
<phrase 1=


Цитата:
ИМХО ты закошмариваешь ситуацию...
я только начинаю изучать lisp
прикрепил наглядный пример к посту N9
[ATTACH]1180693603.rar[/ATTACH]
ASLYS вне форума  
 
Непрочитано 01.06.2007, 14:43
#21
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Лишнее это, лишнее. Веришь?
[ATTACH]1180694604.rar[/ATTACH]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.06.2007, 15:43
#22
ASLYS

Delineante
 
Регистрация: 26.12.2006
Ростов-на-Дону/Madrid
Сообщений: 396
<phrase 1=


Цитата:
Лишнее это, лишнее. Веришь?
может быть, но
плюсы:
-на панельке Object Snap (и вCtrl (или Shift) + правый пинок) можно включить только одну привязку, у меня можно включить несколько (меньше кликов)
-drafting setings-Object Snap нужно открыть, у меня на экране видно какие привязки включены (меньше кликов)
минусы:
??? (экран большой-места не жалко)

если забыть про Object Snap
главное что это lisp, который выполняется во время выполнения другого lisp. это можно использовать для других случаев
ASLYS вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сделать "прозрачный" lisp?