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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > подскажите как в lispe выбрать точку?

подскажите как в lispe выбрать точку?

Ответ
Поиск в этой теме
Непрочитано 19.01.2010, 20:52 #1
подскажите как в lispe выбрать точку?
tinik_89
 
Регистрация: 23.12.2009
Сообщений: 23

Подскажите как написать в лиспе команды, что бы в пространстве модели указать две точки, и их координаты сохранить в ини-файл(например)!!! Можно через dcl!

Последний раз редактировалось tinik_89, 19.01.2010 в 21:27.
Просмотров: 2084
 
Непрочитано 19.01.2010, 21:37
#2
Кулик Алексей aka kpblc
Moderator

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


(getpoint) тебе поможет.
Что тема делала в "готовых программах" - непонятно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.01.2010, 21:44
#3
tinik_89


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


да с getpoint понятно все только как в о внешний файл координаты сохранить???
tinik_89 вне форума  
 
Непрочитано 19.01.2010, 22:12
#4
Кулик Алексей aka kpblc
Moderator

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


Код практически не проверял:
Код:
[Выделить все]
(defun test (/ *error* pt1 pt2 file handle lst count)
  (defun *error* (msg)
    (vl-catch-all-apply (function (lambda () (close handle))))
    (princ msg)
    (princ)
    ) ;_ end of defun
  (if
    (and (= (type (setq pt1 (vl-catch-all-apply
                              (function (lambda () (getpoint "\nТочка 1 ")))
                              ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'list
            ) ;_ end of =
         (= (type
              (setq
                pt2 (vl-catch-all-apply
                      (function (lambda () (getpoint pt1 "\nТочка 2 ")))
                      ) ;_ end of vl-catch-all-apply
                ) ;_ end of setq
              ) ;_ end of type
            'list
            ) ;_ end of =
         (setq file (getfiled "Результат" "" "ini" 1))
         (/= file "")
         ) ;_ end of and
     (progn

       (setq pt1    (trans pt1 1 0)
             pt2    (trans pt2 1 0)
             count  0
             lst    (apply
                      (function append)
                      (mapcar
                        (function
                          (lambda (x)
                            (list (strcat "[Точка"
                                          (itoa (setq count (1+ count)))
                                          "]"
                                          ) ;_ end of strcat
                                  (strcat "x=" (vl-princ-to-string (car x)))
                                  (strcat "y=" (vl-princ-to-string (cadr x)))
                                  (strcat "z=" (vl-princ-to-string (caddr x)))
                                  ) ;_ end of list
                            ) ;_ end of lambda
                          ) ;_ end of function
                        (list pt1 pt2)
                        ) ;_ end of mapcar
                      ) ;_ end of apply
             handle (open file "w")
             ) ;_ end of setq
       (foreach item lst
         (write-line item handle)
         ) ;_ end of foreach
       (close handle)
       ) ;_ end of progn
     ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.01.2010, 22:52
#5
tinik_89


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


спасибо большое Алексей! Все работает!!!!!
Вот только подскажи плиз чайнику, что в коде изменить надо чтобы сохраняло в ини автоматически, под конкретным именем !!!
tinik_89 вне форума  
 
Непрочитано 19.01.2010, 23:03
#6
Кулик Алексей aka kpblc
Moderator

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


Вместо строк
Код:
[Выделить все]
(setq file (getfiled "Результат" "" "ini" 1))
         (/= file "")
поставь конкретное имя файла. Например,
Код:
[Выделить все]
(setq file "c:\\temp\\result.ini")
Только ты учти, что каждый раз файл будет перезаписываться.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.01.2010, 23:17
#7
tinik_89


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


Алексей!!!!!!!!! Ты мой спаситель!!!!!
еще раз спс!!!!!

Последний раз редактировалось tinik_89, 19.01.2010 в 23:44.
tinik_89 вне форума  
 
Непрочитано 20.05.2013, 11:43
#8
Виктор81


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


Подскажите.
Пробовал через файл dcl ввести координаты для примитиава, в ответ получаю что плохая переменная, но при этом он правильно печатает их в командной строке.
Как быть??????
Виктор81 вне форума  
 
Непрочитано 20.05.2013, 13:41
#9
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Попробуй пример, переделай под свои нужды
Код:
[Выделить все]
(defun C:Spts(/ dcl_id coords lay flag)
  ;; by Kenny Ramage

  ;; http://www.afralisp.net/index.php (Archive)
  
(setvar "dimzin" 0)

(setq coords nil)


					;set flag to 4
(setq flag 4)

					;load the DCL file
(setq dcl_id (load_dialog "hidedialog.dcl"))

					;check the flag status and carry on looping
					;if it is greater than 2
(while (> flag 2)

					;load the dialog box
  (if (not (new_dialog "hidedialog" dcl_id))

					;if not loaded exit
    (exit)
  ) ;_ end of if

					;populate the list box with the values
					;in thelist
  (start_list "set")

  (mapcar 'add_list coords)

  (end_list)

					;if Cancel button selected, close
					;the dialog. This action sets the
					;flag to 0.
  (action_tile "cancel" "(done_dialog 0)")

					;if OK button was selected, close
					; the dialog. This action
					;sets the flag to 1.
  (action_tile "accept" "(done_dialog 1)")

					;if pick button selected, hide the dialog
					;and set the flag to 4
  (action_tile "hide" "(done_dialog 4)")

					;start the dialog and set flag
					;to value of start dialog
  (setq flag (start_dialog))

					;if the pick button was selected
  (if (= flag 4)

					;do the following
    (progn

      (setq ent (entsel "\Select LW polyline: "))

      (setq coords (vl-remove-if
		     'not
		     (mapcar '(lambda (x)
				(if (eq 10 (car x))
				  (cdr x)
				) ;_ end of if
			      ) ;_ end of lambda
			     (entget (car ent))
		     ) ;_ end of mapcar
		   ) ;_ end of vl-remove-if
      ) ;_ end of setq

      (setq coords
	     (mapcar
	       '(lambda	(x)
		  (strcat (rtos (car x) 2 3) "\t" (rtos (cadr x) 2 3))
		) ;_ end of lambda
	       coords
	     ) ;_ end of mapcar
      ) ;_ end of setq
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of while
					;unload the dialog
(unload_dialog dcl_id)

(princ)
      
  )

// DCL
hidedialog : dialog {
	label = "Display Coordinates";
        : row {
        :text {label = "X";}
        :text {label = "Y";}
        }
	: list_box {
//        	label = "Coordinates:";
                allow_accept = true;
        	tabs = "12 24";
        	is_tab_stop = true;
        	key = "set";
        	height = 7;
	width = 25;
     	}   

	: button {
	label = "Select LW polyline";
	key = "hide";
	width = 8;
	fixed_width = true;
	mnemonic = "S";
                alignment = centered;
                is_default = true;
	}

	: spacer { width = 1;}

	ok_cancel;

  	 }
Олег (jr.) вне форума  
 
Непрочитано 20.05.2013, 18:44
#10
Виктор81


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


Интересная программка но мне нужно наоборот в dcl вводишь координаты а программка чертит
Increase Size Decrease Size Нажмите для просмотра
http://forum.dwg.ru/images/smilies/good.gif
Виктор81 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > подскажите как в lispe выбрать точку?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3D: пересечение плоскости и прямой. Как поймать точку? astronomo AutoCAD 2 20.03.2009 00:08
Как выбрать кабель для охранно-пожарной сигнализации??? Galchonok Поиск литературы, чертежей, моделей и прочих материалов 1 06.03.2009 15:51
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16
Как на LISPе автоматически выбрать линию и точку? Mikhail LISP 4 28.10.2003 10:33
Как извлекать переменные которые считает MASSPROP в LISPe? Денис LISP 2 13.10.2003 12:55