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

Вернуться   Форум 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 тоже распознавалась (выделялась синим цветом), и каждый раз мне не надо было ее прописывать заново
Просмотров: 8418
 
Непрочитано 31.05.2007, 12:28
#2
Кулик Алексей aka kpblc
Moderator

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


В зачем использовать ком.методы, когда можно без них обойтись? Например, так:
Код:
[Выделить все]
(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
С.-Петербург
Сообщений: 39,848


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

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


Ну дык поставь 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
С.-Петербург
Сообщений: 39,848


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

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


Так?
Код:
[Выделить все]
(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
С.-Петербург
Сообщений: 39,848


Цитата:
Сообщение от 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
С.-Петербург
Сообщений: 39,848


> 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,381


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 39,848


Цитата:
Сообщение от 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 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сделать "прозрачный" lisp?

Размещение рекламы