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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Экспорт параметров большого количества окружностей в файл .txt

Экспорт параметров большого количества окружностей в файл .txt

Ответ
Поиск в этой теме
Непрочитано 17.06.2010, 12:04 #1
Экспорт параметров большого количества окружностей в файл .txt
Манасыпов Р.Ф.
 
Молниезащита зданий и сооружений
 
Москва
Регистрация: 27.10.2009
Сообщений: 23

Доброго времени суток!

Прочитал многие темы по экспорту координатов точек, но задачка у меня несколько другая. Её решение жизненоважно для меня...))))))
Суть проста, на листе имеются 300-400 окружностей с различными координатами и радиусами. Хотелось бы присвоить номер каждой окружности перекинуть в txt: номер окружности, X, Y и радиус. То есть четыре столбца. Как эту задачку можно решить?
Я не особо разбираюсь в програмировании, но темы посвящённые базовым понятиям прочитал.
Буду благодарен любой помощи. Заранее спасибо!
__________________
Молниезащита зданий и сооружений.
Просмотров: 6416
 
Непрочитано 17.06.2010, 13:32
1 | #2
Олег (jr.)

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


Цитата:
Сообщение от Манасыпов Р.Ф. Посмотреть сообщение
Доброго времени суток!

Прочитал многие темы по экспорту координатов точек, но задачка у меня несколько другая. Её решение жизненоважно для меня...))))))
Суть проста, на листе имеются 300-400 окружностей с различными координатами и радиусами. Хотелось бы присвоить номер каждой окружности перекинуть в txt: номер окружности, X, Y и радиус. То есть четыре столбца. Как эту задачку можно решить?
Я не особо разбираюсь в програмировании, но темы посвящённые базовым понятиям прочитал.
Буду благодарен любой помощи. Заранее спасибо!
Попробуй как работает

Код:
[Выделить все]
;;==============================================;;
(defun C:ic (/ *error* cnt elist en fd fname pt rad sset tmp x y)

  (defun *error* (msg)
    (if fd (close fd))
    (if msg (princ (strcat "\nError! " msg)))
    (princ)
    )
  
 ;;==============================================;;
  
  (defun dxf (key alist)
    (cdr (assoc key alist))
    )
  
;;==============================================;;
  
  (setq fname (strcat (getvar "dwgprefix")
		      (vl-filename-base (getvar "dwgname")) ".txt")
	)

  (command "._zoom" "_e")
  (if
    (setq sset (ssget "X" (list (cons 0 "CIRCLE"))))
     (progn
       (setq fd (open fname "W"))
       (setq cnt 1)
       (while (setq en (ssname sset 0))
	 (setq elist (entget en)
	       pt    (dxf 10 elist)
	       x     (rtos (car pt) 2 3);<--- 3 это точность после запятой
	       y     (rtos (cadr pt) 2 3)
	       rad   (rtos (dxf 40 elist) 2 3)
	       )
	 (setq tmp (strcat (itoa cnt)
			   (chr 44)
			   x
			   (chr 44)
			   y
			   (chr 44)
			   rad))
	 (write-line tmp fd)
	 (ssdel en sset)
	 (setq cnt (1+ cnt))
	 )
       (close fd)

       )
     )
  (command "._zoom" "_p")
  (princ)
  )
		    
;;==============================================;;
(prompt "\nВ командной строке введите: ic для записи окружностей в файл")
(prin1)
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.06.2010, 14:05
#3
Манасыпов Р.Ф.

Молниезащита зданий и сооружений
 
Регистрация: 27.10.2009
Москва
Сообщений: 23


Суппер!!!!!! Вроде всё нормально получилось. Осталось единственно для удобства:
1. разделители пробелы;
2. нужно чтобы он сканировал по Y и присваивал номера начиная с того у которого Y минимален, т.е. нумерация должна быть такой, например в первом столбце 5 окружностей, во втором - 4, в третьем - 1, в четвётром - 5, то есть вот такая нумерация должна быть:

5_________15
4__9______14
3__8__10__13
2__7______12
1__6______11

и т.д. Возможно ли это? Буду премного благодарен!

Ещё бы хотелось чтобы на чертеже подписывались номера окружностей, а то 300-400 окружностей потом отслеживать по координатам - это потеря всей оперативности. Спасибо!
__________________
Молниезащита зданий и сооружений.

Последний раз редактировалось Манасыпов Р.Ф., 17.06.2010 в 14:43.
Манасыпов Р.Ф. вне форума  
 
Непрочитано 17.06.2010, 14:59
1 | #4
Олег (jr.)

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


Цитата:
Сообщение от Манасыпов Р.Ф. Посмотреть сообщение
Суппер!!!!!! Вроде всё нормально получилось. Осталось единственно для удобства:
1. разделители пробелы;
2. нужно чтобы он сканировал по Y и присваивал номера начиная с того у которого Y минимален, т.е. нумерация должна быть такой, например в первом столбце 5 окружностей, во втором - 4, в третьем - 1, в четвётром - 5, то есть вот такая нумерация должна быть:

5_________15
4__9______14
3__8__10__13
2__7______12
1__6______11

и т.д. Возможно ли это? Буду премного благодарен!

Ещё бы хотелось чтобы на чертеже подписывались номера окружностей, а то 300-400 окружностей потом отслеживать по координатам - это потеря всей оперативности. Спасибо!
Твой пример совсем не информативен (или я такой тупой)
Лучше создай текстовый файл с небольшим количеством
строк и приложи сюда)
Неплохо бы еще и чертеж откуда это будет экспортироваться
(5-6 окружностей - не больше)
Предварительно заархивируй

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.06.2010, 15:25
#5
Манасыпов Р.Ф.

Молниезащита зданий и сооружений
 
Регистрация: 27.10.2009
Москва
Сообщений: 23


например у нас окружности располагаются следующим образом (пустоты я заменяю знаком "_"):

0___0__0
0___0
0_0_0__0

нумерация должна происходить следующим образом:

3___7__9
2___6
1_4_5__8

то есть присвоение номеров происходит по оси Y начиная от минимального.

то есть в выходном файле и на чертеже должна быть такая нумерация и между значениями в файле разделитель не "," а "пробел"
__________________
Молниезащита зданий и сооружений.
Манасыпов Р.Ф. вне форума  
 
Непрочитано 17.06.2010, 15:42
1 | #6
Олег (jr.)

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


Цитата:
Сообщение от Манасыпов Р.Ф. Посмотреть сообщение
например у нас окружности располагаются следующим образом (пустоты я заменяю знаком "_"):

0___0__0
0___0
0_0_0__0

нумерация должна происходить следующим образом:

3___7__9
2___6
1_4_5__8

то есть присвоение номеров происходит по оси Y начиная от минимального.

то есть в выходном файле и на чертеже должна быть такая нумерация и между значениями в файле разделитель не "," а "пробел"
Так бы сразу и сказал что сортировка идет по ворастанию Y и
возрастанию X центров окружностей
Сейчас попробую

Код:
[Выделить все]
;;==============================================;;
(defun C:ic (/ *error* cnt elist en fd fname pt rad sset tmp x y)

  (defun *error* (msg)
    (if fd (close fd))
    (if msg (princ (strcat "\nError! " msg)))
    (princ)
    )
  
 ;;==============================================;;
  
  (defun dxf (key alist)
    (cdr (assoc key alist))
    )
  
;;==============================================;;
  
  (setq fname (strcat (getvar "dwgprefix")
		      (vl-filename-base (getvar "dwgname")) ".txt")
	)

  (command "._zoom" "_e")
  (if
    (setq sset (ssget "X" (list (cons 0 "CIRCLE"))))
     (progn
       (setq fd (open fname "W"))
       
       (while (setq en (ssname sset 0))
	 (setq elist (entget en)
	       pt    (dxf 10 elist)
	       x     (car pt)
	       y     (cadr pt)
	       rad   (dxf 40 elist)
	       tmp (list x y rad)
	       ptlist (cons tmp ptlist)
	       )
	 
	 
	 (ssdel en sset)

	 )
       
       (setq cnt 0)
(setq data_list
       (mapcar (function (lambda (x)
			   (setq cnt (1+ cnt))
			   (strcat (itoa cnt)
				     (chr 9)
				     (rtos (car x) 2 3)
				     (chr 9)
				     (rtos (cadr x) 2 3)
				     (chr 9)
				     (rtos (caddr x) 2 3)
				     )
				   )
			   )
	       (vl-sort
		 (vl-sort ptlist
			  (function (lambda (a b) (< (car a) (car b)))))
		 (function
		   (lambda (a b)
		     (and (equal (car a) (car b) 0.00001)
			  (< (cadr a) (cadr b))
			  )
		     )
		   )
		 )
	       )
      )

       
       (foreach item data_list
	 (write-line item fd)
	 )
       (close fd)
       )
     )
  (command "._zoom" "_p")
  (princ)
  )
		    
;;==============================================;;
(prompt "\nВ командной строке введите: ic для записи окружностей в файл")
(prin1)
~'J'~

Последний раз редактировалось Олег (jr.), 17.06.2010 в 16:03. Причина: +
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.06.2010, 16:18
#7
Манасыпов Р.Ф.

Молниезащита зданий и сооружений
 
Регистрация: 27.10.2009
Москва
Сообщений: 23


ВОТ ЭТО СУППЕР!!!!!!!
ГРОМАДНОЕ СПАСИБО ТЕБЕ!!!!!
Теперь процесс в моём делопроизводстве пойдёт быстрее. Если какие-нить проблемки будут, позволь обратиться.

Ещё раз спасибо! Радости моей нет предела.
__________________
Молниезащита зданий и сооружений.
Манасыпов Р.Ф. вне форума  
 
Непрочитано 17.06.2010, 16:35
1 | #8
Олег (jr.)

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


Цитата:
Сообщение от Манасыпов Р.Ф. Посмотреть сообщение
ВОТ ЭТО СУППЕР!!!!!!!
ГРОМАДНОЕ СПАСИБО ТЕБЕ!!!!!
Теперь процесс в моём делопроизводстве пойдёт быстрее. Если какие-нить проблемки будут, позволь обратиться.

Ещё раз спасибо! Радости моей нет предела.
Проверь потщательнее, мне проверять некогда
а вдруг там косяк какой?
Кстати можно заменить расширение файла ".txt" на ".csv"
если надо залить в Эксель...

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.06.2010, 16:56
#9
Манасыпов Р.Ф.

Молниезащита зданий и сооружений
 
Регистрация: 27.10.2009
Москва
Сообщений: 23


Ок, если какие проблемы будут я обязательно напишу, но пока проверка не выявила ошибок.
__________________
Молниезащита зданий и сооружений.
Манасыпов Р.Ф. вне форума  
 
Автор темы   Непрочитано 22.06.2010, 12:06
#10
Манасыпов Р.Ф.

Молниезащита зданий и сооружений
 
Регистрация: 27.10.2009
Москва
Сообщений: 23


после обработки этих данных возникла следующая потребность. Можно ли сделать так чтобы:
1. номера окружностей записывались в файл nom.txt
2. коррдинаты x в файл x.txt
3. координиты y в файл y.txt
4. радиусы в файл rad.txt
во всех текстовых файлах данные должны записываться в один столбец.

при этом необходимо чтобы порядок сохранялся, то есть суть таккая, чтобы те данные которые мы получаем щас (текстовый файл с четырмя столбцами) разбить на 4 файла по одному столбцу в каждом.

Спасибо за помощь!
__________________
Молниезащита зданий и сооружений.

Последний раз редактировалось Манасыпов Р.Ф., 22.06.2010 в 12:08. Причина: +
Манасыпов Р.Ф. вне форума  
 
Непрочитано 22.06.2010, 14:59
#11
Олег (jr.)

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


Цитата:
Сообщение от Манасыпов Р.Ф. Посмотреть сообщение
после обработки этих данных возникла следующая потребность. Можно ли сделать так чтобы:
1. номера окружностей записывались в файл nom.txt
2. коррдинаты x в файл x.txt
3. координиты y в файл y.txt
4. радиусы в файл rad.txt
во всех текстовых файлах данные должны записываться в один столбец.

при этом необходимо чтобы порядок сохранялся, то есть суть таккая, чтобы те данные которые мы получаем щас (текстовый файл с четырмя столбцами) разбить на 4 файла по одному столбцу в каждом.

Спасибо за помощь!
Это очень просто сделать, когда будет время
я вернусь

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 22.06.2010, 15:47
#12
Манасыпов Р.Ф.

Молниезащита зданий и сооружений
 
Регистрация: 27.10.2009
Москва
Сообщений: 23


СПАСИБО ОГРОМНОЕ!!!! БУДУ С НЕТЕРПЕНИЕМ ЖДАТЬ!
__________________
Молниезащита зданий и сооружений.
Манасыпов Р.Ф. вне форума  
 
Непрочитано 22.06.2010, 21:28
#13
Олег (jr.)

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


Попробуй
Код:
[Выделить все]
;;==============================================;;

(defun C:ics (/ *error* cnt data_list elist en fd
	       nd nomname pt ptlist rad radname
	       rd sset tmp x xd xname y yd yname)

  (defun *error* (msg)
    (if nd (close nd))
    (if xd (close xd))
    (if yd (close yd))
    (if rd (close rd))
    (if msg (princ (strcat "\nError! " msg)))
    (princ)
    )
  
 ;;==============================================;;
  
  (defun dxf (key alist)
    (cdr (assoc key alist))
    )
  
;;==============================================;;
  
(setq nomname (strcat (getvar "dwgprefix")
		      (vl-filename-base (getvar "dwgname")) "_NOM.txt")
	)
(setq xname (strcat (getvar "dwgprefix")
		      (vl-filename-base (getvar "dwgname")) "_X.txt")
	)
(setq yname (strcat (getvar "dwgprefix")
		      (vl-filename-base (getvar "dwgname")) "_Y.txt")
	)
(setq radname (strcat (getvar "dwgprefix")
		      (vl-filename-base (getvar "dwgname")) "_RAD.txt")
	)
  (command "._zoom" "_e")
  (if
    (setq sset (ssget "X" (list (cons 0 "CIRCLE"))))
     (progn
       (setq nd (open nomname "W"))
       (setq xd (open xname "W"))
       (setq yd (open yname "W"))
       (setq rd (open radname "W"))
       
       (while (setq en (ssname sset 0))
	 (setq elist (entget en)
	       pt    (dxf 10 elist)
	       x     (car pt)
	       y     (cadr pt)
	       rad   (dxf 40 elist)
	       tmp (list x y rad)
	       ptlist (cons tmp ptlist)
	       )
	 
	 
	 (ssdel en sset)

	 )
       
       (setq cnt 0)
(setq data_list
       (mapcar (function (lambda (x)
			   (setq cnt (1+ cnt))
			   (list (itoa cnt)
			
				     (rtos (car x) 2 3)
			
				     (rtos (cadr x) 2 3)
			
				     (rtos (caddr x) 2 3)
				     )
				   )
			   )
	       (vl-sort
		 (vl-sort ptlist
			  (function (lambda (a b) (< (car a) (car b)))))
		 (function
		   (lambda (a b)
		     (and (equal (car a) (car b) 0.00001)
			  (< (cadr a) (cadr b))
			  )
		     )
		   )
		 )
	       )
      )

       
       (foreach item data_list
	 
	 (write-line (car item) nd)
	 (write-line (cadr item) xd)
	 (write-line (caddr item) yd)
	 (write-line (last item) rd)
	 )
       (close nd)
       (close xd)
       (close yd)
       (close rd)
       )
     )
  (command "._zoom" "_p")
  (princ)
  )
		    
;;==============================================;;
(prompt "\nВ командной строке введите: ics или ICS для записи данных окружностей в файлы")
(prin1)
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 23.06.2010, 09:12
#14
Манасыпов Р.Ф.

Молниезащита зданий и сооружений
 
Регистрация: 27.10.2009
Москва
Сообщений: 23


ок, всё получилось...
только файлы выдал с именами:
Чертёж1_X.txt и т.д. как сделать чтобы файлы были без имени чертежа?
просто x.txt и т.д.
__________________
Молниезащита зданий и сооружений.

Последний раз редактировалось Манасыпов Р.Ф., 23.06.2010 в 09:16. Причина: +
Манасыпов Р.Ф. вне форума  
 
Непрочитано 23.06.2010, 09:59
#15
Олег (jr.)

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


Цитата:
Сообщение от Манасыпов Р.Ф. Посмотреть сообщение
ок, всё получилось...
только файлы выдал с именами:
Чертёж1_X.txt и т.д. как сделать чтобы файлы были без имени чертежа?
просто x.txt и т.д.
Замени следующий блок кода
Код:
[Выделить все]
(setq nomname (strcat (getvar "dwgprefix")
		      (vl-filename-base (getvar "dwgname")) "_NOM.txt")
	)
(setq xname (strcat (getvar "dwgprefix")
		      (vl-filename-base (getvar "dwgname")) "_X.txt")
	)
(setq yname (strcat (getvar "dwgprefix")
		      (vl-filename-base (getvar "dwgname")) "_Y.txt")
	)
(setq radname (strcat (getvar "dwgprefix")
		      (vl-filename-base (getvar "dwgname")) "_RAD.txt")
	)
на такой:

Код:
[Выделить все]
(setq nomname (strcat (getvar "dwgprefix") "NOM.txt")
	)
(setq xname (strcat (getvar "dwgprefix") "X.txt")
	)
(setq yname (strcat (getvar "dwgprefix") "Y.txt")
	)
(setq radname (strcat (getvar "dwgprefix") "RAD.txt")
	)
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 23.06.2010, 13:44
#16
Манасыпов Р.Ф.

Молниезащита зданий и сооружений
 
Регистрация: 27.10.2009
Москва
Сообщений: 23


СПАСИБО ОГРОМНОЕ!!!!
тут ещё такая закавыка получилась, эти данные я в другую программу вставляю, поэтому с твоей помошью этот процесс оптимизирую. Но нашлась ещё одна и я так понимаю последняя (как никак 3 дня уже тестю). Всё дело в том что последнее что нужно добавить, так то что при сканировании по у (по возрастанию) необходимо сначала в порядке возрастания Y записать оружности большего диаметра, затем меньшего и т.д. то есть если все окружности по Y одинакового размера, то LISP работает номально. А вот если разных радиусов, то теперь этот аглоритм не подходит.
Надеюсь ты понимаешь, что я имею ввиду.
Например у нас 4 окружности расположены по оси Y, координата X у всех одинаковая, первая от 0 - радиусом 2см, вторая - 1см, третья - 3см, четвёртая - 2см.
В выводном файле должна быть такая последовательность:
№1 - третья окружность;
№2 - первая окружность;
№3 - четвёртая окружность;
№4 - вторая окружность.
Затем приступает к сканированию по следующему значению Х по возрастанию, то есть далее алгоритм сохраняется.
Соответственно и в файлах X.txt Y.txt RAD.txt, порядок должен поменяться таким же образом.

Возможно ли это??? Огромное спасибо за помошь!!!
__________________
Молниезащита зданий и сооружений.

Последний раз редактировалось Манасыпов Р.Ф., 23.06.2010 в 13:53. Причина: +
Манасыпов Р.Ф. вне форума  
 
Непрочитано 23.06.2010, 14:37
#17
Олег (jr.)

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


Цитата:
Сообщение от Манасыпов Р.Ф. Посмотреть сообщение
СПАСИБО ОГРОМНОЕ!!!!
тут ещё такая закавыка получилась, эти данные я в другую программу вставляю, поэтому с твоей помошью этот процесс оптимизирую. Но нашлась ещё одна и я так понимаю последняя (как никак 3 дня уже тестю). Всё дело в том что последнее что нужно добавить, так то что при сканировании по у (по возрастанию) необходимо сначала в порядке возрастания Y записать оружности большего диаметра, затем меньшего и т.д. то есть если все окружности по Y одинакового размера, то LISP работает номально. А вот если разных радиусов, то теперь этот аглоритм не подходит.
Надеюсь ты понимаешь, что я имею ввиду.
Например у нас 4 окружности расположены по оси Y, координата X у всех одинаковая, первая от 0 - радиусом 2см, вторая - 1см, третья - 3см, четвёртая - 2см.
В выводном файле должна быть такая последовательность:
№1 - третья окружность;
№2 - первая окружность;
№3 - четвёртая окружность;
№4 - вторая окружность.
Затем приступает к сканированию по следующему значению Х по возрастанию, то есть далее алгоритм сохраняется.
Соответственно и в файлах X.txt Y.txt RAD.txt, порядок должен поменяться таким же образом.

Возможно ли это??? Огромное спасибо за помошь!!!
Проверяй сам а то я тупой:

Код:
[Выделить все]
;;==============================================;;

(defun C:ics (/ *error* cnt data_list elist en fd
	       nd nomname pt ptlist rad radname
	       rd sset tmp x xd xname y yd yname)

  (defun *error* (msg)
    (if nd (close nd))
    (if xd (close xd))
    (if yd (close yd))
    (if rd (close rd))
    (if msg (princ (strcat "\nError! " msg)))
    (princ)
    )
  
 ;;==============================================;;
  
  (defun dxf (key alist)
    (cdr (assoc key alist))
    )
  
;;==============================================;;
  
(setq nomname (strcat (getvar "dwgprefix")"NOM.txt")
	)
(setq xname (strcat (getvar "dwgprefix")"X.txt")
	)
(setq yname (strcat (getvar "dwgprefix")"Y.txt")
	)
(setq radname (strcat (getvar "dwgprefix")"RAD.txt")
	)
  (command "._zoom" "_e")
  (if
    (setq sset (ssget "X" (list (cons 0 "CIRCLE"))))
     (progn
       (setq nd (open nomname "W"))
       (setq xd (open xname "W"))
       (setq yd (open yname "W"))
       (setq rd (open radname "W"))
       
       (while (setq en (ssname sset 0))
	 (setq elist (entget en)
	       pt    (dxf 10 elist)
	       x     (car pt)
	       y     (cadr pt)
	       rad   (dxf 40 elist)
	       tmp (list x y rad)
	       ptlist (cons tmp ptlist)
	       )
	 
	 
	 (ssdel en sset)

	 )
       
       (setq cnt 0)
(setq data_list
       (mapcar (function (lambda (x)
			   (setq cnt (1+ cnt))
			   (list (itoa cnt)
			
				     (rtos (car x) 2 3)
			
				     (rtos (cadr x) 2 3)
			
				     (rtos (caddr x) 2 3)
				     )
				   )
			   )
	       (vl-sort
		 (vl-sort ptlist
			  (function (lambda (a b)
				      (and
					(< (car a) (car b))
					))))
		 (function
		   (lambda (a b)
		     (and (equal (car a) (car b) 0.00001)
			  (< (cadr a) (cadr b))
			  (< (last a) (last b)))
			  )
		     )
		   )
		 )
	       )

       
       (foreach item data_list
	 
	 (write-line (car item) nd)
	 (write-line (cadr item) xd)
	 (write-line (caddr item) yd)
	 (write-line (last item) rd)
	 )
       (close nd)
       (close xd)
       (close yd)
       (close rd)
       )
     )
  (command "._zoom" "_p")
  (princ)
  )
		    
;;==============================================;;
(prompt "\nВ командной строке введите: ics или ICS для записи данных окружностей в файлы")
(prin1)
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 23.06.2010, 15:36
#18
Манасыпов Р.Ф.

Молниезащита зданий и сооружений
 
Регистрация: 27.10.2009
Москва
Сообщений: 23


Что-то выдаёт такой же результат как и предыдущем LISP-е.

Высылаю файлик, попытался описать алгоритм.
Вложения
Тип файла: dwg
DWG 2007
1.dwg (77.6 Кб, 890 просмотров)
__________________
Молниезащита зданий и сооружений.
Манасыпов Р.Ф. вне форума  
 
Непрочитано 23.06.2010, 15:56
#19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Манасыпов Р.Ф., Тогда получается нужна сортировка при одинаковом X не по Y, а по радиусу.
Код:
[Выделить все]
;;==============================================;;
;; Текст рисуется текущим стилем
;; текущей высотой (TEXTSIZE)

(defun C:ics (/ *error* cnt data_list elist en fd
	       nd nomname pt ptlist rad radname
	       rd sset tmp x xd xname y yd yname)

  (defun *error* (msg)
    (if nd (close nd))
    (if xd (close xd))
    (if yd (close yd))
    (if rd (close rd))
    (if msg (princ (strcat "\nError! " msg)))
    (princ)
    )
 ;;==============================================;;
  (defun dxf (key alist)
    (cdr (assoc key alist))
    )
  (defun text-draw (txt pnt height rotation justification)
   (if (null pnt)(command "_.-TEXT" "" txt)
   (if (= (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE"))))
    0.0
       ) ;_ end of =
     (progn
     ;; нулевая высота текста
       (if justification
   (command "_.-TEXT" "_J" justification "_none" pnt height rotation txt)
   (command "_.-TEXT" "_none" pnt height rotation txt)
       ) ;_ end of if
     ) ;_ end of progn
     (progn
       (if justification
   (command "_.-TEXT" "_J" justification "_none" pnt rotation txt)
   (command "_.-TEXT" "_none" pnt rotation txt)
       ) ;_ end of if
     ) ;_ end of progn
   ) ;_ end of if
     )
  (entlast)
)
;;==============================================;;
(setq nomname (strcat (getvar "dwgprefix")"NOM.txt"))
(setq xname (strcat (getvar "dwgprefix")"X.txt"))
(setq yname (strcat (getvar "dwgprefix")"Y.txt"))
(setq radname (strcat (getvar "dwgprefix")"RAD.txt"))
(command "._zoom" "_e")
(if(setq sset (ssget "_X" (list (cons 0 "CIRCLE"))))
  (progn
    (setq nd (open nomname "w"))
    (setq xd (open xname "w"))
    (setq yd (open yname "w"))
    (setq rd (open radname "w"))
    (setq ptlist nil)
       (while (setq en (ssname sset 0))
	 (setq elist (entget en)
	       pt    (dxf 10 elist)
	       x     (car pt)
	       y     (cadr pt)
	       rad   (dxf 40 elist)
	       tmp (list x y rad)
	       ptlist (cons tmp ptlist)
	       )
	 (ssdel en sset)
	 )
       (setq cnt 0)
(setq data_list
       (mapcar (function (lambda (x)
			   (setq cnt (1+ cnt))
			   (text-draw
			     (itoa cnt)
			     (list (car x)(cadr x) 0)
			     (getvar "TEXTSIZE")
			     0
			     "_M"
			     )
			   (list (itoa cnt)
				     (rtos (car x) 2 3)
				     (rtos (cadr x) 2 3)
				     (rtos (caddr x) 2 3)
				     )
				   )
			   )
	(vl-sort (vl-sort ptlist
		 (function
		   (lambda (a b)
		     (or (< (car a) (car b))
			 (and
			   (equal (car a) (car b) 0.00001) ;_Одинаковый X
			   (> (last a) (last b))          ;_Убывание радиуса
			 )
			 )
		     )
		   )
			) (function(lambda(a b)
		         (and
			   (equal (car a) (car b) 0.00001) ;_Одинаковый X
			   (equal (last a) (last b) 0.00001) ;_Одинаковый радиус
			   (< (cadr a) (cadr b)) ;_по возрастанию Y
			 )
		       )
		     )
	 )
		 )
	       )
       (foreach item data_list
	 (write-line (car item) nd)
	 (write-line (cadr item) xd)
	 (write-line (caddr item) yd)
	 (write-line (last item) rd)
	 )
       (close nd)
       (close xd)
       (close yd)
       (close rd)
       )
     )
  (command "._zoom" "_p")
  (princ)
  )
;;==============================================;;
(prompt "\nВ командной строке введите: ics или ICS для записи данных окружностей в файлы")
(prin1)
Код не проверял
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 25.06.2010 в 16:49. Причина: уточнение условий сортировки
VVA вне форума  
 
Автор темы   Непрочитано 23.06.2010, 15:58
#20
Манасыпов Р.Ф.

Молниезащита зданий и сооружений
 
Регистрация: 27.10.2009
Москва
Сообщений: 23


именно, но вот только если радиусы одинаковые первей записывается тот у которого Y меньше
проверяю, пока вроде всё норм, спасибо громадное!

Что скажешь по поводу моего вопроса в личном сообщении?
__________________
Молниезащита зданий и сооружений.

Последний раз редактировалось Манасыпов Р.Ф., 23.06.2010 в 16:03. Причина: +
Манасыпов Р.Ф. вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Экспорт параметров большого количества окружностей в файл .txt

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт совокупности линий полилиний мтекстов и текстов в файл Exсel Red Nova Программирование 9 08.07.2015 15:47
Печать большого количества чертежей Александр79 AutoCAD 26 20.04.2013 10:59
Запись параметров в файл в командном языке COSMOS/M KNA Расчетные программы 6 09.02.2009 15:20