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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нужен Lisp для отрисовки прямоугольника по 2-м точкам

Нужен Lisp для отрисовки прямоугольника по 2-м точкам

Ответ
Поиск в этой теме
Непрочитано 07.07.2010, 22:27 #1
Нужен Lisp для отрисовки прямоугольника по 2-м точкам
S_Misha
 
специалист широкого профиля
 
Псков
Регистрация: 01.10.2008
Сообщений: 128

Коллеги, не поможете с Lisp для рисования прямоугольника по 2м точкам(точки расположены по диагонали). Очень нужен (приходится очень много оцифровывать планшетов).
Просмотров: 4845
 
Непрочитано 07.07.2010, 22:33
#2
AlphaGeo


 
Сообщений: n/a


А команда _RECTANG (ПРЯМОУГОЛЬНИК) не подходит?
 
 
Непрочитано 07.07.2010, 22:34
#3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от S_Misha Посмотреть сообщение
Коллеги, не поможете с Lisp для рисования прямоугольника по 2м точкам(точки расположены по диагонали). Очень нужен (приходится очень много оцифровывать планшетов).
точки указаны во внешнем текстовом файле?
hwd вне форума  
 
Непрочитано 08.07.2010, 08:22
#4
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Для запуска команда re_f.
Может сгодится?
Вложения
Тип файла: zip m.zip (7.6 Кб, 118 просмотров)
E-degtyarev вне форума  
 
Автор темы   Непрочитано 08.07.2010, 09:42
#5
S_Misha

специалист широкого профиля
 
Регистрация: 01.10.2008
Псков
Сообщений: 128


Нет команда Прямоугольник не подходит
Нудно чтоб я ткнул 2 точки образующие диагональ прямоугольника и он отрисовался по этим данным. Прямоугольники могут быть повернутя под любым углом. точки находятся не в текстовом файле, указываются с экрана. ТУт был выложен набор pltools, для работы с полилиниями, там была очень похожая команда, для отрисовки прямоугольника по 3м точкам. Нужен похожий Lisp, но для 2-х точек.
S_Misha вне форума  
 
Непрочитано 08.07.2010, 09:48
#6
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Цитата:
Прямоугольники могут быть повернутя под любым углом.
Из-за этого условия задача становится неопределенной. Для режима ОРТО можно было бы написать программу.
Profan вне форума  
 
Непрочитано 08.07.2010, 09:53
#7
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Угу, условий явно не достаточно для однозначного решения.
Миниатюры
Нажмите на изображение для увеличения
Название: 000.png
Просмотров: 138
Размер:	12.8 Кб
ID:	42012  
Makswell вне форума  
 
Автор темы   Непрочитано 08.07.2010, 09:57
#8
S_Misha

специалист широкого профиля
 
Регистрация: 01.10.2008
Псков
Сообщений: 128


Да наверно нельзя это сделать, Чтото я не подумал, что может несколько прямоуголников с одной диагональю быть. Все, закрываем тему.
S_Misha вне форума  
 
Непрочитано 08.07.2010, 10:57
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от S_Misha Посмотреть сообщение
Да наверно нельзя это сделать, Чтото я не подумал, что может несколько прямоуголников с одной диагональю быть.
Именно поэтому в pltools требуется указать 3 точки
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.02.2013, 20:39
#10
Alex II


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


Помогите пожалуйста.
Когдато здесь на форум мне написали лисп для отрисовки прямоугольника по двум точкам (середина первой стороны и середина противоположной стороны) с заданной высотой и на заданном слое. Хотелось бы дополнить этот лисп:
Сейчас он рисует толко в мировой системе координат, хотелось бы в любой (может менять систему координат на мировую перед отрисовкой, а потом обратно на предыдущую?). Также хотелосьбы чтобы тип линни слоя был dashed. И если можно, то line type scale нарисованного прямоугольника была бы 0,1.

Код:
[Выделить все]
(defun c:gilza (/ P1 P2 V)
 (setq p1 (getpoint "\n Nachalnaja tochka")
       p2 (getpoint "\n Konechnaja tochka")
       v  (/ (distance p1 p2) 0.4)
       v  (mapcar '/ (mapcar '- p1 p2 '(0 0)) (list v v))
       v  (list (- (cadr v)) (car v))
 ) ;_  setq
 (entmakex
  (append
   '((0 . "LWPOLYLINE")
     (100 . "AcDbEntity")
     (8 . "Proekt_gilza")
     (410 . "Model")
     (100 . "AcDbPolyline")
     (90 . 4)
     (70 . 1)
     (43 . 0.1)
    )
   (mapcar
    'cons
    '(10 10 10 10)
    (mapcar 'mapcar '(- + + -) (list p1 p1 p2 p2) (list v v v v))
   ) ;_  mapcar
  ) ;_  append
 ) ;_  entmakex
)
спасибо!
Alex II вне форума  
 
Непрочитано 03.02.2013, 00:46
#11
Alan

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


Что мешает вначале поставить:
(command "_UCS" "_W")
запомнить переменные "LTYPE" и "LTSCALE", затем их назначить
(setvar "LTYPE" "dashed")
(setvar "LTSCALE" 0.1)
в конце вернуть, типа
(command "_UCS" "_P") и переменные "LTYPE" и "LTSCALE"
???
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 03.02.2013, 01:10
#12
Alex II


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


Мешает только одно незнание lispa. Но спасибо за подсказку, постараюсь осилить
И еще вопросик. Если посреди исполнения функции нажимаетса Esc и происходит выход, то можно ли сделать чтоб автоматом возвращались (command "_UCS" "_P") и переменные "LTYPE" и "LTSCALE"

Последний раз редактировалось Alex II, 03.02.2013 в 01:27.
Alex II вне форума  
 
Непрочитано 03.02.2013, 17:52
#13
Кулик Алексей aka kpblc
Moderator

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


http://autolisp.ru/2009/09/20/howto_undo/
http://autolisp.ru/2009/09/13/error-catch/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.02.2013, 11:54
#14
Олег (jr.)

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


Цитата:
Сообщение от Alex II Посмотреть сообщение
И еще вопросик. Если посреди исполнения функции нажимаетса Esc и происходит выход, то можно ли сделать чтоб автоматом возвращались (command "_UCS" "_P") и переменные "LTYPE" и "LTSCALE"
Попробуй где-то так, особо не проверял


Код:
[Выделить все]
(defun c:gilza (/ *error* cec clay clt clw cmd csc osm p1 p2 v)
    (defun *error*  (msg)
      (command "_undo" "_end")
      (command)
      (if (and msg
	       (wcmatch	msg
			"Function cancelled,quit / exit abort,console break"))
	(princ
	  (strcat "\nError: " msg)
	  )
	)
      (if clay
	(setvar 'clayer clay))
      (if cec
	(setvar 'cecolor cec))
      (if clt
	(setvar 'celtype clt))
      (if clw
	(setvar 'celweight clw))
      (if csc
	(setvar 'celtscale csc))
      (if cmd
	(setvar 'cmdecho cmd))
      (if osm
	(setvar 'osmode osm))
         (if	(tblsearch "ucs" "MyWorkingUCS")

	      (command "_ucs" "_Delete" "MyWorkingUCS")
	      )
      ) ;_*error*
  
;; вспомогательная ф-ция
(defun load_ltype (ltname / fname)
  ;FH
  (and
    (if (zerop (getvar "measureinit"))
    (setq fname "acad.lin")
    (setq fname "acadiso.lin")
  )
  (command "._-linetype" "_Load" ltname (findfile fname) "")
    )
  );_load_ltype

;; вспомогательная ф-ция   
;; by VovKa as published:  
;; http://www.theswamp.org/index.php?topic=33041.msg384927#msg384927
(defun CreateLayer (Name FrzLock Color LType Plot? LWeight Desc)
  
  (entmakex
    (list (cons 0 "LAYER")
	  (cons 100 "AcDbSymbolTableRecord")
	  (cons 100 "AcDbLayerTableRecord")
	  (cons 2 Name)
	  (cons 70 FrzLock)
	  (cons 62 Color)
	  (cons 6 LType)
	  (cons 290 Plot?)
	  (cons 370 LWeight)
	  (list -3 (list "AcAecLayerStandard" (cons 1000 "") (cons 1000 Desc)))
    )
  )
)
  ;; 			main program			  ;;
  
  (command "_undo" "_Begin")
(if (tblsearch "ucs" "MyWorkingUCS")
  (command "_ucs" "_Restore" "MyWorkingUCS")
  (progn
    (command "_ucs" "_Named" "_Save" "MyWorkingUCS")
    (command "_ucs" "_Restore" "MyWorkingUCS")
    (command "_ucsicon" "_ON" "_ucsicon" "_ORigin")
    )
  )

  
   (command "_ucs" "_W")
  
(setq osm (getvar 'osmode)
      cmd (getvar 'cmdecho))
(setvar 'cmdecho 0)
(setvar 'osmode 0)
(setq clay (getvar 'clayer)
      cec  (getvar 'cecolor)
      clt  (getvar 'celtype)
      clw  (getvar 'celweight)
      csc  (getvar 'celtscale)
      )

  
 (if (not (tblsearch "ltype" "hidden"))
   (load_ltype "hidden")
   )

 (if (not (tblsearch "layer" "Proekt_gilza"))
   (CreateLayer
     "Proekt_gilza"
     0
     7 ;цвет черный (7)
     "hidden"
     1
     -1
     "Слой для отрисовки гильз")		  
   )
 (setvar 'clayer "Proekt_gilza")
 (setvar 'cecolor "bylayer")
 (setvar 'celtype "bylayer")
 (setvar 'celweight -1)
 (setvar 'celtscale 0.1)
  
 (setq p1 (getpoint "\n Nachalnaja tochka >>"))
 (setq p2 (getpoint p1 "\n Konechnaja tochka >>"))
       (if (and p1 p2)
	 (progn
	   (setq v (/ (distance p1 p2) 0.4)
		 v (mapcar '/ (mapcar '- p1 p2 '(0 0)) (list v v))
		 v (list (- (cadr v)) (car v))
		 ) ;_  setq

	   (entmakex
	     (append
	       '((0 . "LWPOLYLINE")
		 (100 . "AcDbEntity")
		 (8 . "Proekt_gilza")
		 (6 . "HIDDEN")
		 (410 . "Model")
		 (100 . "AcDbPolyline")
		 (90 . 4)
		 (70 . 1)
		 (48 . 0.1)
		 (43 . 0.1)
		 )
	       (mapcar
		 'cons
		 '(10 10 10 10)
		 (mapcar 'mapcar
			 '(- + + -)
			 (list p1 p1 p2 p2)
			 (list v v v v))
		 ) ;_  mapcar
	       ) ;_  append
	     ) ;_  entmakex

	   )
	 )
 (*error* nil)
  (princ)  
)
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нужен Lisp для отрисовки прямоугольника по 2-м точкам



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу серию ИИ-65. Лестничные марши и площадки. Metalist Поиск литературы, чертежей, моделей и прочих материалов 15 25.10.2020 16:49
Нужен LISP для суммы длин отрезков линни ilka_t LISP 219 10.09.2019 10:22
Нужен LISP для разрыва линий в точках пересечений ilka_t LISP 18 15.03.2013 16:35
Программа отрисовки выноски для сетей lozivan Программирование 7 31.10.2009 17:42
Нужен LISP для заливки отверстий ilka_t AutoCAD 20 24.03.2004 16:06