| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Виноват. Начнём по порядку. Чтобы без всяких яких и с понятными обозначениями функций.
Вот весь код: Код:
Выделяем отрезки (полученный из взорванной полилинии или нескольких, наложенных друг на друга), получаем координаты их начала и конца, загоняем координаты в список вида ((1.002 2.01 0) (4.04 2.07 0) ... ), дальше сортируем координаты точек внутри списка таким образом, чтобы по ним можно было нарисовать полилинию, не пересекающую саму себя. То есть, берётся первая точка - элемент из списка, и среди оставшихся точек-элементов выбирается ближайшая к ней. и т.д. Потом рисуем по этим точкам полилинию. Но сейчас оно не работает. Функция для сортировки списка координат точек стопорится, когда встречает вещественное число с плавающей точкой. Материалы взяты отсюда Формирование списка - http://forum.dwg.ru/showpost.php?p=1...postcount=3269 Сортировка списка - http://www.cadtutor.net/forum/showth...l=1#post417660 |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
(setq dots_set (sort (dots_set)))
и (setq dots_set (sort dots_set)) Разные вещи. ----- добавлено через ~2 мин. ----- И чем тебе так не угодил _.pedit?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Вариант без командных методов:
Код:
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Цитата:
Теперь попробую добавить указание крайней точки полилинии + прикручу прополку. ----- добавлено через ~1 ч. ----- Ну, в общем, рабочий код получен. Алексею большое спасибо! Код:
Для прополки полилинии проще всего использовать встроенную команду в автокаде или PL-VxRdc из https://dwg.ru/dnl/607 . Не стал эту красоту своими ручонками кромсать. Да и зачем, когда есть корпоративные стандарты двжру? Дальше буду пробовать использовать различные варианты кода и сравнивать их по быстродействию (в некомпилированном виде). Ещё буду разбирать по существу отдельные строчки кода. А то порой кажется, что шмель летать не должен так оно в принципе невозможно. А оно работает и плюёт на Enik'а. Наверное, это особенности AutoLisp. Интересный язык, однако. Последний раз редактировалось Enik, 03.03.2017 в 17:08. |
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
Есть необходимость доработать автоматическое заполнение таблицы автокад в виде спецификации. На просторах Рунета нашел отличный код, который позволяет делать спецификацию для выбранных элементов, теперь необходимо, чтобы вместо имени блока в строку наименование, он прописывал название видимости, а в столбцы "наименование" и "гайки" прописывал соответвующие атрибуты, в столбец "длина" прописывал длину если таковая есть. Догадываюсь что сделать это весьма несложно, но в LISP-программировании я нуб. Буду благодарен за любую помощь.
Еще интересует возможность доработки данного LIPS для создания аналогичной таблицы во внешний EXEL-файл. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,039
|
Вы выбрали неплохой пример, чтобы начать изучать LISP. Насколько вижу, в данном лиспе есть все необходимые для озвученной задачи примеры - получение атрибутов, состояния видимости, вставка и заполнения таблицы и т.д. Как выгрузить данные в эксель - примеров тоже более чем достаточно - например. И напоминаю про ветку для новичков в лиспе.
|
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
Добрый день, отписался в новой теме, но меня перенаправили сюда:
Есть необходимость доработать автоматическое заполнение таблицы автокад в виде спецификации. На просторах Рунета нашел отличный код, который позволяет делать спецификацию для выбранных элементов, теперь необходимо, чтобы вместо имени блока в строку наименование, он прописывал название видимости, а в столбцы "наименование" и "гайки" прописывал соответствующие атрибуты, в столбец "длина" прописывал длину если таковая есть. Догадываюсь что сделать это весьма несложно, но в LISP-программировании я нуб. Буду благодарен за любую помощь. P.S. Еще интересует возможность доработки данного LIPS для создания аналогичной таблицы во внешний EXEL-файл. В данный момент LISP код читает только блоки первого уровня, любопытно рассмотреть вариант выгрузки в таблицу блоков вложенных в другие блоки. Код:
Код:
|
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Это же моя программа отсюда, только кем то переделаная
http://forum.dwg.ru/showthread.php?t=132979 Имя блока вставляется только для тех блоков, к которым не была ранее применена функция setspecification С помощью команды setspecification можно настроить любой блок, что бы он в спецификацию что угодно выдавал. Можно в строки "Название", "Код", "кол-во" вставлять autolisp код, который будет возвращать нужную информацию. В момент исполнения функции specification этот код из блоков исполнится и вставит в таблицу то что нужно. Например у меня в блоках вставлены такие строки: Код:
Код:
Скинь свои блоки и укажи, что должно выдаваться в спецификации, я попробую сделать для примера один или 2 блока тебе. Последний раз редактировалось valerik88, 21.03.2017 в 12:41. |
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
valerik88, а можешь расписать что куда именно прописать нужно(хочется самому научится ловить рыбу, т.е. попробовать понять ка как это работает, чтобы если необходимо будет внести какие-то корректировки самому можно было сделать), передо мной стоит задача - сделать чтобы несколько кнопок, которые немного ускорят мою работу:, т.е. хочу добавить потом ещё 2 аналогичные команды, отличатся будут они только определенным атрибутом - в столбце артикул. Но это все лирика, сейчас подробнее по примеру:
Нужно чтобы в столбец "обозначение" прописывалась "видимость" блока, в столбец "артикул" атрибут "_Article_galv", В столбец "длина" соответственно длина блока(если есть), ещё наверное условие какое-то нужно сделать, чтобы отдельно считались и нумеровались одинаковые блоки с разной длиной, также вопросы по lisp-таблице, как шрифт на программном уровне поменять и сделать чтобы длину таблицы не нужно было показывать а только точку вставки, длина автоматически по ГОСТ 1850мм. |
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Sergey91@06, Вот сделал для примера 1 блок
Что бы всё понять, примени команду setspecification для блока, увидишь, что каждое поле вычисляется отдельным кодом: Для наименования - ((LM:getvisibilitystate vla)) вставляет в спецификацию значение видимости блока для кода - ((getpropertyvalue name "AcDbDynBlockProperty_Article_galv")) - вставляет атрибут _Article_galv для единиц измерения - ((rtos (getpropertyvalue name "AcDbDynBlockPropertyРасстояние5") 2 0)) - вставляет длину консоли В твоей программе добавлены столбцы Длина и Гайка, но в программе в них ни чего не заносится, поэтому для примера я вставил в поле Ед.изм. значение длины. Что бы вставлялось в нужное поле, придётся программу дорабатывать, но это время, поэтому я только советом помочь смогу. Стоит отметить, что программа не совсем безопасна, т.к. в блок можно добавить любой код, который выполнится при использовании команды specification, поэтому предполагается, что программа для личного пользования и брать чужие блоки не безопасно. Цитата:
Код:
Цитата:
Код:
Цитата:
Последний раз редактировалось valerik88, 22.03.2017 в 10:58. |
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
valerik88, спасибо огромное за разъяснения. в общем и целом понял как работает данный LISP(т.е. есть несколько переменных которым мы даем соответствующие значения атрибута, после чего выводим в таблицу), программа очень хорошая, но меня как я теперь понял интересуют более простые и приземленные вещи. Например есть у меня база блоков, штук 300, я переименовываю в них атрибуты, чтобы одинаково назывались: _visibility, _lenght, _article_galv и другое. А потом выполняю команду: и как итог имею таблицу, где элементы автоматически нумеруются(притом если у элементов с одинаковыми атрибутами _visibility, _article_galv отличается параметр _lenght, то это должна быть уже другая позиция) и в столбец "наименование" попадает значение атрибута _visibility, "длина"(если есть) - _lenght, _article_galv - "артикул". Насколько я понимаю в таком случае LISP не будет запускать никакие LISP или макросы прописанные в блоки, что является более безопасным. Если встречалось что-то подобное или есть понимание как это реализовать, то буду крайне благодарен
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Sergey91@06, ты не пробовал attin / attout или его аналог?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,039
|
Цитата:
|
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
Кулик Алексей aka kpblc, идея близка, но все же не то, т.к. у моих блоков могут быть и 10 атрибутов например, но выгружать на команду он должен только определенные, названия которых я прописываю в коде. И я хочу сделать 2 альтернативные кнопки: а)создает таблицу внутри файла б)создает внешний exel(svc) файл с аналогичной таблицей, таблица должна быть ГОСТовской, т.е. иметь определенные размеры. Сейчас начал курсы LISP изучать, возможно я скоро сам пойму как это сделать, если все получится то поделюсь наработками
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Ну, в принципе код открыт - отфильтровать атрибуты можно хоть внутри кода, хоть при обработке готового файла, хоть где.
Один маленький, но серьезный момент: потребуются хендлы блоков, чтобы их можно было идентифицировать. А это гарантирует "негостовскость" таблицы. Можно на сайте Lee Mac посмотреть - кажется, у него там были очень интересные нумераторы.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Доброго!
Есть ли у кого опыт по созданию полей со ссылкой на дин блок? (в лиспе естественно) Научился манипулировать всеми параметрами дин. блока и содержимым атрибутов, но с полями пока не работал. Собственно задача: Есть исходный динамический блок с атрибутами. Кроме него есть блок маркер в котором только один атрибут. Требуется создать в атрибуте блока маркера поля в перемешку с текстом, поля ссылаются на дин. параметры и атрибуты исходного блока. Прикрепляю пример. В примере я мухлюю, и использую атрибут самого исходного блока, вокруг которого рисуется рамка маркера (блок маркера в примере вовсе не имеет атрибута). А хочется сделать по человечески Подскажите в каком направлении копать? Заранее спасибо.
__________________
Блог |
||||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
В лисп с полями довольно просто... Вы руками сначала нужное поле создайте, потом посмотрите на него и увидите, что там objectID акрибута имеется и его свойство... по образу и подобию формируйте строку для других блоков, меняя ID и будет Вас счастье.... Путано как то сказал, но идея я думаю понятна.
|
|||
|
||||
Спасибо. Таким методом работают ссылки на дин. свойства но не на атрибуты.
На основе одного из кодов от VVA настряпал такой вот тестовый код для атрибутов. Вот только при записи поля в другой атрибут сперва содержание отображается как ####, а корректное поле появляется только после регенерации. При этом, если записывать поле не в атрибут блока а в текст, то все отображается сразу ОК. Мне бы очень хотелось не использовать регенерацию, так как файлы тяжелые а операция довольно частая. Может кто подскажет возможно ли это и как? Код:
__________________
Блог Последний раз редактировалось Red Nova, 23.04.2017 в 18:57. |
||||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |