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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Pline по координатам в Excel'e

Pline по координатам в Excel'e

Ответ
Поиск в этой теме
Непрочитано 22.01.2006, 16:20 #1
Pline по координатам в Excel'e
Georg
 
Design
 
Kiev
Регистрация: 27.10.2004
Сообщений: 57

:arrow: Нужно по координатам вычисленным в Excel'e
построить полилинию в АКАДЕ

И такая же задача для сплайна

Кто знает решение такой задачи? помогите

По этой теме нашел такую ссылку
координаты Excel->_line x,y x,y для Acad. нужен макрос на
http://dwg.ru/forum/viewtopic.php?t=3922

Только макрос делает совсем не то что надо :?
Просмотров: 7694
 
Непрочитано 22.01.2006, 20:41 Re: Pline по координатам в Excel'e
#2
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Georg
:arrow: Нужно по координатам вычисленным в Excel'e
построить полилинию в АКАДЕ

И такая же задача для сплайна

Кто знает решение такой задачи? помогите

По этой теме нашел такую ссылку
координаты Excel->_line x,y x,y для Acad. нужен макрос на
http://dwg.ru/forum/viewtopic.php?t=3922

Только макрос делает совсем не то что надо :?
Пробуй:
Данные в ячейках должны быть в числовом формате!
(На базе программы GEO2 Владимира Клещева)
(тестировано в A2005)
Код:
[Выделить все]
(defun EXD (r1 c1 / data excelapp lst path sheet
	    sheet_name_or_number used_range workbook)
  
  (vl-load-com)
    (setq path (getfiled	"Выбрать файл XLS для чтения координат :"
			(getvar "dwgprefix")
			"xls"
			16
	      )
  )
  (setq sheet_name_or_number 1); 1 - первый лист файла Эксель 
  (setq ExcelApp (vlax-get-or-create-object "Excel.Application"))
  (vla-put-visible ExcelApp :vlax-true)
  (setq Workbook (vl-catch-all-apply 'vla-open
		     (list (vlax-get-property ExcelApp "WorkBooks") path)))
		 (setq sheet (vl-catch-all-apply 'vlax-get-property
			       (list (vlax-get-property Workbook "Sheets")
				     "Item" sheet_name_or_number)))
      (vlax-invoke-method sheet "Activate")
          (setq used_range (vlax-get-property ExcelApp 'Range
			     (vlax-make-variant r1) (vlax-make-variant c1))
                lst (vlax-safearray->list (vlax-variant-value
					    (vlax-get-property used_range 'Value))))
(setq data (mapcar (function (lambda (x)
			       (mapcar 'vlax-variant-value x))) lst))

      (vl-catch-all-apply
	'vlax-invoke-method
	(list Workbook "Close")
      )
	(vl-catch-all-apply
	  'vlax-invoke-method
	  (list ExcelApp "Quit")
	)
 (mapcar
    (function (lambda (x)
		(if (not (vlax-object-released-p x))		
		  (vlax-release-object x)
		)
	      )
    )
    (list used_range sheet WorkBook ExcelApp)
  )
  (setq	used_range nil
	sheet nil
	WorkBook nil
	ExcelApp nil
  )
  (gc)
  (gc)
  data
)

;TesT:
(defun C:test ()
  ;; "A1" и "C349" - первая и последняя ячейки диапазона чтения координат
  (setq data (exd "A1" "C349"))
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (command "._pline")
  (apply 'command data)
  (command "")
  (setvar "cmdecho" 1)
  (setvar "osmode" 703)
  (princ)
  )
  (C:test)
~'J'~
fixo вне форума  
 
Непрочитано 22.01.2006, 21:48
#3
Neznayka


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


У вас все так сложно, а я в экселе простой скрипт подготавливаю и в командную строку тупо вставляю.
типа так
_line 161.9,70.4 154.1,85.8

_line 161.7,77.6 155.9,86.3

_line 161.7,77.6 155.9,86.3

а формула выглядит типа так:
=$C$2&" "&C3&" "&F3
и эксель надо настроить так чтоб разделял дроби точками
Neznayka вне форума  
 
Непрочитано 22.01.2006, 22:08
#4
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Neznayka
У вас все так сложно, а я в экселе простой скрипт подготавливаю и в командную строку тупо вставляю.
типа так
_line 161.9,70.4 154.1,85.8

_line 161.7,77.6 155.9,86.3

_line 161.7,77.6 155.9,86.3

а формула выглядит типа так:
=$C$2&" "&C3&" "&F3
и эксель надо настроить так чтоб разделял дроби точками
Как говорят за бугром: Есть много способов содрать шкуру с котяры



~'J'~
fixo вне форума  
 
Непрочитано 23.01.2006, 05:43
#5
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Загляни сюда:
http://dwg.ru/forum/viewtopic.php?t=2829
Krieger вне форума  
 
Непрочитано 20.03.2011, 02:24
#6
Fynjy87


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


Цитата:
Сообщение от fixo Посмотреть сообщение
Пробуй:
Данные в ячейках должны быть в числовом формате!
(На базе программы GEO2 Владимира Клещева)
(тестировано в A2005)
Здравствуйте!

Подскажите, пожалуйста, можно ли сделать такую же программу, но чтобы определенный файл автоматически открывался из той же папки, что и сама программа?

И еще. Я только-только начал знакомиться с лиспом и хотелось бы узнать, какая программа для построения графиков будет проще: по данным из Exсel'я или по данным таблицы автокада, которая синхронизированна с Exсel'ем?
Fynjy87 вне форума  
 
Непрочитано 20.03.2011, 08:55
#7
Олег (jr.)

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


>Подскажите, пожалуйста, можно ли сделать такую же программу, но
>чтобы определенный файл автоматически открывался из той же папки,
>что и сама программа?

Просто нужно жестко прописать имя файла в начале кода, хотя этот
вопрос не совсем понятен, уточни
Можно использовать функцию где аргументами будут имя файла и имя диапазона
напр. из моих старых:
http://forums.autodesk.com/t5/Visual...2174753/page/2

>И еще. Я только-только начал знакомиться с лиспом и хотелось бы
>узнать, какая программа для построения графиков будет проще: по
>данным из Exсel'я или по данным таблицы автокада, которая
>синхронизированна с Exсel'ем?


Прочитать данные из таблицы в Автокаде раза в 2 быстрее

Последний раз редактировалось Олег (jr.), 20.03.2011 в 09:16.
Олег (jr.) вне форума  
 
Непрочитано 20.03.2011, 09:09
#8
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Копируем координаты в текстовый файл (.,.)
Пишем в начале _pline
сохраняем как *.scr
в акаде команда пакет
trir вне форума  
 
Непрочитано 20.03.2011, 11:56
#9
Fynjy87


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


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Просто нужно жестко прописать имя файла в начале кода, хотя этот вопрос не совсем понятен, уточни
Ну, я имел в виду, возможно ли в лиспе задать относительный путь к файлу. И как избавиться от запроса файла для выбора.

Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Прочитать данные из таблицы в Автокаде раза в 2 быстрее
Но раз проще вынуть данные из таблицы, пока буду разбираться с таблицей.

На этом форуме искал пример - не нашел. В сети нашел такую программу для извлечения данных из таблицы с уникальным заголовком:
Код:
[Выделить все]
(setq sel (ssget "_X" (list (cons '0 '"Acad_Table") (cons '1 '"Наш заголовок"))))
(if (> (sslength sel) 0)
  (setq ent (nth 0 sel))
  ;извлекаем данные из ent
);end if
При выполнении выдает такую ошибку:
"; ошибка: неверный тип аргумента: consp <Selection set: 10ae>"
Что это за ошибка?

Я прочитал про все функции, что сюда входят и, вроде, понял принцип работы. Но найти нужные функции не по имени, а по тому, что они должны делать, для меня пока трудно.
Не подскажите, как правильно извлечь данные, если по ним нужно будет построить полилинию или сплайн?
Fynjy87 вне форума  
 
Непрочитано 20.03.2011, 12:23
#10
hwd

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


Fynjy87, х.з. глянь, может такой вариант устроит (видео посмотри, чтобы понять как работает - там два мультика по теме).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 20.03.2011, 12:54
#11
Fynjy87


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


Цитата:
Сообщение от hwd Посмотреть сообщение
Fynjy87, х.з. глянь, может такой вариант устроит (видео посмотри, чтобы понять как работает - там два мультика по теме).
Нет, там все слишком сложно и на .Net. Построение полилинии - это же не все, что нужно будет сделать.
Мне бы понять, как в лиспе данные корректно из таблицы вынуть, а с остальным я уже потихоньку разбираюсь.
Fynjy87 вне форума  
 
Непрочитано 20.03.2011, 14:18
#12
Олег (jr.)

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


Цитата:
Сообщение от Fynjy87 Посмотреть сообщение
Нет, там все слишком сложно и на .Net. Построение полилинии - это же не все, что нужно будет сделать.
Мне бы понять, как в лиспе данные корректно из таблицы вынуть, а с остальным я уже потихоньку разбираюсь.
Попробуй данные получит так:
(давно не пользовалсяб может работает криво)

Код:
[Выделить все]
(vl-load-com)
(defun get-table-contens (/ atable col cols data datum row rows  sset
        start  tmp)
  (prompt "\n\t>>>\tSelect table\t>>>\n")
  (setq sset (ssget "_:S" '((0 . "ACAD_TABLE"))))
  (setq  atable (vlax-ename->vla-object (ssname sset 0))
  cols   (vla-get-columns atable)
  rows   (vla-get-rows atable)
  start  rows
  )
  (if (eq :vlax-true (vla-get-titlesuppressed atable))
    (setq rows (1- rows))
  )
  (if (eq :vlax-true (vla-get-headersuppressed atable))
    (setq rows (1- rows))
  )
  (setq row (- start rows))
  (repeat rows
    (setq col 0)
    (repeat cols
      (setq datum (vla-gettext atable row col))
      (setq tmp (cons datum tmp))
      (setq col (1+ col))
    )
    (setq data (cons (reverse tmp) data)
    tmp  nil
    row  (1+ row)
    )
  )
  (reverse data)
)
Вызов:
Код:
[Выделить все]
(setq data_list (get-table-contens))
Олег (jr.) вне форума  
 
Непрочитано 20.03.2011, 16:40
#13
Fynjy87


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


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Попробуй данные получит так:
(давно не пользовалсяб может работает криво)
Все очень хорошо работает Большое спасибо! Уже сумел поставить в ваш код выбор по заголовку, который нашел в сети

Для полного счастья мне теперь нужно только выяснить, как обратиться к определенной ячейке таблицы)

Пока пытался построить полилинию, оказалось, что данные из таблицы выводятся вот в таком формате:
(("1.0" "6.0") ("2.0" "7.0") ("3.0" "8.0") ("4.0" "9.0") ("5.0" "10.0"))

А для постороения полилинии нужен вот такой:
((1.0 6.0) (2.0 7.0) (3.0 8.0) (4.0 9.0) (5.0 10.0))

Как это исправить, я не знаю.

Последний раз редактировалось Fynjy87, 20.03.2011 в 17:26. Причина: Нашел проблему
Fynjy87 вне форума  
 
Непрочитано 20.03.2011, 21:33
#14
Олег (jr.)

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


Цитата:
Сообщение от Fynjy87 Посмотреть сообщение
Все очень хорошо работает Большое спасибо! Уже сумел поставить в ваш код выбор по заголовку, который нашел в сети

Для полного счастья мне теперь нужно только выяснить, как обратиться к определенной ячейке таблицы)

Пока пытался построить полилинию, оказалось, что данные из таблицы выводятся вот в таком формате:
(("1.0" "6.0") ("2.0" "7.0") ("3.0" "8.0") ("4.0" "9.0") ("5.0" "10.0"))

А для постороения полилинии нужен вот такой:
((1.0 6.0) (2.0 7.0) (3.0 8.0) (4.0 9.0) (5.0 10.0))

Как это исправить, я не знаю.
Например
Код:
[Выделить все]
 (vl-load-com)
(setq table_data '(("1.0" "6.0") ("2.0" "7.0") ("3.0" "8.0") ("4.0" "9.0") ("5.0" "10.0")))
(setq pline_data (mapcar '(lambda(x) (mapcar 'atof x)) table_data))

(vlax-invoke (vla-get-block(vla-get-activelayout
			     (vla-get-activedocument
			       (vlax-get-acad-object))))
  'Addlightweightpolyline
  (apply 'append pline_data))

Последний раз редактировалось Олег (jr.), 20.03.2011 в 22:01.
Олег (jr.) вне форума  
 
Непрочитано 20.03.2011, 22:21
#15
Fynjy87


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


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Например
Все получилось. Еще раз, спасибо! Доволен, как слон
Fynjy87 вне форума  
 
Непрочитано 20.03.2011, 22:40
#16
Олег (jr.)

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


Цитата:
Сообщение от Fynjy87 Посмотреть сообщение
Все получилось. Еще раз, спасибо! Доволен, как слон
Успехов
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Pline по координатам в Excel'e