|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Чтение координат из файла
Регистрация: 01.07.2010
Сообщений: 521
|
||
Просмотров: 10324
|
|
||||
Цитата:
Все полученные т.о. строки программно записывались мною в scr-файл (внешний текстовый файл). После этого scr-файл сжимался архиватором и свободно помещался на дискете. Такой способ позволял существенно сжимать информацию. На др. компе я запускал на исполнение этот scr-файл, восстанавливая тем самым содержимое чертежа. Т.е. в вашем случае так же можно преобразовать содержимое так, чтобы оно выглядело как вызов функции entmake, и оформить это в виде scr-файла. |
||||
![]() |
|
||||
Цитата:
Тебе нужно изначально записывать в текстовый файл не просто список, описывающий примитив, а указанную мною команду, которая на основании этого списка создаёт примитив. Только из списка нужно всякое г... убрать (типа ключей). Текстовому файлу дашь расширение scr. Потом в автокаде запустишь команду _script и укажешь этот файл. Всё вычертится автоматом. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Записывай в dxf - вот и пример готов.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Чего пример? Сохранения файла в формате dxf?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Ищу работу Регистрация: 12.06.2010
Сообщений: 35
|
Для Алексея.
Да разве об этом человек спрашивает? Просит показать, в каком виде можно хранить в текстовом файле инфу о примитивах, извлекать её программно и строить (восстанавливать) примитивы по ней. Блоки хочет парень делать, описанные в собственном текстовом формате (ИМХО). Последний раз редактировалось Sad Dog, 07.07.2010 в 15:10. |
|||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
Цитата:
![]() |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Zaghim, это то? Берет данные из текстового файла.
http://www.afralisp.net/dialog-contr...-in-action.php |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
если мне не изменяет память, в формате DXF12 можно опустить всё "лишнее" оставив только секцию ENTITIES. сохраните файл в DXF12 откройте его в блокноте и вы увидете как "можно считывать по строчно инфу и колбасить это все в чертеж..." причем считывать и колбасить будет сам автокад, без какого-либо стороннего вмешательства.
А придумывать свои форматы, как и использовать *.SCR имхо не верно |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Zaghim, вот тебе пример: есть окружность, центр в точке с координатами в объектной системе координат '(10. 10. 20.), радиус 60.0, система координат объекта - плоскость zOy. Как читать координаты этого объекта из файла?
Или выполни в командной строке такой код: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
Даже с нарисованными тремя линиями, файл формата dxf получается нереальной простыней. Можно сделать, например такую строку в файле
(20 а1 30 в2 15 а2 30 в1), где я точно знаю, что цифра - это смещение от заданной точки, а а1 - это определенный блок и командой nth как-то в цикле со смещением буду просматривать этот каждый элемент и принимать определенные действия? |
|||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
Цитата:
![]() Кулик Алексей aka kpblc В командной строке данный код не сработал((( Последний раз редактировалось Zaghim, 08.07.2010 в 10:32. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Zaghim,
Цитата:
Цитата:
![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
В ком.строке код может не сработать - он просто слишком длинный. Его можно попробовать запустить из-под vlide, например - тогда все будет ок. Ну или в lsp-файл загнать и потом этот файл загрузить.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Zaghim, я говорил не о DXF, а о том, "как с подобного примитива собирать координаты" - тебе же это интересно. Вот распиши, как и какие координаты для указанного примитива будут критичными (только не забудь в 3D чертеж повертеть).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
Не совсем так...мне интересно что бы был файл, в котором определенным образом будет занесена инфа, что нужно разместить на чертеже. Исходными данными на чертеже будут 4 точки (начало-конец и 2 промежуточные). Имея список, я знаю, что он начальной точки например должен провести линию, затем вставить блок, потом опять линию и тд...вот такая задумка.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ну, раз принципиально не хочется использовать dfx-вариант, придумывай свой формат данных.
P.S. Я тоже когда-то думал, что каждая задача требует индвидуального решения...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Ищу работу Регистрация: 12.06.2010
Сообщений: 35
|
Идея, думаю, не нова. На авторство не претендую.
Смеяться можно. Пусть имеется некое условно существующее приложение, предоставляющее пользователям AutoCAD удобный способ выбора и вставки в чертеж блоков из тематически организованных коллекций. Информационную поддержку одной из таких коллекций можно организовать следующим образом. Представте себе такой lisp-файл: Код:
Видно, что блок содержится в дочернем каталоге OffTheSelf некоторого корневого каталога базы. Носителем блока является файл Article0.dwg. При вставке такого файла примитивы из его пространства модели и формируют описание блока. Описание получит имя Article0, совпадающее с именем dwg-файла. А вот другой lisp-файл описания из той же коллекции: Код:
каталоге OffTheSelf корневого каталога базы. Особенность заключается в том, что в Article1.dwg содержатся описания нескольких блоков с именами, начинающимися на art1. Полное имя формируется приложением путем конкатенации базового имени со строковым представленим параметров после запроса их у пользователя. Вот ещё один вариант описания блока из той же коллекции: Код:
из каталога OnTheFly корневого каталога базы. Ожидается, что в Article2.lsp содержится определение функции с именем article2. При вызове этой функции ей передаются три аргумента с соответствующми значениями парметров. Функция создает описание блока и назначает ему имя, используя конкатенацию базового имени и строковых представлений выбранных парметров. Ну и напоследок: Код:
Функция редактирования содержится в файле сопровождения Article3.lsp и называется article3. При вызове в функцию передается один аргумент с соответствующм значением парметра, указанного пользователем. Функция редактирует описание блока Article3 переименовывает его, используя конкатенациюя базового имени и строкового представления парметра. Представленный набор из четырех файлов (реально их могут быть сотни) объединяется в единое целое пятым головным файлом: Код:
Так, чтобы загружать её штатной функцией LOAD и получать сразу в виде списка, а не преобразуя строки в список, как чаще всего предлагается. Я назвал бы это внутренне присущей для языка LISP техникой разметки данных - Lisp Intrinsic Markup Technique (LIMT). Таким образом, LIMT-документ представляет собой текстовый файл, содержащий код на языке AutoLISP, при загрузке которого формируется список. В составе кода, формирующего список, может присутствовать вызов функции include, позволяющей включать в состав документа другие LIMT-документы. LIMT-документы могут иметь расширение .lsp или любое другое (например .limt). LIMT-документы, при желании, могут быть скомпилированы и иметь расширение .fas Круглые скобочки (), list и cons - вот и весь арсенал. ![]() Для поддержки этой техники достаточно написать две крошечных функции (одна из них вложена в другую): Код:
В качестве аргумента она получает строку с [относительным путём и] именем включаемого файла. Возвращает список, сформированный кодом из указанного файла и кодом возможных вложенных через рекурсивный вызов include файлов. Функция get-limt-document формирует список из набора взаимосвязанных LIMT-документов. В качестве аргумента получает строку с полным путем к каталогу и именем головного документа. Все относительные пути, указанные в вызовах (в т.ч. вложенных) include отсчитываются от каталога головного документа. Функция возвращает окончательный список, сформированный на основе всей иерархии LIMT-файлов. В прилагаемом архиве содержатся все выше упоминавшиеся файлы. Прочитайте там коротенький ReadMe.txt и попробуйте сами. Последний раз редактировалось Sad Dog, 08.07.2010 в 18:56. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
В таком случае не избежать цикла while и поcтрочного read-line и кстати он имхо быстрее...
Последний раз редактировалось gomer, 08.07.2010 в 23:57. |
|||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
gomer, я вижуал лисп вообще не знаю, только автолисп и то плохо)))
Отсюда вопрос по программе. Где загружается нужное имя файла? Дальше я так понимаю все что внутри читается построчно, убираются запятые и формируется список типа (а1 а2 а3 ... ан)? А в какие переменные они заносятся... или мы их можем брать командой nth? А если число переменных будет различаться... ну например из одного списка нужно вставить 2 линии и два блока, а из другого 5 линий и 4 блока... Пишет, что очень много аргументов, как ей пользоваться? Последний раз редактировалось Zaghim, 09.07.2010 в 13:17. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
>Zaghim: алгоритм такой:
есть файл csv? его название передается в cdl-csv->list в качестве аргумента... cdl-csv->list читает файл с помощью cdx-ReadTextFile причем сразу, так что на выходе строка по типу мтекст (строка разделяется запятыми и "\r\n" по определению... построчного чтения нет дальше все это дело дробится на список, так что получается: ((а1 а2 а3 ... ан) (b1 b2 b3 ... bн) ........ ) Остальные вопросы, читай последнюю фразу ![]() А лучше пример подгони... а то ведь не понятно, что ты хочешь... |
|||
![]() |
|
||||
Регистрация: 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. |
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
gomer, в какой переменной или где получается сформированный список? Сама функция прошла успешно (написали nil в конце
![]() Потом из этого списка выбирать с помощью nth? Про Scripting.FileSystemObject где-нибудь по русски прочитать можно? Где ни поищу - все английский. Последний раз редактировалось alex8888, 12.07.2010 в 09:55. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Ребяты
![]() ![]() Код:
'((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. Причина: убрал лишнюю проверку на наличие файла... |
|||
![]() |
|
||||
строю, ломаю Регистрация: 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 (см. выше еще раз...) ![]() |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Импорт координат точек из файла съемки тахеометра 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 |