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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп и DCL

Лисп и DCL

Ответ
Поиск в этой теме
Непрочитано 05.04.2006, 12:22 #1
Лисп и DCL
DEM
 
YngIngKllr
 
СПб
Регистрация: 29.03.2005
Сообщений: 12,783

Ндавно начал заниматься програмированием в лиспе, но вот возникает проблема в считывании результатов введенных в DCL-окне.
Не мог бы кто нибудь скинуть пару примеров.
__________________
Шаг 12й......
Мои публикации
Просмотров: 4043
 
Непрочитано 05.04.2006, 13:00 Re: Лисп и DCL
#2
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,779
<phrase 1=


Цитата:
Сообщение от DEM
Ндавно начал заниматься програмированием в лиспе, но вот возникает проблема в считывании результатов введенных в DCL-окне.
Не мог бы кто нибудь скинуть пару примеров.
Чтоб не повторяться, писал Alan (2006-02-23 10:34:52)
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=24852kr и тут
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=22160gM
Alan вне форума  
 
Автор темы   Непрочитано 05.04.2006, 13:10 Привет
#3
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,783


Хм на этих страницах уже бывал.
Книжки купил, только вот примеров взаимодействия dcl и лиспа там маловато.
Примеры бы кто нибудь скинул.
__________________
Шаг 12й......
Мои публикации
DEM на форуме  
 
Непрочитано 05.04.2006, 13:15
#4
_Andre_

механизатор
 
Регистрация: 28.12.2004
Самара
Сообщений: 314
<phrase 1=


Может быть Вы конкретную ситуацию обрисуете - так будет проще и быстрее показать это самое взаимодействие.

Могу посоветовать заглянуть сюда
http://aco.ifmo.ru/~nadinet/html/lectures/lct_dcl1.html
и там по ссылкам посмотреть родственным
_Andre_ вне форума  
 
Непрочитано 05.04.2006, 13:15
#5
Кулик Алексей aka kpblc
Moderator

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


http://www.autocad.ru/cgi-bin/f1/board.cgi?p=44&sort=2
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=19780sh
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=21185sX
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=19650gw
И самое главное:
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=19710sw
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.04.2006, 13:25 Привет
#6
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,783


Скину программу кторую написал на лиспе и окно из которого надо считать результаты.
__________________
Шаг 12й......
Мои публикации
DEM на форуме  
 
Непрочитано 05.04.2006, 14:11
#7
Fidelio

конструктор
 
Регистрация: 05.04.2006
Сообщений: 8
<phrase 1=


В разделе Downloads есть набор лиспов G-Tools! Там можно найти много примеров.
Fidelio вне форума  
 
Автор темы   Непрочитано 08.04.2006, 09:37 Привет
#8
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,783


Вобщем с вводом значений разобрался.
Но возникла другая проблема, не удается выполнить временный выход из
окна для ввода длин L1 и L2.
Процессе работы лиспа используется блок "спецификация" который есть в файле сетка.dwg
[ATTACH]1144474620.rar[/ATTACH]
__________________
Шаг 12й......
Мои публикации
DEM на форуме  
 
Непрочитано 08.04.2006, 11:24
#9
Дмитрий

демагог
 
Регистрация: 05.09.2003
Самара
Сообщений: 1,066


Цитата:
Сообщение от DEM
Но возникла другая проблема, не удается выполнить временный выход из окна для ввода длин L1 и L2.
Временный выход можно сделать с помощью цикла while с выбором нужного действия в зависимости от кода, возвращаемого done_dialog
Дмитрий вне форума  
 
Автор темы   Непрочитано 08.04.2006, 13:00
#10
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,783


Цитата:
Сообщение от Дмитрий
Цитата:
Сообщение от DEM
Но возникла другая проблема, не удается выполнить временный выход из окна для ввода длин L1 и L2.
Временный выход можно сделать с помощью цикла while с выбором нужного действия в зависимости от кода, возвращаемого done_dialog
В курсе тока не получается
__________________
Шаг 12й......
Мои публикации
DEM на форуме  
 
Непрочитано 08.04.2006, 15:07
#11
Дмитрий

демагог
 
Регистрация: 05.09.2003
Самара
Сообщений: 1,066


Ну, примерно в таком концепте:

Код:
[Выделить все]
(setq code showdialog1)
(While (<= code 1) ; 1- код выхода из диалога
(cond
((= code 2) (сделать что-то)
(setq code showdialog1) ; возврат к диалогу
)
((= code 3) (сделать что-то)
(setq code showdialog1) ; возврат к диалогу
)
); end cond
) ;end while
Дмитрий вне форума  
 
Непрочитано 10.04.2006, 00:43
#12
mmax

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


http://dwg.ru/forum/viewtopic.php?t=6349
здесь я тоже интересовался.
Этого хватило чтобы понять как все делается.
mmax вне форума  
 
Автор темы   Непрочитано 29.04.2006, 16:43 Привет
#13
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,783


Помогите пожалуйста у меня при временном выходе из dcl окна сбрасываются значения диаметров .
DCL
Код:
[Выделить все]
// DEM
proba: dialog {label="Сетка";
  :popup_list {label="Тип сетки";key="b1";value="0";list="Тип1 \nТип2 \nТип3 \nТип4";edit_width=6;}
:spacer{height=1;}
:row {label="Вертикальные стержни";
    :popup_list {label="Диаметр V";key="d1";list="\n6 \n8 \n10 \n12 \n14 \n16 \n18 \n20 \n22 \n25 \n28 \n32 \n36 \n40";edit_width=4;}    
    :edit_box{label="LD1:";value="0";key="LD1";}
    :button{label="Длина V<";key="mousep2";fixed_width=true;
          action="(done_dialog 4)";}
  }//end of row
   {label=" ";}
:row {label="Горизонтальные стержни";
        :popup_list {label="Диаметр G";key="d2";list="\n6 \n8 \n10 \n12 \n14 \n16 \n18 \n20 \n22 \n25 \n28 \n32 \n36 \n40";edit_width=4;}    
    :edit_box{label="LD2:";value="0";key="LD2";}
    :button{label="Длина G<";key="mousep3";fixed_width=true;
          action="(done_dialog 5)";}
  }//end of row
spacer_1;
ok_button;
}// end of dialog
LSP
Код:
[Выделить все]
; DEM
;
(defun C:setka1 (/ dcl_id step pt d1 d2)
  (setq dcl_id (load_dialog "proba.dcl"))
  (setq step 2)
  (setq L1 0)
  (setq L2 0)
  (setq d1 0)
  (while (>= step 2)
    (if (null (new_dialog "proba" dcl_id))(exit))
    (set_tile "LD1" (rtos L1 2 0))
    (set_tile "LD2" (rtos L2 2 0))
    (set_tile "d1" (rtos d1 2 0))
    (action_tile "accept"
      (strcat
        "(setq L1 (atof (get_tile \"LD1\")))"
        "(setq L2 (atof (get_tile \"LD2\")))"
        "(setq d1 (atof (get_tile \"d1\")))"
        "(setq d2 (atof (get_tile \"d2\")))"
        "(done_dialog 1)"
      );strcat
    );action_tile
    (setq step (start_dialog))
    (cond
      ((= step 4) (setq L1 (getdist "\nВведите длину вертикальных стержней: ")))
      ((= step 5) (setq L2 (getdist "\nВведите длину горизонтальных стержней: ")))      
    );cond

  );while
  (unload_dialog dcl_id)
        (princ "\nДлина1=")
        (princ (rtos L1))
        (princ "\nДлина2=")
        (princ (rtos L2))
        (princ "\nДиаметр1=")
        (princ (rtos d1))
        (princ "\nДиаметр2=")
        (princ (rtos d2))
  (princ)
);defun
__________________
Шаг 12й......
Мои публикации
DEM на форуме  
 
Непрочитано 01.05.2006, 17:18
#14
mmax

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


Кажется проблема вот тут
Код:
[Выделить все]
(action_tile "accept" 
      (strcat 
        "(setq L1 (atof (get_tile \"LD1\")))" 
        "(setq L2 (atof (get_tile \"LD2\")))" 
        "(setq d1 (atof (get_tile \"d1\")))" 
        "(setq d2 (atof (get_tile \"d2\")))" 
        "(done_dialog 1)" 
      );strcat 
    );action_tile
скорее всего кавычки расставлены неправильно, здесь идет работа со строками и мне кажется кавычек должно быть в два раза больше, и перед (strcat должны точно быть кавычки

Вот один из моих примеров для сравнения синтаксиса

Код:
[Выделить все]
(action_tile "accept"
"(progn
  (setq
       s_nar_diam_flan (atof (get_tile \"nar_diam_flan_s\")) ;нар радиус
       s_vnut_diam_flan (atof (get_tile \"vnut_diam_flan_s\")) ;внутр радиус
       s_kol_krep_otv_flan (atoi (get_tile \"kol_krep_otv_flan_s\")) ;кол отверстий
       s_diam_krep_otv_flan (atof (get_tile \"diam_krep_otv_flan_s\")) ;диаметр отверстий
       s_diam_rasp_otv (atof (get_tile \"diam_rasp_otv_s\")) ;радиус расположения
       s_layer_kontur_line (atoi (get_tile \"layer_kontur_line_s\")) ;слой для контурных
       s_layer_osi_line (atoi (get_tile \"layer_osi_line_s\")) ; осевых
       s_vylet_osi_line (atof (get_tile \"vylet_osi_line_s\")) ; выступ осевых
       s_kol_flan (atoi (get_tile \"kol_flan_s\"))
       ;s_samo_flan_repiat (atof (get_tile \"samo_flan_repiat_s\"));плохая штука пока исключена
       osi_budut_s  (get_tile \"osi_budut_ili_net\") ; как быть с осевыми 1 да 0 нет
       );setq
       (done_dialog 1))")
mmax вне форума  
 
Непрочитано 01.05.2006, 17:21
#15
mmax

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


и еще

Сцеплять (done_dialog 1) с переменными не нужно strcat должна закончиться до done_dialog

Возможно перед strcat должна стоять функция progn

Код:
[Выделить все]
"(progn
          (strcat
                   (setq () ()
                           );setq
                           );strcat
                      (done_dialog)
                  )";progn
такой синтаксис кажется более удачен
mmax вне форума  
 
Автор темы   Непрочитано 02.05.2006, 13:00 Привет
#16
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,783


Все разобрался, надо было в остальных action_tile дописать присвоение значений.
__________________
Шаг 12й......
Мои публикации
DEM на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп и DCL

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

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