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

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

координаты из акада в эксель

Ответ
Поиск в этой теме
Непрочитано 16.11.2005, 23:20 #1
координаты из акада в эксель
Работничек
 
Регистрация: 16.11.2005
Сообщений: 2

подскажите пожалуйста, возможна ли такая операция - как, выделив на чертеже несколько точек, получить список их координат и распечатать его, и наоборот, имея список координат (например, в EXSEL) раставить точки в ACAD
Просмотров: 13093
 
Непрочитано 17.11.2005, 01:45
#2
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Возможна. Кто-то с полгода назад выкладывал здесь такую прогу, так что поищи в архиве форума.
Лентяй вне форума  
 
Непрочитано 17.11.2005, 05:39 Re: координаты из акада в эксель
#3
che

Прораб
 
Регистрация: 16.05.2005
Osh
Сообщений: 52


Цитата:
Сообщение от Работничек
...(например, в EXSEL)...
При необходимости в поиск вписать EXCEL.
che вне форума  
 
Непрочитано 17.11.2005, 08:54
#4
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Вот, нашел прогу. Обрабатывает полилинии и засылает информацию в Excel. Мобыть, эт то. что тебе нужно.
Код:
[Выделить все]
;;Forms Excel spreadsheet with PLine vertesis info
(defun pl:apr-to-ex (/ books c ccells cols dat excel k nbook next sheet sheets torel) 
  (if (setq excel (vlax-get-or-create-object "Excel.Application"))
    (progn (setq books  (vlax-get-property excel 'workbooks) 
                 nbook  (vlax-invoke-method books 'add 1) 
                 sheets (vlax-get-property nbook 'worksheets) 
                 sheet  (vlax-get-property nbook 'activesheet) 
                 dat    (pl:get-apr-data) 
                 c      0)
      (princ (strcat "\nПоиск точек завершён. Обработано полилиний: "
		     (itoa (length dat))
		     "\nНачинается сброс данных в Excel. Пожалуйста, ждите!"))
      (foreach v dat
	(princ (strcat "\nПолилиния: " (itoa (setq c (1+ c))) ", узлов: "
		       (rtos (length v) 2 0)))
	(if next (setq torel (cons sheet torel) sheet (vlax-invoke-method sheets 'add)));if
	(setq ccells (vlax-get-property sheet 'cells)
	      cols (vlax-get-property sheet 'columns) i 0);setq
	(foreach y v (setq i (1+ i) k 0)
	  (foreach x y (setq k (1+ k)) (pl:put-real-to-cell ccells i k x)));foreach y
	(vlax-invoke-method cols 'autofit) 
        (vlax-release-object cols) 
        (vlax-release-object ccells) 
        (setq next t)
      );foreach v
      (if torel (vlax-invoke-method (last torel) 'activate))
      (if (= (vlax-get-property excel 'visible) :vlax-false)
	(vlax-put-property excel 'visible :vlax-true))
      (foreach x (cons sheet
		       (if torel (append torel (list sheets nbook books excel))
			 (list sheets nbook books excel)));cons
	(vlax-release-object x));foreach x
    );progn 
    (alert "Не могу запустить Excel!"));if 
);defun
;
(defun pl:get-apr-data (/ how res sel step)
  (initget "Axi Length") 
  (setq how (getkword "\nСпособ апроксимации [Length/Axi] <Axi>: ")) 
  (initget 7)
  (setq step (getreal "\nШаг апроксимации: ") 
        sel  (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) 
  (vla-clear sel)
  (pl:ent-obj-selectonscreen sel "*POLYLINE") 
  (vlax-for i sel (setq res (cons (if (= how "Length")(pl:aprox-lwpl-bylen i step)
				    (pl:aprox-lwpl-byaxi i step)) res)));vlax-for 
);defun 
;
(defun pl:aprox-lwpl-bylen (curve step / dist res tmp) 
  (setq dist 0) 
  (while (setq tmp (vlax-curve-getpointatdist curve dist)) 
    (setq dist (+ dist step) res  (cons tmp res)));while 
  (reverse res)
);defun 
;
(defun pl:aprox-lwpl-byaxi (curve step / axi box doc lay lock res space start stop) 
  (setq doc   (vla-get-document curve) 
        lay   (vla-get-activelayer doc) 
        space (vla-objectidtoobject doc (vla-get-ownerid curve)) 
        box   (vla-getboundingbox curve 'start 'stop) 
        start (car (vlax-safearray->list start)) 
        stop  (car (vlax-safearray->list stop)));setq 
  (if (= :vlax-true (vla-get-lock lay)) (progn (vla-put-lock lay :vlax-false) (setq lock t)));if 
  (while (<= start stop) 
    (setq axi (vla-addxline space (vlax-3d-point (list start 0.0))
		(vlax-3d-point (list start 1.0)))
          res   (cons (pl:lst-to-lsts (vlax-safearray->list (vlax-variant-value
					(vla-intersectwith axi curve acextendnone))) 3) res) 
          start (+ start step)) 
    (vla-delete axi));while
  (if lock (vla-put-lock lay :vlax-true)) 
  (mapcar 'cdr (vl-sort
      (mapcar '(lambda (a) (cons (vlax-curve-getparamatpoint curve a) a)) (apply 'append res));mapcar
      '(lambda (a b) (< (car a) (car b)))));mapcar
);defun 
;
(defun pl:lst-to-lsts (lst modul / _pl:lst-to-lsts)
  (defun _pl:lst-to-lsts (slst i mod / tmp) 
    (cond ((not slst) nil) 
          ((zerop i) (cons (list (car slst)) (_pl:lst-to-lsts (cdr slst) mod mod))) 
          (t (setq tmp (_pl:lst-to-lsts (cdr slst) (1- i) mod))
	   (cons (cons (car slst) (car tmp)) (cdr tmp))));cond
  );drfun
  (_pl:lst-to-lsts lst (1- modul) (1- modul)) 
);dfun
;
(defun pl:ent-obj-selectonscreen (sel enttype)
  (vla-selectonscreen sel 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0)) 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list enttype))) 
);defun
;
(defun pl:put-real-to-cell (ccells x y val)
  (vlax-put-property (vlax-variant-value (vlax-get-property ccells 'item 
        (vlax-make-variant x vlax-vbinteger) (vlax-make-variant y vlax-vbinteger))) 
    "Value2" (vlax-make-variant val vlax-vbdouble)) 
);defun
;
(vl-load-com)
;
(defun c:aprex ()
  (pl:apr-to-ex) (princ)
);end
Лентяй вне форума  
 
Непрочитано 17.11.2005, 11:44 Re: координаты из акада в эксель
#5
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Цитата:
Сообщение от Работничек
выделив на чертеже несколько точек, получить список их координат и распечатать его, и наоборот, имея список координат (например, в EXSEL) раставить точки в ACAD
ToolPac -> Utility->Point Export(Import)
ытя вне форума  
 
Непрочитано 17.11.2005, 12:35
#6
sv4


 
Регистрация: 01.09.2005
Сообщений: 102
<phrase 1=


можно через Лиру (Lira)
sv4 вне форума  
 
Автор темы   Непрочитано 17.11.2005, 21:37
#7
Работничек


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


спасибо тебе премногоуважаемый Лентяй, отличная программа. так как я не специалист в акаде, пытался в течении часа куда нибудь пристроить эту прогу ,но ничего не получилось. Подскажи пожалуйста
Работничек вне форума  
 
Непрочитано 18.11.2005, 10:16
#8
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Ох, Работничек, и ы кого ты только у нас такой трудолюбивый!
Это ж надо же ж - целый час мудохаться и не заглянуть в книжку, на худой уонец - в Help. Ладно уж, лови инстрюкцию, сиречь руководство к действию.
1. Запускаешь в АвтоКАДе VLISP-редактор командой VLIDE и открываешь в нем новый файл.
2. Копи-пастаешь кодовый кусок в окно нового файла.
3. Командой SaveAS сохраняешь этот файл под любыи именем aprex.lsp в любом понравившемся тебе месте.
4. Закрываешь на хрен VLISP редактор.
5. Командой APPLOAD загружаешь файл aprex.lsp в АвтоКАД.
6. С командной строки запускаешь программу.
7. Если какие проблемы, берешь в руки "Руководство Пользователя" и внимательно, я повторяю - ВНИМАТЕЛЬНО, читаешь соответствующий раздел, после чего повторяешь все действия, как написано в умной книжке.
Успеха!
Да, ниже - немного модифицированный код, чтобф вытаскивать координаты вершин напрямую.
Код:
[Выделить все]
;;Forms Excel spreadsheet with PLine vertesis info

(defun pl:apr-to-ex (/ books c ccells cols dat excel k nbook next sheet sheets torel) 
  (if (setq excel (vlax-get-or-create-object "Excel.Application"))
    (progn (setq books  (vlax-get-property excel 'workbooks) 
                 nbook  (vlax-invoke-method books 'add 1) 
                 sheets (vlax-get-property nbook 'worksheets) 
                 sheet  (vlax-get-property nbook 'activesheet) 
                 dat    (pl:get-apr-data) 
                 c      0)
      (princ (strcat "\nПоиск точек завершён. Обработано полилиний: "
		     (itoa (length dat))
		     "\nНачинается сброс данных в Excel. Пожалуйста, ждите!"))
      (foreach v dat
	(princ (strcat "\nПолилиния: " (itoa (setq c (1+ c))) ", узлов: "
		       (rtos (length v) 2 0)))
	(if next (setq torel (cons sheet torel) sheet (vlax-invoke-method sheets 'add)));if
	(setq ccells (vlax-get-property sheet 'cells)
	      cols (vlax-get-property sheet 'columns) i 0);setq
	(foreach y v (setq i (1+ i) k 0)
	  (foreach x y (setq k (1+ k)) (pl:put-real-to-cell ccells i k x)));foreach y
	(vlax-invoke-method cols 'autofit) 
        (vlax-release-object cols) 
        (vlax-release-object ccells) 
        (setq next t)
      );foreach v
      (if torel (vlax-invoke-method (last torel) 'activate))
      (if (= (vlax-get-property excel 'visible) :vlax-false)
	(vlax-put-property excel 'visible :vlax-true))
      (foreach x (cons sheet
		       (if torel (append torel (list sheets nbook books excel))
			 (list sheets nbook books excel)));cons
	(vlax-release-object x));foreach x
    );progn 
    (alert "Не могу запустить Excel!"));if 
);defun
;
(defun pl:get-apr-data (/ how res sel step)
  (initget "Axi Length Vertces") 
  (setq how (getkword "\nСпособ апроксимации [Length/Axi/Vertces] <Vertces>: ")) 
  (initget 7)
  (if (/= how "Vertces") (setq step (getreal "\nШаг апроксимации: ")))
  (setq sel  (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) 
  (vla-clear sel)
  (pl:ent-obj-selectonscreen sel "*POLYLINE") 
  (vlax-for i sel
    (setq res (cons (cond ((= how "Length")(pl:aprox-lwpl-bylen i step))
                          ((= how "Axi") (pl:aprox-lwpl-byaxi i step))
                          ((= how "Vertces") (pl:aprox-lwpl-byvert i)));cond
             res)));vlax-for 
);defun 
;
(defun pl:aprox-lwpl-byvert (curve / temp res)
  (setq coor (vlax-get curve 'Coordinates))
  (while coor (setq temp (list (car coor) (cadr coor) 0.0)
                    coor (cddr coor)
                    res (cons temp res)));while
  (reverse res) 
);dwfun
;
(defun pl:aprox-lwpl-bylen (curve step / dist res tmp) 
  (setq dist 0) 
  (while (setq tmp (vlax-curve-getpointatdist curve dist)) 
    (setq dist (+ dist step) res  (cons tmp res)));while 
  (reverse res)
);defun 
;
(defun pl:aprox-lwpl-byaxi (curve step / axi box doc lay lock res space start stop) 
  (setq doc   (vla-get-document curve) 
        lay   (vla-get-activelayer doc) 
        space (vla-objectidtoobject doc (vla-get-ownerid curve)) 
        box   (vla-getboundingbox curve 'start 'stop) 
        start (car (vlax-safearray->list start)) 
        stop  (car (vlax-safearray->list stop)));setq 
  (if (= :vlax-true (vla-get-lock lay)) (progn (vla-put-lock lay :vlax-false) (setq lock t)));if 
  (while (<= start stop) 
    (setq axi (vla-addxline space (vlax-3d-point (list start 0.0))
		(vlax-3d-point (list start 1.0)))
          res   (cons (pl:lst-to-lsts (vlax-safearray->list (vlax-variant-value
	(vla-intersectwith axi curve acextendnone))) 3) res) 
          start (+ start step)) 
    (vla-delete axi));while
  (if lock (vla-put-lock lay :vlax-true)) 
  (mapcar 'cdr (vl-sort
      (mapcar '(lambda (a) (cons (vlax-curve-getparamatpoint curve a) a)) (apply 'append res));mapcar
      '(lambda (a b) (< (car a) (car b)))));mapcar
);defun 
;
(defun pl:lst-to-lsts (lst modul / _pl:lst-to-lsts)
  (defun _pl:lst-to-lsts (slst i mod / tmp) 
    (cond ((not slst) nil) 
          ((zerop i) (cons (list (car slst)) (_pl:lst-to-lsts (cdr slst) mod mod))) 
          (t (setq tmp (_pl:lst-to-lsts (cdr slst) (1- i) mod))
	   (cons (cons (car slst) (car tmp)) (cdr tmp))));cond
  );drfun
  (_pl:lst-to-lsts lst (1- modul) (1- modul)) 
);dfun
;
(defun pl:ent-obj-selectonscreen (sel enttype)
  (vla-selectonscreen sel 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0)) 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list enttype))) 
);defun
;
(defun pl:put-real-to-cell (ccells x y val)
  (vlax-put-property (vlax-variant-value (vlax-get-property ccells 'item 
        (vlax-make-variant x vlax-vbinteger) (vlax-make-variant y vlax-vbinteger))) 
    "Value2" (vlax-make-variant val vlax-vbdouble)) 
);defun
;
(vl-load-com)
;
(defun c:aprex ()
  (pl:apr-to-ex) (princ)
);end
Лентяй вне форума  
 
Непрочитано 01.08.2011, 07:57
#9
Андрей Токарев


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


Цитата:
Сообщение от Лентяй Посмотреть сообщение
6. С командной строки запускаешь программу.
7. Если какие проблемы, берешь в руки "Руководство Пользователя" и внимательно, я повторяю - ВНИМАТЕЛЬНО, читаешь соответствующий раздел, после чего повторяешь все действия, как написано в умной книжке.
До 6 пункта все норм получилось, но вот запуск программы из командной строки не получается(((.
Пытаюсь сделать через создание кнопки в панеле инструментов: "Сервис" - "Адаптация" - "Интерфейс".
Создаю новую команду напрм. "ЗПРИЛ1" Что конкретно нужно написать в поле "Макросы"? Про путь к файлу понятно, а вод до него что прописать нужно (^C^C ...???...). Или может еще проще как то можно сделать?

Помогите пожалуйста разобраться!
Андрей Токарев вне форума  
 
Непрочитано 01.08.2011, 08:49
#10
Сергей Богатов


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


_dataextraction
__________________
Я-проектировщик бывший проектировщик!
Сергей Богатов вне форума  
 
Непрочитано 01.08.2011, 09:12
#11
VVA

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


Аutocad 2011 "извлечение данных" из полилинии
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.08.2011, 11:37
#12
Андрей Токарев


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


Цитата:
Сообщение от Сергей Богатов Посмотреть сообщение
_dataextraction
Пишет, что не знает такой команды((( Работаю в AutoCad 2006 версии, может эта команда для более поздних версий?
Андрей Токарев вне форума  
 
Непрочитано 02.08.2011, 11:40
#13
Сергей Богатов


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


Цитата:
Сообщение от Андрей Токарев Посмотреть сообщение
Пишет, что не знает такой команды((( Работаю в AutoCad 2006 версии, может эта команда для более поздних версий?
Нужно поновее. Причём этим можно сделать только первое условие - из автокада в Excel. Обратно нельзя (не до конца прочитал условие задачи). Втрое условие - через программирование. Штатных средств я не знаю
__________________
Я-проектировщик бывший проектировщик!
Сергей Богатов вне форума  
 
Непрочитано 02.08.2011, 12:38
#14
VVA

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


Андрей Токарев, ПОсмотри по ссылке #11. Там в #7 посте собран перечень как передать в Excel, а по этой ссылке Построение чертежа по данным Excel как прочитать из Excel
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.08.2011, 13:57
#15
n0str0m0

геолог
 
Регистрация: 02.09.2009
Тында, Дальний Восток
Сообщений: 413
<phrase 1=


Наверное самое простое - программа CadTools http://www.glamsen.se/CadTools.htm
n0str0m0 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > координаты из акада в эксель