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

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

Autolisp ограничить ввод для пользователя

Ответ
Поиск в этой теме
Непрочитано 02.08.2018, 10:07
Autolisp ограничить ввод для пользователя
protorgovec
 
газо- нефтепереработка
 
Уфа
Регистрация: 22.07.2015
Сообщений: 98

Добрый день форумчане. Подскажите пожалуйста. Нужно заставить пользователя выбрать один из предложенных вариантов:
Код:
[Выделить все]
 (initget 1 "01 02 03 04 11 21")
(setq Tip (atof (getkword "\n Тип фланца 01, 02, 03, 04, 11, 21 Tip >: ")))
все работает, но есть одна загвоздка. Если пользователь вводит 1, то присваивается 11, а если 2 то присваивается 21. Воспринимает сокращения. Как мне заставить пользователя прописывать только предложенные варианты, без сокращений? Заранее благодарю.
Просмотров: 6654
 
Непрочитано 10.08.2018, 14:18
#41
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от protorgovec Посмотреть сообщение
Помогите кто может!!!
диалог Flange_Select.dcl

Код:
[Выделить все]
 
Flange_Dialog : dialog {
				label = "Выбор фланца";
					: boxed_row {
							height = 5;
							: column  {
									width = 15;
									: text_part  {
											label = "Тип";
											alignment = centered;
										     }
									: row {
										spacer_0;
    										: popup_list {
												key = "Flange_Type";
												edit_width = 5;
												list = "\n01\n02\n03\n04\n11\n21";
												value = "0";
												alignment = left;
											     }
										spacer_1;
									      }
									spacer_1;

								}
							: column {
									width = 15;
									: text_part  {
											label = "Материал";
											alignment = centered;
										     }
									spacer_0;
    									: list_box   {
											key = "Flange_Material";
											list = "\n  Cталь  \n  Cерый чугун  \n  Ковкий чугун  ";
											width = 15;
											height = 4;
											is_enabled = false;
											value = "0";
										     }
								}
						    }
					spacer_1;
    					ok_cancel;
			}

лисп flange_selecting.lsp

ПУТЬ К ДИАЛОГУ поменять на реальный путь

Код:
[Выделить все]
 
(defun flange_selecting ()
	(setq dcl_filename_full "ПУТЬ К ДИАЛОГУ\\Flange_Select.dcl"
		  	  fs_dcl_id (load_dialog dcl_filename_full)
			  flange_type "0"
			  flange_material "0"
	)
		(if (not fs_dcl_id)
			(progn
				(alert "Ошибка загрузки DCL файла!")
				(exit)
			)
			(progn
				(if (not (new_dialog "Flange_Dialog" fs_dcl_id))
					(progn
						(alert "Ошибка загрузки DCL файла!")
						(exit)
					)
					(progn
						(action_tile "OK" "(done_dialog 1)")
						(action_tile "Cancel" "(done_dialog 2)")
						(action_tile "Flange_Type" "(if (= \"5\" $value)
															(progn
																(mode_tile \"Flange_Material\" 0)
																(set_tile \"Flange_Material\" flange_material)
															)
															(mode_tile \"Flange_Material\" 1)
													)
													(setq flange_type $value)
												   "
						)
						(action_tile "Flange_Material" "(setq flange_material $value)")
						(set_tile "Flange_Type" flange_material)
						(setq diag_result (start_dialog))
						(unload_dialog fs_dcl_id)
						(cond
								(
									(= diag_result 1)
										(princ (strcat "\nВыбран " (cadr (assoc flange_type '(("0" "01") ("1" "02") ("2" "03") ("3" "04") ("4" "11") ("5" "21")))) " тип фланца"))
										(if (= "5" flange_type)
											(princ (strcat "\nМатериал фланца " (cadr (assoc flange_material '(("0" "Сталь") ("1" "Серый чугун") ("2" "Ковкий чугун"))))))
										)
								)
								(
									t
										(princ "\nEsc нажат")
								)
						)
					)
				)
			)
		)
		(princ)
)
----- добавлено через ~33 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
2. Слезайте с лиспа - ваши задачи стали выходить за его пределы.
да как бы нет)

Последний раз редактировалось koMon, 10.08.2018 в 16:16.
koMon вне форума  
 
Непрочитано 10.08.2018, 15:34
| 1 #42
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от protorgovec Посмотреть сообщение
Переменные Tip и Mat он не определяет, пишет что не известно, пишет что неверный тип аргумента.
Анекдот. Пришел мужик на авторынок за запорожцем. Мялся-мялся, наконец купил, залез, вставил ключ, провернул, а машина не заводится. Мужик вылез и наехал на продавца, мол, обманул, мол, машина не заводится. А продавец ему и говорит, мол, покупай мерседес, там все с пол-оборота заводится. Мужик почесал репку и пошел пешком домой.
Мораль сего проста: нечего ключ зажигания в прикуриватель тыкать
gomer вне форума  
 
Автор темы   Непрочитано 15.08.2018, 09:50
#43
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от koMon Посмотреть сообщение
диалог Flange_Select.dcl

Код:
[Выделить все]
 
Flange_Dialog : dialog {
				label = "Выбор фланца";
					: boxed_row {
							height = 5;
							: column  {
									width = 15;
									: text_part  {
											label = "Тип";
											alignment = centered;
										     }
									: row {
										spacer_0;
    										: popup_list {
												key = "Flange_Type";
												edit_width = 5;
												list = "\n01\n02\n03\n04\n11\n21";
												value = "0";
												alignment = left;
											     }
										spacer_1;
									      }
									spacer_1;

								}
							: column {
									width = 15;
									: text_part  {
											label = "Материал";
											alignment = centered;
										     }
									spacer_0;
    									: list_box   {
											key = "Flange_Material";
											list = "\n  Cталь  \n  Cерый чугун  \n  Ковкий чугун  ";
											width = 15;
											height = 4;
											is_enabled = false;
											value = "0";
										     }
								}
						    }
					spacer_1;
    					ok_cancel;
			}

лисп flange_selecting.lsp

ПУТЬ К ДИАЛОГУ поменять на реальный путь

Код:
[Выделить все]
 
(defun flange_selecting ()
	(setq dcl_filename_full "ПУТЬ К ДИАЛОГУ\\Flange_Select.dcl"
		  	  fs_dcl_id (load_dialog dcl_filename_full)
			  flange_type "0"
			  flange_material "0"
	)
		(if (not fs_dcl_id)
			(progn
				(alert "Ошибка загрузки DCL файла!")
				(exit)
			)
			(progn
				(if (not (new_dialog "Flange_Dialog" fs_dcl_id))
					(progn
						(alert "Ошибка загрузки DCL файла!")
						(exit)
					)
					(progn
						(action_tile "OK" "(done_dialog 1)")
						(action_tile "Cancel" "(done_dialog 2)")
						(action_tile "Flange_Type" "(if (= \"5\" $value)
															(progn
																(mode_tile \"Flange_Material\" 0)
																(set_tile \"Flange_Material\" flange_material)
															)
															(mode_tile \"Flange_Material\" 1)
													)
													(setq flange_type $value)
												   "
						)
						(action_tile "Flange_Material" "(setq flange_material $value)")
						(set_tile "Flange_Type" flange_material)
						(setq diag_result (start_dialog))
						(unload_dialog fs_dcl_id)
						(cond
								(
									(= diag_result 1)
										(princ (strcat "\nВыбран " (cadr (assoc flange_type '(("0" "01") ("1" "02") ("2" "03") ("3" "04") ("4" "11") ("5" "21")))) " тип фланца"))
										(if (= "5" flange_type)
											(princ (strcat "\nМатериал фланца " (cadr (assoc flange_material '(("0" "Сталь") ("1" "Серый чугун") ("2" "Ковкий чугун"))))))
										)
								)
								(
									t
										(princ "\nEsc нажат")
								)
						)
					)
				)
			)
		)
		(princ)
)
----- добавлено через ~33 мин. -----

да как бы нет)
Огромное спасибо. Сам бы в жизни не допер.
protorgovec вне форума  
 
Автор темы   Непрочитано 16.08.2018, 08:21
#44
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от koMon Посмотреть сообщение
диалог Flange_Select.dcl

Код:
[Выделить все]
 
Flange_Dialog : dialog {
				label = "Выбор фланца";
					: boxed_row {
							height = 5;
							: column  {
									width = 15;
									: text_part  {
											label = "Тип";
											alignment = centered;
										     }
									: row {
										spacer_0;
    										: popup_list {
												key = "Flange_Type";
												edit_width = 5;
												list = "\n01\n02\n03\n04\n11\n21";
												value = "0";
												alignment = left;
											     }
										spacer_1;
									      }
									spacer_1;

								}
							: column {
									width = 15;
									: text_part  {
											label = "Материал";
											alignment = centered;
										     }
									spacer_0;
    									: list_box   {
											key = "Flange_Material";
											list = "\n  Cталь  \n  Cерый чугун  \n  Ковкий чугун  ";
											width = 15;
											height = 4;
											is_enabled = false;
											value = "0";
										     }
								}
						    }
					spacer_1;
    					ok_cancel;
			}

лисп flange_selecting.lsp

ПУТЬ К ДИАЛОГУ поменять на реальный путь

Код:
[Выделить все]
 
(defun flange_selecting ()
	(setq dcl_filename_full "ПУТЬ К ДИАЛОГУ\\Flange_Select.dcl"
		  	  fs_dcl_id (load_dialog dcl_filename_full)
			  flange_type "0"
			  flange_material "0"
	)
		(if (not fs_dcl_id)
			(progn
				(alert "Ошибка загрузки DCL файла!")
				(exit)
			)
			(progn
				(if (not (new_dialog "Flange_Dialog" fs_dcl_id))
					(progn
						(alert "Ошибка загрузки DCL файла!")
						(exit)
					)
					(progn
						(action_tile "OK" "(done_dialog 1)")
						(action_tile "Cancel" "(done_dialog 2)")
						(action_tile "Flange_Type" "(if (= \"5\" $value)
															(progn
																(mode_tile \"Flange_Material\" 0)
																(set_tile \"Flange_Material\" flange_material)
															)
															(mode_tile \"Flange_Material\" 1)
													)
													(setq flange_type $value)
												   "
						)
						(action_tile "Flange_Material" "(setq flange_material $value)")
						(set_tile "Flange_Type" flange_material)
						(setq diag_result (start_dialog))
						(unload_dialog fs_dcl_id)
						(cond
								(
									(= diag_result 1)
										(princ (strcat "\nВыбран " (cadr (assoc flange_type '(("0" "01") ("1" "02") ("2" "03") ("3" "04") ("4" "11") ("5" "21")))) " тип фланца"))
										(if (= "5" flange_type)
											(princ (strcat "\nМатериал фланца " (cadr (assoc flange_material '(("0" "Сталь") ("1" "Серый чугун") ("2" "Ковкий чугун"))))))
										)
								)
								(
									t
										(princ "\nEsc нажат")
								)
						)
					)
				)
			)
		)
		(princ)
)
----- добавлено через ~33 мин. -----

да как бы нет)
Подскажите: немного изменил под себя.
Код:
[Выделить все]
 GOST_33259_2015 : dialog {
                label = "Исходные данные"; //название диалогового окна
                    : boxed_row { //блок из двух данных, тип и материал
                            height = 4; //высота блока
                            : column  { //расставление диалога в столбик
                                    width = 30; //ширина блока
                                    : text_part  {
                                            label = "Тип";
                                            alignment = centered;
                                             }
                                    : row { //средство объединение тип и материал в ряд
                                        spacer_0;
                                            : popup_list {
                                                key = "eb_Tip";
                                                edit_width = 5; //ширина видимой части редактируемого поля Тип
                                                list = " \n01\n02\n03\n04\n11\n21";
                                                value = "0";
                                                alignment = left;
                                                 }
                                        spacer_1;
                                          }
                                    spacer_1;
 
                                }
                            : column {
                                    width = 20; //размер видимой части редактируемого поля Материал
                                    : text_part  {
                                            label = "Материал";
                                            alignment = centered;
                                             }
                                    spacer_0;
                                        : popup_list   {
                                            key = "eb_Mat";
                                            list = " \n1 - сталь\n2 - серый чугун\n3 - ковкий чугун";
                                            width = 10; //ширина видимой части редактируемого поля Материал
                                            height = 4;
                                            is_enabled = false;
                                            value = "0";
                                             }
                                }
                            }
                    spacer_1;
                        ok_cancel;
            }
Получается окошко:

Почему редактируемое окно материала стоит ниже, не могу найти как его сделать на одном уровне с редактируемым окном для типа
Вложения
Тип файла: docx Результат.docx (473.0 Кб, 10 просмотров)
protorgovec вне форума  
 
Непрочитано 16.08.2018, 09:34
#45
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от protorgovec Посмотреть сообщение
Почему редактируемое окно материала стоит ниже, не могу найти как его сделать на одном уровне с редактируемым окном для типа
нужно убрать spacer_0; после : text_part { label = "Материал"; alignment = centered; }
и добавить spacer_1; после : popup_list {...}
koMon вне форума  
 
Непрочитано 16.08.2018, 09:38
#46
trushev


 
Регистрация: 12.01.2015
Сообщений: 261


Цитата:
Сообщение от koMon Посмотреть сообщение
нужно убрать spacer_0; после : text_part { label = "Материал"; alignment = centered; }
Это 31 строка, или добавить между 10 и 11 строками.
trushev вне форума  
 
Непрочитано 16.08.2018, 09:45
#47
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


как-то так
Миниатюры
Нажмите на изображение для увеличения
Название: Untitled-1.jpg
Просмотров: 19
Размер:	128.0 Кб
ID:	205411  Нажмите на изображение для увеличения
Название: Untitled-2.jpg
Просмотров: 20
Размер:	42.8 Кб
ID:	205414  
koMon вне форума  
 
Автор темы   Непрочитано 17.08.2018, 06:52
#48
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от koMon Посмотреть сообщение
как-то так
Огромнейшее спасибо!!!!!!!

----- добавлено через ~8 ч. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
как-то так
koMon? Добрый день. Подскажи:

В свой блок решил завести еще одну кнопку
Код:
[Выделить все]
 GOST_33259_2015 : dialog {
                label = "Исходные данные"; //название диалогового окна
                
                //первый блок
                    : boxed_row { //блок из двух данных, тип и материал
                            height = 4; //высота блока
                            : column  { //расставление диалога в столбик
                                    width = 15; //ширина блока
                                    : text_part  {
                                            label = "Тип";
                                            alignment = centered;
                                             }
                                    : row { //средство объединение тип и материал в ряд
                                        spacer_0;
                                            : popup_list {
                                                key = "Tip";
                                                edit_width = 5; //ширина видимой части редактируемого поля Тип
                                                list = " \n01\n02\n03\n04\n11\n21";
                                                value = "0";
                                                alignment = left;
                                                 }     
                                        spacer_1;
                                          }
                                    spacer_1;
 
                                }
                            : column {
                                    width = 20; //размер видимой части редактируемого поля Материал
                                    : text_part  {
                                            label = "Материал";
                                            alignment = centered;
                                             }
                                        : popup_list   {
                                            key = "Mat";
                                            list = " \n1 - сталь\n2 - серый чугун\n3 - ковкий чугун";
                                            width = 10; //ширина видимой части редактируемого поля Материал
                                            height = 4;
                                            is_enabled = false;
                                            value = "0";
                                             }
                                             spacer_1;
                                }
                                : column {
                                    width = 5; //размер видимой части редактируемого поля Исполнение
                                    : text_part  {
                                            label = "Исполнение";
                                            alignment = centered;
                                             }
                                        : popup_list   {
                                            key = "Isp";
                                            list = " \nA\nB\nC\nD\nE\nF\nJ\nK\nL\nM";
                                            width = 10; //ширина видимой части редактируемого поля Исполнение
                                            height = 4;
                                            is_enabled = false;
                                            value = "0";
                                             }
                                             spacer_1;
                                }





                                
                            }
                    spacer_1;
                    ok_cancel;
            }
Все хорошо. Но в ней третье окно должно активироваться если выбирают тип 03. Написал код для активации, но похоже я не понял всех операций, которые были в твоем коде.

Код:
[Выделить все]
 (defun flange_selecting ()
    (setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Замороженное окно.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Tip "0"
              Mat "0"
	      Isp "0"
    )
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "GOST_33259_2015" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                    )
                    (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
                        (action_tile "Tip" "(if (= \"6\" $value)
                                                            (progn
                                                                (mode_tile \"Mat\" 0)
                                                                (set_tile \"Mat\" Mat)
                                                            )
                                                            (mode_tile \"Mat\" 1)
                                                    )
                                                    (setq Tip $value)
                                                   "
                        )
                        (action_tile "Mat" "(setq Mat $value)")
                        (set_tile "Tip" Mat)
		      (setq diag_result (start_dialog))



		      (action_tile "Tip" "(if (= \"3\" $value)
                                                            (progn
                                                                (mode_tile \"Isp\" 0)
                                                                (set_tile \"Isp\" Isp)
                                                            )
                                                            (mode_tile \"Isp\" 1)
                                                    )
                                                    (setq Tip $value)
                                                   "
                        )
                        (action_tile "Isp" "(setq Isp $value)")
                        (set_tile "Tip" Isp)
		      (setq diag_result1 (start_dialog))





		      
                        
                        (unload_dialog fs_dcl_id)
                        (cond
                                (
                                    (= diag_result 1)
                                        (princ (strcat "\nВыбран " (cadr (assoc Tip '(("0" "")("1" "01") ("2" "02") ("3" "03") ("4" "04") ("5" "11") ("6" "21")))) " тип фланца"))
                                        (if (= "6" Tip)
                                            (princ (strcat "\nМатериал фланца " (cadr (assoc Mat '(("0" "") ("1" "Сталь") ("2" "Серый чугун") ("3" "Ковкий чугун"))))))
                                        )
                                )
				(
				(= diag_result1 1)
				(if (= "3" Tip)
                                            (princ (strcat "\nИсполнение " (cadr (assoc Isp '(("0" "") ("1" "A") ("2" "B") ("3" "C") ("4" "D") ("5" "E") ("6" "F") ("7" "J") ("8" "K") ("9" "L") ("10" "M") )))))
                                        )
				 )
				 
                                (
                                    t
                                        (princ "\nEsc нажат")
                                )
                        ) 
                    ) 
                )
            )
        )
        (princ)
)




Можешь помочь, что я не до понял.
И еще
Код:
[Выделить все]
 (
                                    t
                                        (princ "\nEsc нажат")
                                )
Объясни что за операция. Я как понял, что если не выбрано нужного типа, то это как будто нажатие Esc для замороженного окна?
protorgovec вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp ограничить ввод для пользователя

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autolisp: как получить последний ввод (команду, координаты точек)? studentarh LISP 49 15.08.2013 11:52
Ввод объекта в эксплуатацию andrew.g Прочее. Архитектура и строительство 7 12.07.2013 16:28
DYNMODE (Системная переменная динамический ввод) sdv79 Справочник команд 0 10.06.2012 17:17
Приямок ("кессон") скважины водоснабжения. Гидроизоляция, ввод трубы. Андрей О Конструкции зданий и сооружений 2 27.05.2011 23:52
Динамический ввод или демонический ввод? TheBuTeK Динамические блоки 20 13.10.2005 09:36