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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Lisp простановка перекрёстных ссылок

Lisp простановка перекрёстных ссылок

Ответ
Поиск в этой теме
Непрочитано 01.10.2021, 11:11 #1
Lisp простановка перекрёстных ссылок
[MTL]
 
Санкт-Петербург
Регистрация: 09.01.2018
Сообщений: 14

Тема для тех, кто понимает что такое перекрёстная ссылка на электрической схеме (м.б. и не только на электрической - не встречал) и при этом пользуется классическим Autocad.
Во вложении программа, которая облегчает проставление перекр. ссылок на схеме, а также координатная рамка в пространстве которой это происходит. Работает следующим образом:
1. Открываете "Коорд. рамка.dwg" (для примера, в дальнейшем в свой файл). См. ниже важные замечания.
2. Загружаете "links_v6.4.lsp".
3. В командной строке "РЗ" русскими буквами. Появляется запрос "Создать [Enter]/Обновить/Удалить:"
4. При выборе "Создать" нажмите Enter (или C(рус.) или E(англ.)). Появиться запрос "Введите координаты первой точки пары n" - кликаете в пространстве модели в области внутри рамки. Далее запрос "Введите координаты второй точки пары n" опять кликаете. Если всё правильно сделали, появятся 2 текстовых надписи. Первая отображает координаты второй, вторая первой в формате "/XY". Где Х - цифровая позиция по горизонтали, Y - буквенная позиция по вертикали. Запрос циклически повторяется, чтобы прервать - нажмите "Esc".
5. При выборе "Обновить" (или О(рус.) или J(англ.)) позиции обновляются. Чтобы убедиться подвигайте точки(-ку). Подробности в командной строке.
6. При выборе "Удалить". Все перекрёстные ссылки и информация о них удаляются.

Важные замечания:
1. Программа работает только с типом рамок, которые представлены в файле "Коорд. рамка". Теоретически можно адаптировать и под другие рамки, которые вы используете. Код открыт.
2. Рамки должны располагаться так, как они расположены, т.е. в пространстве модели вплотную друг к другу. До 20 листов в ряд.
3. Начало координат должно быть в месте, показанном в "links_начало координат.png". В Autocade есть команда "Определить новое начало координат путём сдвига начальной точки." Воспользуйтесь. У меня находиться на вкладке "Визуализация".
4. При создании перекр. ссылок, они автоматически помещаются на слой E-DGRM-N-GAP. Возможны ситуации, когда вам не нужно видеть ссылку на одном из концов, тогда переместите её на слой E-DGRM-N-GAP_HID. Он тоже автоматически создаётся, и не печатается. Можно менять любые свойства слоёв, кроме названия. Если название не нравиться поменяйте в тексте лиспа.
5. В отличии от спец. САПР типа EPLAN, AutoCad Electrical, создаваемые таким образом ссылки не привязаны к объектам. В этом есть и плюсы и минусы. Минусы - то что нужно вручную "протыкивать" всю схему и контролировать, чтобы при перемещении объекта случайно не потерять ссылку. Плюс, что она может использоваться с любыми объектами, а не только со спец. созданными. Костыль конечно. Но лучше уж костыль чем совсем никак.

PS: Если у вас возникает вопрос "Зачем всё это нужно?" и "Я так не работаю", значит вам это не нужно. Флудить не стоит.

Миниатюры
Нажмите на изображение для увеличения
Название: links_начало координат.png
Просмотров: 55
Размер:	8.3 Кб
ID:	241309  

Вложения
Тип файла: dwg
DWG 2010
Коорд. рамка.dwg (541.1 Кб, 8 просмотров)
Тип файла: lsp links_v6.4.lsp (28.3 Кб, 3 просмотров)


Последний раз редактировалось [MTL], 01.10.2021 в 13:59.
Просмотров: 1444
 
Непрочитано 01.10.2021, 11:30
#2
Кулик Алексей aka kpblc
Moderator

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


1. Почему текст создается только стилем Standard?
2. Не увидел меток начала и конца отмены.
3. На любом getpoint я нажму Esc - и программа скажет гудбай. А системные переменные уже изменены.
4. Прописывать реакции для dcl прямым текстом - так себе идея.
5. Лично мой прикол: любая функция (в том числе и локальная) должна запускаться, не ориентируясь на значение внешних переменных. Параметры вызова и локальные переменные даже для внутренних функций еще никто не отменял.
6. Масса переменных просто не локализована. Не гуд.
7. Высота текста жестко зашита в коде. Почему не использовать textsize - загадка.

Не очень понимаю, зачем выполнять преобразование в мировую систему координат. Насколько я помню, текст создается в текущей системе.

----- добавлено через ~2 мин. -----

Код:
[Выделить все]
 (defun sozdpoin (/)
    (entmake (mapcar 'cons
                     (list 0 100 67 8 100 10 40 1 7 72 73 11 62 41)
                     (list "TEXT"
                           "AcDbEntity"
                           0
                           "E-DGRM-N-GAP"
                           "AcDbText"
                           t1w
                           2.5
                           (strcat " /" link_x2 link_y2)
                           "Standard"
                           0
                           2
                           t1w
                           0
                           0.7
                     ) ;_ end of list
             ) ;_ end of mapcar
    ) ;_ end of entmake
    (setq point1 (entlast)
          point1 (cdr (assoc 5 (entget point1)))
    ) ;_ end of setq
    (entmake (mapcar 'cons
                     (list 0 100 67 8 100 10 40 1 7 72 73 11 62 41)
                     (list "TEXT"
                           "AcDbEntity"
                           0
                           "E-DGRM-N-GAP"
                           "AcDbText"
                           t2w
                           2.5
                           (strcat " /" link_x1 link_y1)
                           "Standard"
                           2
                           2
                           t2w
                           0
                           0.7
                     ) ;_ end of list
             ) ;_ end of mapcar
    ) ;_ end of entmake
    (setq point2 (entlast)
          point2 (cdr (assoc 5 (entget point2)))
    ) ;_ end of setq
  )

Код:
[Выделить все]
 (defun sozdpoin (ins-point link-x link-y / ent)
                ;|
  *    Создание текста вида " /<X><Y>"
  *    Параметры вызова:
    ins-point  ; точка вставки текста. Не nil. Контроля не производится
    link-x     ; строка <X>. Контроля типа данных не производится
    link-y     ; строка <Y>. Контроля типа данных не производится
  *    Возвращает хендл созданного примитива либо nil, если создать не удалось
  *    Примеры вызова:
  (sozdpoin (getpoint "\nУкажите точку") "X" "Y")
  |;
  (if (setq ent (entmakex (mapcar (function cons)
                                 (list 0 100 67 8 100 10 40 1 7 72 73 11 62 41)
                                 (list "TEXT"
                                       "AcDbEntity"
                                       0
                                       "E-DGRM-N-GAP"
                                       "AcDbText"
                                       ins-point
                                       (getvar "textsize")
                                       (strcat " /" link-x link-y)
                                       (getvar "textstyle")
                                       0
                                       2
                                       ins-point
                                       0
                                       0.7
                                 ) ;_ end of list
                         ) ;_ end of mapcar
                ) ;_ end of entmake
      ) ;_ end of setq
    (cdr (assoc 5 (entget ent)))
  ) ;_ end of if
) ;_ end of defun


__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.10.2021, 13:56
#3
[MTL]


 
Регистрация: 09.01.2018
Санкт-Петербург
Сообщений: 14


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
1. Почему текст создается только стилем Standard?
Для себя делал. (getvar "textsize") (getvar "textstyle") хорошая идея. В версии 6.4 исправил.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
2. Не увидел меток начала и конца отмены.
3. На любом getpoint я нажму Esc - и программа скажет гудбай. А системные переменные уже изменены.
Ошибка. В версии 6.4 исправил. Изменение системных переменных не требуется, убрал.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
4. Прописывать реакции для dcl прямым текстом - так себе идея.
Почему? Внимательно прочитал вашу статью. Аргументы:
"Код достаточно легко расширять: достаточно в callback прописать обработку нового ключа
Отладка кода перестает быть мучительной и слабовыполнимой задачей: в callback ставится точка останова и все!"

При всём уважении, написание обработки в данном случае это совсем не мучительно. Проблема расширения в данном случае считаю неактуальна. Ну какое расширение? Смеётесь. М.б. есть ещё что-то? Типа производительность... Пока не оценил.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
5. Лично мой прикол: любая функция (в том числе и локальная) должна запускаться, не ориентируясь на значение внешних переменных. Параметры вызова и локальные переменные даже для внутренних функций еще никто не отменял.
6. Масса переменных просто не локализована. Не гуд.
Я понимаю. Если это не запрещено, почему бы и нет. Нелокализованные переменные знаю.
Если серьёзно, заслуживает уважения человек, который сможет код программы изящнее написать. Целиком. Лямбда функциями. Другой вопрос кому всё это надо? Все давно в Revite и Eplan.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Не очень понимаю, зачем выполнять преобразование в мировую систему координат. Насколько я помню, текст создается в текущей системе.
На каком-то этапе потребовалось. Ещё в ранних версиях. Хотя мог просто не так трактовать. В общем это помогло.
[MTL] вне форума  
 
Непрочитано 01.10.2021, 14:18
#4
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от [MTL] Посмотреть сообщение
Почему? Внимательно прочитал вашу статью. Аргументы:
"Код достаточно легко расширять: достаточно в callback прописать обработку нового ключа
Отладка кода перестает быть мучительной и слабовыполнимой задачей: в callback ставится точка останова и все!"
При всём уважении, написание обработки в данном случае это совсем не мучительно. Проблема расширения в данном случае считаю неактуальна. Ну какое расширение? Смеётесь. М.б. есть ещё что-то? Типа производительность... Пока не оценил.
Я про отладку, а не про расширение.
Мой опыт подсказывает, что
а) любой диалог рано или поздно приходится модифицировать;
б) любую локальную функцию надо разрабатывать таким манером, чтобы она работала, даже если ее "выкинуть" наружу;
в) значительно проще начинать сразу писать хотя бы относительно чистый код. Тогда через полгода не надо будет выдирать волосы на всем теле без наркоза.

Где-то было сказано (за точность цитаты не ручаюсь): "Пишите код так, будто его будет читать кровожадный маньяк с бензопилой и ломом. Который знает, где Вы живете"

Цитата:
Сообщение от [MTL] Посмотреть сообщение
Если это не запрещено, почему бы и нет.
Так и применение командных методов тоже не запрещено
ЗЫ для меня тема, ради которой писалась программа, вообще мимо кассы. Я так, побухтеть на предмет кода
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Lisp простановка перекрёстных ссылок

Система Техэксперт дает уверенность в правильности и эффективности принимаемых инженерных решений!
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли написать LISP для сохранения выбранных файлов dwg в заранее заданную папку под тем же именем и с внедрением всех внешних ссылок, которые в них есть? Ojster LISP 2 10.01.2020 15:52
LISP. Простановка площадей внутри полилинии. Klo LISP 26 14.12.2018 17:43
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
Создание перекрёстных ссылок между чертежами автокада. Вопрос - как? 6JLu3HELL AutoCAD 5 27.04.2009 08:46
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19