|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Си - сложный язык по сравнению с автолиспом
Проектирование несущих строительных конструкций
Москва
Регистрация: 21.06.2012
Сообщений: 9
|
||
Просмотров: 6943
|
|
||||
Цитата:
Не занимайся извращениями - открой для себя IDictionary<Point3d, Int32> и будет тебе счастье. В качестве ключа - точка, в качестве значения - количество совпадений. Хотя... уточни насчёт "совпадающих элементов"... Тебе количество совпадений нужно, или сгруппированные идентификаторы объектов, у которых нужная тебе точка совпадает?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 22.06.2012 в 00:28. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
![]() ![]() ![]()
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
Вот, для чего это нужно
Есть намерение сделать МКЭ для строительной механики: пре- и постпроцессоры реализовать в автокаде с использованием lsp файлов, а расчетное ядро сделать отдельным exe, общение .exe-шника с автокадом через .txt файлы, записываемые и читаемые через жесткий диск. Первые наработки lsp для подготовки геометрии в автокаде, списков узлов, элементов, ребер, связей, сил (связи и силы еще не сделаны). Вот здесь была трудность - как составить соответствие, например, узлов. После вычленения из набора примитивов очередного узла, как выяснить, этот узел новый, или с такими координатами узел уже есть в списке. На каждом шаге перебирать все имеющиеся в списке на данный момент узлы, это слишком долго для автокада (проверено на практике). Тогда я сделал хитрушку с использованием (eval (read "....")), где в строку собирается выражение (setq ... ...). И в процессе выполнения программы, таким образом, можно создавать переменные с именами, являющимися результатом вычислений. Не только значение переменной является результатом вычислений, но и ее ИМЯ. При таком инструменте можно обработать набор узлов с отбраковкой повторяющихся не за ~ n*n/4, а за ОДИН проход, т. е. за n операций. Берем очередной узел из набора, создаем строку, связанную с координатами узла, например "nameXYZ" (X, Y, Z - конкретные числа), и проверяем значение переменной nameXYZ. Если значение nil, то nameXYZ присваивается значение 1, и в список узлов записывается очередной узел. Работает быстрее, обработка 1000 элементов занимает 50 сек. В приложенном файле примера есть схема. В lsp есть функция po, она создает списки (глобальные переменные) su, se, sr, sre, списки узлов, элементов, ребер, соответствие ребер и элементов соответственно. Вопрос в том, может такие операции лучше делать методами языка СИ? Или если в этом языке такой возможности нет, то простой перебор в exe файле все равно будет быстрее, чем данный lsp?Пример схемы.dwgПодготовка.LSP |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Боюсь спросить сколько тогда медленно? Я более чем уверен, что ты просто накосячил с алгоритмом - распиши что тебе нужно сделать быстро (входные и выходные данные там где загвоздка), ну можещь и свой список привести из 1000 элементов - посмотрим за сколько секунд его удастся обработать.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
Дима_ прав - явные косяки с алгоритмом. Зачем вообще переборы? Про ассоциированные списки в Lisp знаешь? Ведь сам AutoCAD очень быстро выдает запрошенные данные, и не перебирает свою ГБД. Ассоциированный список - это же фактически индексированная таблица в памяти. Если уж задача с обработкой больших объемов данных, которые надо по сути отбирать по какому-то фильтру, да ещё из идеологически противоположных программных систем, можно воспользоваться СУБД. Хотя бы просто (для начала) локальный mdb-файл формата Access. Lisp с ним может работать через ADO посредством SQL-запросов. Данные можно отбирать (из любой системы программирования) также с помощью SQL. Да еще и визуализировать. Объем данных ничем не ограничен, всё выполняется практически мгновенно (если речь не о миллионах записей). И хранятся данные не в памяти, т.е. можно продолжать их обработку в любое время. Наглядный пример быстроты - хотя бы этот форум. Щелкнув по ссылке на этот пост мы передаем в командную строку браузера запрос наподобие Код:
Код:
Последний раз редактировалось ShaggyDoc, 23.06.2012 в 07:02. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Стоп стоп - не путайте человека - индексации ассоацивных списков нет - ищет перебором - хотя конечно делает это достаточно быстро - т.к. в памяти.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
Подкажите, есть ли в C# возможность allocatable (не оговаривать жестко размер) для массивов? Нашел только массив типа a[][], но для него строки хотя и разной длины, но их размеры тоже оговорить надо.
|
|||
![]() |
|
||||
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Можно посмотреть примеры здесь
http://through-the-interface.typepad.com/ http://drive-cad-with-code.blogspot....h-net-api.html http://adndevblog.typepad.com/autocad/ http://www.acadnetwork.com/ http://profile.typepad.com/spiderinnet1 ~'o'~ Последний раз редактировалось Олег (jr.), 25.06.2012 в 00:47. |
|||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
Подскажите, почему не получается сделать запись в файл?
Файл создается, но остается пустым после выполнения программы. Фрагмент в программе такой: char a; a = 'N'; FileStream file1; file1 = new FileStream("D:\\text1.txt", FileMode.Create, FileAccess.Write); StreamWriter fs = new StreamWriter(file1); fs.Write(a); fs.Write(1456.15); fs.Write("sdf2"); |
|||
![]() |
|
||||
Цитата:
Самый простой способ записи текста в файл: Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 07.07.2012 в 22:44. |
||||
![]() |
|
||||
Я не телепат - вижу только то, что ты показываешь.
Не достаточно. Ну ну... ![]() Ну так узнай.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
Вот эта строка
File.WriteAllText(@"c:\test\MyTextFile.txt", "Раз, два, три - проверка связи...", Encoding.UTF8); работает как часы, только не совсем как я хотел. Она вместо всего, что уже есть в файле, записывает что в кавычках. Вот если бы добавлять запись |
|||
![]() |
|
||||
Цитата:
Код:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
можешь на примере моего кода показать как их использовать? Я написал file1.Flush(); file1.Close(); file1.Dilpose(); но это не помогло. В справке нет примера, сказано только для чего они, но это просто определения. А в спецификации языка в содержании я не нашел главы как общаться с файлами. У меня книга Э.А.Ишкова "C# Начала программирования", это от туда методика записи в файл FileStream, StreamWriter, Write. И Flush и Dispose там не использовались
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Основные плюсы AutoCad по сравнению с ArchiCad/ | Saha | AutoCAD | 34 | 23.07.2009 17:05 |