Schöck
dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

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

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

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

protorgovec вне форума Вставить имя

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


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


Цитата:
Сообщение от 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,555


Цитата:
Сообщение от 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 Кб, 5 просмотров)
protorgovec вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 16.08.2018, 09:34
#45
koMon


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


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


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


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


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


как-то так
Миниатюры
Нажмите на изображение для увеличения
Название: Untitled-1.jpg
Просмотров: 13
Размер:	128.0 Кб
ID:	205411  Нажмите на изображение для увеличения
Название: Untitled-2.jpg
Просмотров: 13
Размер:	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 AutoCAD 20 13.10.2005 09:36

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||