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

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

Чтение координат из файла

Ответ
Поиск в этой теме
Непрочитано 07.07.2010, 13:43 #1
Чтение координат из файла
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Вопрос такой. Можно ли, имея файл, в котором содержатся списки, описывающие полностью примитив (координаты тип линии и тд), брать из него всю эту инфу и отрисовывать это в автокаде?
Просмотров: 10324
 
Непрочитано 07.07.2010, 13:58
#2
hwd

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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Вопрос такой. Можно ли, имея файл, в котором содержатся списки, описывающие полностью примитив (координаты тип линии и тд), брать из него всю эту инфу и отрисовывать это в автокаде?
можно. Ещё в бытность 14-го Автокада, когда в качестве носителя информации были дискеты и объем файла был в связи с этим весьма важным пунктом, я на Лиспе написал команду, которая анализировала все примитивы чертежа, извлекая из них списковую информацию. Полученную строку обрабатывал формируя на её основе вызов функции entmake (убирая лишнюю инфу).
Все полученные т.о. строки программно записывались мною в scr-файл (внешний текстовый файл). После этого scr-файл сжимался архиватором и свободно помещался на дискете. Такой способ позволял существенно сжимать информацию.
На др. компе я запускал на исполнение этот scr-файл, восстанавливая тем самым содержимое чертежа.

Т.е. в вашем случае так же можно преобразовать содержимое так, чтобы оно выглядело как вызов функции entmake, и оформить это в виде scr-файла.
hwd вне форума  
 
Автор темы   Непрочитано 07.07.2010, 14:10
#3
Zaghim


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


Дело за малым, кто поможет такое осуществить?))))))
Zaghim вне форума  
 
Непрочитано 07.07.2010, 14:23
#4
hwd

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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Дело за малым, кто поможет такое осуществить?))))))
Я так понимаю, что "Поможет" = "Напишет"...
Offtop: Пожалуй промолчу, а то и так уже обиженных на меня море...
hwd вне форума  
 
Автор темы   Непрочитано 07.07.2010, 14:26
#5
Zaghim


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


Хотя бы сам процесс всего этого действия. Вообще не врубаюсь, как можно считывать по строчно инфу и колбасить это все в чертеж...
Zaghim вне форума  
 
Непрочитано 07.07.2010, 14:31
#6
hwd

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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Хотя бы сам процесс всего этого действия. Вообще не врубаюсь, как можно считывать по строчно инфу и колбасить это все в чертеж...
построчно считывать не нужно ничего. Автокад сам считывает и создаёт.
Тебе нужно изначально записывать в текстовый файл не просто список, описывающий примитив, а указанную мною команду, которая на основании этого списка создаёт примитив. Только из списка нужно всякое г... убрать (типа ключей). Текстовому файлу дашь расширение scr.

Потом в автокаде запустишь команду _script и укажешь этот файл. Всё вычертится автоматом.
hwd вне форума  
 
Непрочитано 07.07.2010, 14:36
#7
Sad Dog

Ищу работу
 
Регистрация: 12.06.2010
Сообщений: 35


Ну и маленький пример в студию!
Sad Dog вне форума  
 
Непрочитано 07.07.2010, 14:37
#8
hwd

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


Цитата:
Сообщение от Sad Dog Посмотреть сообщение
Ну и маленький пример в студию!
Клоун
hwd вне форума  
 
Непрочитано 07.07.2010, 14:50
#9
Кулик Алексей aka kpblc
Moderator

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


Записывай в dxf - вот и пример готов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.07.2010, 14:55
#10
Sad Dog

Ищу работу
 
Регистрация: 12.06.2010
Сообщений: 35


Алексей, и ты туда же!
Пример в студию!
Sad Dog вне форума  
 
Непрочитано 07.07.2010, 14:59
#11
Кулик Алексей aka kpblc
Moderator

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


Чего пример? Сохранения файла в формате dxf?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.07.2010, 15:00
#12
hwd

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Чего пример? Сохранения файла в формате dxf?
Offtop: не обращай на него внимание, ему на самом деле примеры до лампочки...
hwd вне форума  
 
Непрочитано 07.07.2010, 15:03
#13
Sad Dog

Ищу работу
 
Регистрация: 12.06.2010
Сообщений: 35


Для Алексея.
Да разве об этом человек спрашивает? Просит показать, в каком виде можно хранить в текстовом файле инфу о примитивах, извлекать её программно и строить (восстанавливать) примитивы по ней. Блоки хочет парень делать, описанные в собственном текстовом формате (ИМХО).

Последний раз редактировалось Sad Dog, 07.07.2010 в 15:10.
Sad Dog вне форума  
 
Автор темы   Непрочитано 07.07.2010, 15:21
#14
Zaghim


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


Цитата:
Сообщение от Sad Dog Посмотреть сообщение
Для Алексея.
Да разве об этом человек спрашивает? Просит показать, в каком виде можно хранить в текстовом файле инфу о примитивах, извлекать её программно и строить (восстанавливать) примитивы по ней. Блоки хочет парень делать, описанные в собственном текстовом формате (ИМХО).
Да, именно так
Zaghim вне форума  
 
Автор темы   Непрочитано 07.07.2010, 18:14
#15
Zaghim


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


Ну я же не заставляю, просто прошу немного помочь тому, кому это под силу... вот и всего, так как в этом вообще не разбираюсь
Помоги с чтением координат из файла, это бог с ним, дойду потом... ну или скажи, где посмотреть
Zaghim вне форума  
 
Непрочитано 07.07.2010, 18:25
#16
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Zaghim, это то? Берет данные из текстового файла.
http://www.afralisp.net/dialog-contr...-in-action.php
alex8888 вне форума  
 
Непрочитано 07.07.2010, 20:00
#17
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


если мне не изменяет память, в формате DXF12 можно опустить всё "лишнее" оставив только секцию ENTITIES. сохраните файл в DXF12 откройте его в блокноте и вы увидете как "можно считывать по строчно инфу и колбасить это все в чертеж..." причем считывать и колбасить будет сам автокад, без какого-либо стороннего вмешательства.
А придумывать свои форматы, как и использовать *.SCR имхо не верно
zamtmn вне форума  
 
Непрочитано 07.07.2010, 20:25
#18
Кулик Алексей aka kpblc
Moderator

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


Zaghim, вот тебе пример: есть окружность, центр в точке с координатами в объектной системе координат '(10. 10. 20.), радиус 60.0, система координат объекта - плоскость zOy. Как читать координаты этого объекта из файла?
Или выполни в командной строке такой код:
Код:
[Выделить все]
(entmakex '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline") (90 . 7) (70 . 0) (43 . 0.0) (38 . 16.0) (39 . 10.0) (10 173.885 111.239) (10 224.555 64.5731) (10 278.483 123.177) (10 319.381 160.438) (10 336.753 206.381) (10 233.242 206.381) (10 224.555 23.4763) (210 1.0 0. 0.)))
и расскажи, как и какие координаты читать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.07.2010, 09:46
#19
Zaghim


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


Даже с нарисованными тремя линиями, файл формата dxf получается нереальной простыней. Можно сделать, например такую строку в файле
(20 а1 30 в2 15 а2 30 в1), где я точно знаю, что цифра - это смещение от заданной точки, а а1 - это определенный блок и командой nth как-то в цикле со смещением буду просматривать этот каждый элемент и принимать определенные действия?
Zaghim вне форума  
 
Автор темы   Непрочитано 08.07.2010, 09:49
#20
Zaghim


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


Цитата:
Zaghim, это то? Берет данные из текстового файла.
http://www.afralisp.net/dialog-contr...-in-action.php
alex8888 Прямо в точку, спасибо огромное, теперь буду разбираться и переделывать под себя

Кулик Алексей aka kpblc
В командной строке данный код не сработал(((

Последний раз редактировалось Zaghim, 08.07.2010 в 10:32.
Zaghim вне форума  
 
Непрочитано 08.07.2010, 11:01
#21
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Zaghim,
Цитата:
В командной строке данный код не сработал
почему не сработал, он написал:
Цитата:
<Objektname: 7ffff76b420>
, т.е. объект создал с указанными значениями. 0-тип примитива (облегченная полилиния, 10-точки там всякие -это DXF-коды , стр.844-860 вышеуказанной книги)
alex8888 вне форума  
 
Непрочитано 08.07.2010, 11:25
#22
Кулик Алексей aka kpblc
Moderator

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


В ком.строке код может не сработать - он просто слишком длинный. Его можно попробовать запустить из-под vlide, например - тогда все будет ок. Ну или в lsp-файл загнать и потом этот файл загрузить.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.07.2010, 12:24
#23
Zaghim


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


Ладно, с этим я более-менее разобрался. DXF слишком муторно я думаю...лучше передать такую строку, как писал выше, из которой я сам выцеплю то, что нужно. Пока что всем спасибо за помощь!!!
Zaghim вне форума  
 
Непрочитано 08.07.2010, 13:23
#24
Кулик Алексей aka kpblc
Moderator

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


Zaghim, я говорил не о DXF, а о том, "как с подобного примитива собирать координаты" - тебе же это интересно. Вот распиши, как и какие координаты для указанного примитива будут критичными (только не забудь в 3D чертеж повертеть).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.07.2010, 15:51
#25
Zaghim


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


Не совсем так...мне интересно что бы был файл, в котором определенным образом будет занесена инфа, что нужно разместить на чертеже. Исходными данными на чертеже будут 4 точки (начало-конец и 2 промежуточные). Имея список, я знаю, что он начальной точки например должен провести линию, затем вставить блок, потом опять линию и тд...вот такая задумка.
Zaghim вне форума  
 
Непрочитано 08.07.2010, 15:58
#26
Кулик Алексей aka kpblc
Moderator

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


Ну, раз принципиально не хочется использовать dfx-вариант, придумывай свой формат данных.
P.S. Я тоже когда-то думал, что каждая задача требует индвидуального решения...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.07.2010, 17:07
#27
Zaghim


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


Ну а как же вариант, который прислал alex8888. Там же свои данные, которые потом заносятся в переменные и следуя им рисуется двутавр.
Zaghim вне форума  
 
Непрочитано 08.07.2010, 17:55 В продолжение темы хранения данных в файле и их извлечения оттуда.
#28
Sad Dog

Ищу работу
 
Регистрация: 12.06.2010
Сообщений: 35


Идея, думаю, не нова. На авторство не претендую.
Смеяться можно.

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

Представте себе такой lisp-файл:
Код:
[Выделить все]
; Файл Article0.lsp
(list
  (cons "title" "Изделие 0"); атрибут: название дружественное к пользователю.
  (cons "type" "single"); атрибут: определяет, что файл вставляется целиком, как блок.
  (cons "src" "OffTheSelf\\Article0.dwg"); атрибут: относительный путь к файлу-носителю.
);
Файл содержит информацию о блоке из состава некоторой гипотетической коллекции под общим названием Articles.
Видно, что блок содержится в дочернем каталоге OffTheSelf некоторого корневого каталога базы.
Носителем блока является файл Article0.dwg.
При вставке такого файла примитивы из его пространства модели и формируют описание блока.
Описание получит имя Article0, совпадающее с именем dwg-файла.

А вот другой lisp-файл описания из той же коллекции:
Код:
[Выделить все]
; Файл Article1.lsp
(list
  (cons "name" "art1"); базовая часть имени блока.
  (cons "title" "Изделие 1"); название дружественное к пользователю.
  (cons "type" "select"); выбор по имени из коллекции описаний блоков, хранящихся в файле-носителе.
  (cons "src" "OffTheSelf\\Article1.dwg"); атрибут: относительный путь к файлу-носителю.
  ; Далее идут параметры блока.
  ; Они запрашиваются у пользователя и используются для определения полного имени блока.
  ; Если список параметров отсутствует, то окно запроса не выводится.
  (list
    "params"
    (list; первый параметр:
      "height"
      (cons "title" "Высота"); название, которое увидит пользователь при запросе параметра.
      (cons "type" "string"); тип параметра: в данном случае строковый, но может быть так же целочисленный или действительный.
      (list "enum" "20 см" "40 см"); выбор данного параметра возможен только из указанного перечисления.
    )
    (list; второй параметр:
      "width"
      (cons "title" "Ширина")
      (cons "type" "string")
      (list "enum" "50 см" "70 см")
    )
  );
);
Блок, соответствующий приведенному описанию, содержится в файле Article1.dwg в дочернем
каталоге OffTheSelf корневого каталога базы. Особенность заключается в том, что в Article1.dwg содержатся
описания нескольких блоков с именами, начинающимися на art1. Полное имя формируется приложением
путем конкатенации базового имени со строковым представленим параметров после запроса их у пользователя.

Вот ещё один вариант описания блока из той же коллекции:
Код:
[Выделить все]
; Файл Article2.lsp
(list
  (cons "name" "art2"); базовая часть имени блока.
  (cons "title" "Изделие 2"); название дружественное к пользователю.
  (cons "type" "create"); блок создается програмно ("на лету")
  (cons "src" "OnTheFly\\Article2.lsp"); относительный путь к файлу-носителю.
  ; Далее идут параметры блока.
  ; Они запрашиваются у пользователя, передаются в функцию создания блока, а так же используются для формирования полного имени создаваемого блока.
  (list
    "params"
    (list; первый параметр:
      "length"
      (cons "title" "Длина основания"); название, которое увидит пользователь при запросе параметра.
      (cons "type" "int"); тип параметра.
      (list "range" 200.0 400.0); выбор данного параметра возможен только из указанного диапазона, включая границы.
    )
    (list; второй параметр:
      "width"
      (cons "title" "Ширина основания")
      (cons "type" "string")
      (list "enum" "Скромная" "Средняя" "Огромная")
    )
    (list; третий параметр:
      "thickness"
      (cons "title" "Толщина стали")
      (cons "type" "real")
      (list "enum" 1.0 1.5 2.0)
    )
  );
);
Логическим носителем блока с базовым именем art2 является файл Article2.lsp (файл с кодом)
из каталога OnTheFly корневого каталога базы. Ожидается, что в Article2.lsp содержится
определение функции с именем article2. При вызове этой функции ей передаются три аргумента
с соответствующми значениями парметров. Функция создает описание блока и назначает ему имя,
используя конкатенацию базового имени и строковых представлений выбранных парметров.

Ну и напоследок:
Код:
[Выделить все]
; Файл Article3.lsp
(list
  (cons "title" "Изделие 3"); название дружественное к пользователю.
  (cons "type" "edit"); описание блока редактируется с последующим переименованием.
  (cons "src" "HalfFinished\\Article3.dwg"); относительный путь к файлу-носителю.
  (cons "escort" "HalfFinished\\Article3.lsp"); относительный путь к файлу сопровождения, содержащему функцию редактирования и переименования.
  ; Далее идут параметры блока.
  ; Они запрашиваются у пользователя, передаются в функцию редактировния блока,
  ; а так же используются для формирования полного имени при переименовании блока.
  (list
    "params"
    (list; первый параметр:
      "param"
      (cons "title" "Наличие отверстия")
      (cons "type" "string")
      (list "range" "Есть" "Нет")
    )
  );
);
Блоком является файл Article3.dwg из дочернего каталога HalfFinished корневого каталога базы.
Функция редактирования содержится в файле сопровождения Article3.lsp и называется article3.
При вызове в функцию передается один аргумент с соответствующм значением парметра, указанного пользователем.
Функция редактирует описание блока Article3 переименовывает его, используя конкатенациюя базового имени
и строкового представления парметра.

Представленный набор из четырех файлов (реально их могут быть сотни) объединяется в единое целое
пятым головным файлом:
Код:
[Выделить все]
; ArticlesMain.lsp
; Головной файл базы Articles.
(list
  "Articles"
  (include "Article0.lsp")
  (include "Article1.lsp")
  (include "Article2.lsp")
  (include "Article3.lsp")
);
Ключевая идея заключается в том, чтобы хранить информацию в виде, непосредственно воспринимаемом интерпретатором LISP.
Так, чтобы загружать её штатной функцией LOAD и получать сразу в виде списка, а не преобразуя строки в список,
как чаще всего предлагается. Я назвал бы это внутренне присущей для языка LISP техникой разметки данных -
Lisp Intrinsic Markup Technique (LIMT).
Таким образом, LIMT-документ представляет собой текстовый файл, содержащий код на языке AutoLISP,
при загрузке которого формируется список. В составе кода, формирующего список, может присутствовать
вызов функции include, позволяющей включать в состав документа другие LIMT-документы.
LIMT-документы могут иметь расширение .lsp или любое другое (например .limt).
LIMT-документы, при желании, могут быть скомпилированы и иметь расширение .fas
Круглые скобочки (), list и cons - вот и весь арсенал.

Для поддержки этой техники достаточно написать две крошечных функции (одна из них вложена в другую):
Код:
[Выделить все]
; LimtEngine.lsp
(defun get-limt-document (full_path; полный путь к limt-документу.
              /
              include
              )
  ; Локальное определение функции:
  (defun include (private_path / ) (load (strcat (vl-filename-directory full_path) "\\" (vl-string-trim " \\/" private_path))));
  ;
  (load full_path)
); end defun.
Функция include используется в коде, формирующем список, для вставки данных из другого LIMT-файла.
В качестве аргумента она получает строку с [относительным путём и] именем включаемого файла.
Возвращает список, сформированный кодом из указанного файла и кодом возможных вложенных через
рекурсивный вызов include файлов.

Функция get-limt-document формирует список из набора взаимосвязанных LIMT-документов.
В качестве аргумента получает строку с полным путем к каталогу и именем головного документа.
Все относительные пути, указанные в вызовах (в т.ч. вложенных) include отсчитываются от каталога головного документа.
Функция возвращает окончательный список, сформированный на основе всей иерархии LIMT-файлов.

В прилагаемом архиве содержатся все выше упоминавшиеся файлы. Прочитайте там коротенький ReadMe.txt
и попробуйте сами.
Вложения
Тип файла: rar Limt.rar (5.9 Кб, 59 просмотров)

Последний раз редактировалось Sad Dog, 08.07.2010 в 18:56.
Sad Dog вне форума  
 
Непрочитано 08.07.2010, 18:02
#29
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Sad Dog Посмотреть сообщение
и маленький пример в студию!
Вот простой пример:
Код:
[Выделить все]
(defun cdx-GetInterfaceObject (str / obj)
  (if (vl-catch-all-error-p (setq obj (vl-catch-all-apply 'vla-GetInterfaceObject (list (vlax-get-acad-object) str)))) nil obj)
)

(defun cdx-FileSystem()
	(cdx-GetInterfaceObject "Scripting.FileSystemObject")
)

(defun cdx-ReadTextFile (strFile / strFullName objScr objFile Result)
 (if (setq strFullName(findfile strFile))
  (progn
	(setq
		objScr (cdx-FileSystem)
		objFile(vlax-invoke-method objScr 'OpenTextFile strFullName 1 nil -2)
		Result(vlax-invoke objFile 'ReadAll)
	)
	(vlax-invoke objFile 'Close)
	(mapcar 'vlax-release-object (list objFile objScr))
  )
 )
  Result
)
(defun cdl-string->list (s p / i)
  (cond
	((setq i (vl-string-search p s))
		(cons (substr s 1 i) (cdl-string->list (substr s (+ (strlen p) i 1)) p))
	)
	(T (list s))
  )
)

(defun cdl-csv->list (strFile)
  (if (findfile strFile)
	(mapcar
		'(lambda(x)(cdl-string->list x ","))
		(cdl-string->list (cdx-ReadTextFile strFile) "\r\n")
	)
  )
)
Набираете все, например в Excel, экпортируете в csv, преобразовываете в список... а дальше чего душенька пожелает
gomer вне форума  
 
Непрочитано 08.07.2010, 18:45
#30
Sad Dog

Ищу работу
 
Регистрация: 12.06.2010
Сообщений: 35


Непонял только, почему нельзя было использовать стандартную (open...) из AutoLISP? Чем Scripting.FileSystemObject лучше?
Sad Dog вне форума  
 
Непрочитано 08.07.2010, 23:48
#31
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Sad Dog Посмотреть сообщение
почему нельзя было использовать стандартную (open...) из AutoLISP? Чем Scripting.FileSystemObject лучше?
В таком случае не избежать цикла while и поcтрочного read-line и кстати он имхо быстрее...

Последний раз редактировалось gomer, 08.07.2010 в 23:57.
gomer вне форума  
 
Автор темы   Непрочитано 09.07.2010, 12:11
#32
Zaghim


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


gomer, я вижуал лисп вообще не знаю, только автолисп и то плохо)))
Отсюда вопрос по программе. Где загружается нужное имя файла? Дальше я так понимаю все что внутри читается построчно, убираются запятые и формируется список типа (а1 а2 а3 ... ан)? А в какие переменные они заносятся... или мы их можем брать командой nth? А если число переменных будет различаться... ну например из одного списка нужно вставить 2 линии и два блока, а из другого 5 линий и 4 блока...

Пишет, что очень много аргументов, как ей пользоваться?

Последний раз редактировалось Zaghim, 09.07.2010 в 13:17.
Zaghim вне форума  
 
Непрочитано 09.07.2010, 15:37
#33
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


>Zaghim: алгоритм такой:
есть файл csv? его название передается в cdl-csv->list в качестве аргумента...
cdl-csv->list читает файл с помощью cdx-ReadTextFile причем сразу, так что на выходе строка по типу мтекст (строка разделяется запятыми и "\r\n" по определению... построчного чтения нет
дальше все это дело дробится на список, так что получается:
((а1 а2 а3 ... ан)
(b1 b2 b3 ... bн)
........
)
Остальные вопросы, читай последнюю фразу
А лучше пример подгони... а то ведь не понятно, что ты хочешь...
gomer вне форума  
 
Автор темы   Непрочитано 12.07.2010, 09:44
#34
Zaghim


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


Пример такой, помоему уже писал. Ставлю 4 точки произвольно и от 1 до последней нужно рисовать линию, вставлять блоки и в некоторых местах от линии делать ответвления (т.е. шла линия вниз и от нее нужно вправо или влево. Причем ответвление потом возвращается назад в исходную линию в другом месте (нужно это анализировать как-то)

(дистанция1, имяблока1, дистанция2, имя блока2, дистанция3, ответвление1, дистанция4, имяблока1, ответвление2, дистанция5)

а так должно быть в файле...
(100, блок1, 150, блок2, 70, отв1, 100, блок1, отв2, 80)

Фишка в том, что файл будет только с одной такой строкой, т.е. что бы отрисовать все на этих 4 точках нужно описать в одной строке, а вот элементов может быть разное количество...был пример про чтение, писал алекс, там все круто, но строки все одного типа, а тут всегда разные (кол-во блоков различно, больше или меньше расстояний и тд). И каждый элемент, получается, нужно брать из этого списка и анализировать, т.е. если я вижу, что число иду и рисую линии с отступом от первой точки по направлению к другой, если блок, иду на вставку блока от последней точки.... типа так

Последний раз редактировалось Zaghim, 12.07.2010 в 10:16.
Zaghim вне форума  
 
Непрочитано 12.07.2010, 09:49
#35
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


gomer, в какой переменной или где получается сформированный список? Сама функция прошла успешно (написали nil в конце)
Потом из этого списка выбирать с помощью nth?

Про Scripting.FileSystemObject где-нибудь по русски прочитать можно? Где ни поищу - все английский.

Последний раз редактировалось alex8888, 12.07.2010 в 09:55.
alex8888 вне форума  
 
Автор темы   Непрочитано 12.07.2010, 16:50
#36
Zaghim


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


alex8888, как ты ее запустил?)
Zaghim вне форума  
 
Непрочитано 12.07.2010, 17:20
#37
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Вот так:
(cdx-GetInterfaceObject "g:/drawing/file1.csv")
Прописываешь путь к файлу, вместо \ надо \\ ставить или одну /. Я так назвал свой файл file1.
alex8888 вне форума  
 
Непрочитано 13.07.2010, 00:27
#38
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Ребяты ну вы хоть код посмотрите
Код:
[Выделить все]
  (setq lst (cdl-csv->list "g:/drawing/file1.csv"))
в принципе должен получиться в результате должен список типа
'((100 блок1 150, блок2 70 отв1 100 блок1)
(100 блок1 150, блок2 70 отв1)
;;; ..............
(100 блок1 150, блок2 70 отв1 100 блок1 отв2 80))
Вот так вот...

И вообще есть замечательные фуннции cаr и cdr подходят для обработки любых спиков

с Scripting.FileSystemObject у меня проблем не было, так как читаю на английском свободно
Описание можно найти в справочной системе MSDN

Последний раз редактировалось gomer, 13.07.2010 в 18:11. Причина: убрал лишнюю проверку на наличие файла...
gomer вне форума  
 
Непрочитано 13.07.2010, 10:07
#39
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


gomer, а что, я не правильно вызываю?
Цитата:
(cdx-GetInterfaceObject "g:/drawing/file1.csv")
И все-таки не понял где полученный список. В lst? Надо поискать еще раз. Только не ругайся
alex8888 вне форума  
 
Непрочитано 13.07.2010, 18:07
#40
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Тааак, спокойнооо...
cdx-GetInterfaceObject вызывает сом-сервер и возвращает его в виде vla-объекта (например Excel, Word, Scripting.FileSystemObject) и тд
Аргумент - строка, его индетифицирующая...
"g:/drawing/file1.csv" определяет файл на дисе g в папке drawing с именем file1 и расширением csv и уж ни как не объект Scripting.FileSystemObject естественно (cdx-GetInterfaceObject "g:/drawing/file1.csv") возвратит nil

в данном случае правильно (см. выше):
(cdx-GetInterfaceObject "Scripting.FileSystemObject")
этот объект нужен для работы с файлом ( открытия, чтения и тд)
и наконец список возвращается функцией cdl-csv->list (см. выше еще раз...)
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Чтение координат из файла



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт координат точек из файла съемки тахеометра Trimble M3 в AutoCAD Red Nova Программирование 33 17.05.2011 16:46
структурированный список Holon Программирование 22 11.09.2007 14:09
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47
чтение данных из файла Александер Программирование 6 08.09.2005 10:24