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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как связать две функции

Как связать две функции

Ответ
Поиск в этой теме
Непрочитано 19.07.2007, 22:21 #1
Как связать две функции
Holon
 
CNC
 
Israel
Регистрация: 07.07.2007
Сообщений: 302

Вот в Helpe для VLisp есть пример кода функции и DCL-ка подскажите как связать этот пример со своей действующей функцией, чтобы при правильном набранном секретном коде функция выполнялась и при неправильном вводе кода коректно выходила без отработки самой функции
Просмотров: 5352
 
Автор темы   Непрочитано 20.07.2007, 10:18
#2
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Забыл привести пример кода в Helpe VLisp

Код:
[Выделить все]
// GETPASS.DCL
//
passdlg : dialog {
  label = "Password Protected";
  : edit_box {
    label = "Password:";
    edit_width = 20;
    key = "password";
    password_char = "?";
  }
  ok_cancel;
}


Код:
[Выделить все]
;; GETPASS.LSP
;;
(defun GETPASS ( / dcl_id pass )
  (setq dcl_id (load_dialog "getpass.dcl"))
  (if (new_dialog "passdlg" dcl_id)
    (progn
      (action_tile "password" "(setq pass $value)")
      (start_dialog)
      (unload_dialog dcl_id)
    )
    (princ "Error: Unable to load GETPASS.DCL. ")
  )
  pass
)
Holon вне форума  
 
Непрочитано 20.07.2007, 10:35
#3
Alaspher


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


Так примерно:
Код:
[Выделить все]
(defun mystartfunc ()
  (if (= "MyPath" (GETPASS))
    (myworkfunc)
    (alert "Sorry! Wrong password!")
  )
)
Alaspher вне форума  
 
Автор темы   Непрочитано 20.07.2007, 15:37
#4
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Большее спасибо
Holon вне форума  
 
Автор темы   Непрочитано 21.07.2007, 13:34
#5
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


что я неправилно делаю?
Код:
[Выделить все]
(defun mystartfunc () 
  (if (= "12345" ((defun GETPASS ( / dcl_id pass ) 
  (setq dcl_id (load_dialog "D:\\lisp\\getpass.dcl")) 
  (if (new_dialog "passdlg" dcl_id) 
    (progn 
      (action_tile "password" "(setq pass $value)") 
      (start_dialog) 
      (unload_dialog dcl_id) 
    ) 
    (princ "Error: Unable to load GETPASS.DCL. ") 
  ) 
  pass 
)
)) 
    ((DEFUN GUSH (XH YH LH HH XP YP)
  (SETQ	BT (LIST XH YH)			
				
	T1 (POLAR BT PI (/ LH 2))      
	                                
	T2 (POLAR T1 (/ PI 2) HH)      
	T3 (POLAR T2 0 LH)             
	T4 (POLAR T1 0 LH)             
  )
  (SETQ	T12 (POLAR T1 (/ PI 2) (/ HH 2))
	T34 (POLAR T4 (/ PI 2) (/ HH 2))
  )
  (COMMAND                              
                                       
    "PLINE"
    T4
    "W"
    0.1
    0.1
    T1
    "ARC"
    T2
    "LINE"
    T3
    "ARC"
    T4
    ""
    "CIRCLE"
    T12
    (- (/ HH 2) 5)
    "CIRCLE"
    T34
    (- (/ HH 2) 5)
  )
)
(GUSH 1200 100 2000 300 0 100)
(COMMAND "ZOOM" "A")) 
    (alert "Sorry! Wrong password!") 
  ) 
)
По идее после ввода 12345 должна заработать функция GUSH ,
0кон DCL не поднимается

_$
; 1 form loaded from #<editor "D:/LISP/mystartfunc.LSP">
_$ (mystartfunc)
; error: bad function: GETPASS
_$
Holon вне форума  
 
Непрочитано 21.07.2007, 16:56
#6
Alaspher


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


Надо примерно так:
Код:
[Выделить все]
(defun getpass (/ dcl_id pass)
  (setq dcl_id (load_dialog "D:\\lisp\\getpass.dcl"))
  (if (new_dialog "passdlg" dcl_id)
    (progn (action_tile "password" "(setq pass $value)")
           (start_dialog)
           (unload_dialog dcl_id)
    )
    (princ "Error: Unable to load GETPASS.DCL. ")
  )
  pass
)
(defun gush (xh yh lh hh xp yp)
  (setq bt (list xh yh)
        t1 (polar bt pi (/ lh 2))
        t2 (polar t1 (/ pi 2) hh)
        t3 (polar t2 0 lh)
        t4 (polar t1 0 lh)
  )
  (setq t12 (polar t1 (/ pi 2) (/ hh 2))
        t34 (polar t4 (/ pi 2) (/ hh 2))
  )
  (command "PLINE"
           t4
           "W"
           0.1
           0.1
           t1
           "ARC"
           t2
           "LINE"
           t3
           "ARC"
           t4
           ""
           "CIRCLE"
           t12
           (- (/ hh 2) 5)
           "CIRCLE"
           t34
           (- (/ hh 2) 5)
  )
)
(defun mystartfunc ()
  (if (= "12345" (getpass))
    (progn (gush 1200 100 2000 300 0 100) (command "ZOOM" "A"))
    (alert "Sorry! Wrong password!")
  )
)
Не анализировал содержание объявляемых функций, только структуру. Объявление дочерних функций можно поместить внутрь основной, но не обязательно и не так, как было сделано.
Alaspher вне форума  
 
Автор темы   Непрочитано 21.07.2007, 19:12
#7
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


неработает

_$
_$
_$ (gush 1200 100 2000 300 0 100)
nil
_$
; 3 forms loaded from #<editor "D:/LISP/GUSHOD.LSP">
_$ (getpass)
"12345"
_$
_$
Holon вне форума  
 
Непрочитано 21.07.2007, 19:26
#8
Alaspher


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


Holon
Работает
Код:
рисует какуто колбасу с двумя колечками, при правильном пароле, ессно.
Alaspher вне форума  
 
Автор темы   Непрочитано 21.07.2007, 19:54
#9
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Holon вне форума  
 
Автор темы   Непрочитано 30.07.2007, 12:44
#10
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Имеется несколько функций, как сделать так, чтобы при определенном параметре запускалась определенная функция вот пример запуска однои функции,
Код:
[Выделить все]
(defun my_arm () 
  (if (= "20" (pices)) 
     (progn
       (2sm)
       )
    (alert "Sorry! Wrong value!") 
  ) 
)
при значении 20 запускается функция 2sm, а вот как добавить, чтобы скажем при значении 40 запускалась функция 4sm, а если значение не 20 и не 40 то
Код:
[Выделить все]
"Sorry! Wrong value!"
Holon вне форума  
 
Непрочитано 30.07.2007, 12:54
#11
Alaspher


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


Цитата:
Сообщение от Holon
как добавить, чтобы скажем при значении 40 запускалась функция 4sm, а если значение не 20 и не 40 то
Код:
[Выделить все]
"Sorry! Wrong value!"
Как-то так:
Код:
[Выделить все]
(defun my_arm (/ test)
  (cond ((= "20" (setq test (pices))) (2sm))
        ((= "40" test) (4sm))
        (t (alert "Sorry! Wrong pices! ;o)"))
  )
)
Alaspher вне форума  
 
Автор темы   Непрочитано 30.07.2007, 13:32
#12
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Большее спасибо
Holon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как связать две функции

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск