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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нумерация вершин полилинии по выбранному блоку и создание таблицы с номерами вершин и координатами

Нумерация вершин полилинии по выбранному блоку и создание таблицы с номерами вершин и координатами

Ответ
Поиск в этой теме
Непрочитано 17.10.2023, 13:34
Нумерация вершин полилинии по выбранному блоку и создание таблицы с номерами вершин и координатами
ati96
 
Регистрация: 17.10.2023
Сообщений: 5

Коллеги, добрый день!
Не нашел похожей темы и поэтому создал новую
Проблема в следующем: часто приходится оформлять сервитуты на ЗУ и приходится нумеровать вершины полилинии, затем по проставленным блокам по вершинам извлекать координаты в эксель файл и потом уже снова вставлять в чертеж.
В лисп не силен и все собрано буквально на коленке
Нужно чтобы лисп делал следующее:
1. выбираешь полилинию
2. Выбираешь блок (блок с атрибутом, чтобы менять номер вершины), как исходник для проставления вершин. Первая вершина должна быть под номером один, а каждая следующая соответственно на один больше.
3. Лисп проставил вершины и создал таблицу, где проставлены номера вершин и координаты Х и Y.

Примерно так. Может уже есть что-то подобное и просто направите меня.
Лисп и пример блока ниже.

Код:
[Выделить все]
 (defun c:servitut4 ()
  (vl-load-com)
  
  ;; Просим выбрать полилинию
  (setq polyline-selection (ssget '((0 . "LWPOLYLINE"))))
  
  (if polyline-selection
      (progn
        ;; Выбираем полилинию из выборки
        (setq polyline (vlax-ename->vla-object (ssname polyline-selection 0)))
        
        ;; Просим выбрать блок
        (setq pt (getpoint "\nУкажите блок на модели: "))
        (setq block-name (cdr (assoc -1 (entget (car (entsel pt))))))
        
        ;; Просим указать имя таблицы
        (setq table-name (getstring t "\nEnter table name: "))
        
        ;; Создаем таблицу
        (setq table (vla-add (vla-get-database polyline) (vla-get-activelayout (vla-get-documents polyline)) "Table" (vla-get-activexobject "ACAD.Table")))
        
        (defun get-polyline-vertices (polyline)
          (setq vertices '())
          (vlax-for vertex (vlax-in polyline 'vertices)
            (setq vertices (cons (vlax-get-property vertex 'coordinates) vertices)))
          (reverse vertices))
        
        (defun insert-block-at-vertex (vertex block-name)
          (setq insertion-point (cdr (assoc 10 vertex)))
          (setq angle (cdr (assoc 40 vertex)))
          (command "-insert" block-name insertion-point angle))
        
        (defun add-to-table (table vertices)
          (setq count 1)
          
          (vlax-for row (vlax-get-property table 'rows)
            (vla-delete row))
          
          (foreach vertex vertices
            (setq point (cdr (assoc 10 vertex)))
            
            ;; Добавляем новую строку в таблицу
            (setq newRow (vla-addrow table))
            
            ;; Задаем значение номера вершины в ячейку A
            (vla-settextstring (vla-get-cell newRow 0) (strcat "Vertex " (itoa count)))
            
            ;; Задаем значение координаты вершины в ячейку B
            (setq coordinates (apply 'strcat (mapcar '(lambda (coord) (rtos coord 2 6)) point)))
            (vla-settextstring (vla-get-cell newRow 1) coordinates)
            
            (setq count (+ count 1))))
        
        (setq vertices (get-polyline-vertices polyline))
        
        (foreach vertex vertices
          (insert-block-at-vertex vertex block-name))
        
        (add-to-table table vertices)
        
        (princ "Блок успешно размещен на вершинах полилинии и данные добавлены в таблицу.")
      )
      (princ "Не найдено ни одной полилинии.")
    )
  (princ)
)

Вложения
Тип файла: dwg
DWG 2010
Номер вершины.dwg (502.8 Кб, 102 просмотров)


Последний раз редактировалось Кулик Алексей aka kpblc, 17.10.2023 в 14:50.
Просмотров: 5073
 
Непрочитано 24.01.2024, 10:11
#21
pzu_gp


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


Maksim7enov, не нужно ничего корректировать, все работает)
Большое вам спасибо!
pzu_gp вне форума  
 
Непрочитано 24.01.2024, 11:47
1 | #22
gumel


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


Делал недавно что-то похожее. Только я тоже не силен в Лисп. Реализовал вставку специального динамического блока в узлы полилинии с генерацией таблицы с координатами. Попробуйте, вдруг понравится. Для работы нужно 2 файла: "PolylinePointsCoordToTable.exe" и "GeoPointNumb.dwg", остальное исходники на Delphi
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок экрана 2024-01-24 154424.png
Просмотров: 61
Размер:	115.9 Кб
ID:	261147  
Вложения
Тип файла: zip КООРДИНАТЫ ТОЧЕК ПОЛИЛИНИИ В ТАБЛИЦУ.ZIP (471.2 Кб, 33 просмотров)
gumel вне форума  
 
Непрочитано 16.02.2024, 11:26
#23
San-Miguel


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


Ничего непонятно.
San-Miguel вне форума  
 
Непрочитано 23.01.2025, 13:29
#24
Тёмыч


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


Цитата:
Сообщение от gumel Посмотреть сообщение
Делал недавно что-то похожее. Только я тоже не силен в Лисп. Реализовал вставку специального динамического блока в узлы полилинии с генерацией таблицы с координатами. Попробуйте, вдруг понравится. Для работы нужно 2 файла: "PolylinePointsCoordToTable.exe" и "GeoPointNumb.dwg", остальное исходники на Delphi
А можно сделать без пробелов в числах в таблице координат? (пример: 1 125 744.32 что бы было: 1125744.32)

Последний раз редактировалось Тёмыч, 24.01.2025 в 08:52.
Тёмыч вне форума  
 
Непрочитано 24.02.2025, 17:05
#25
SilvioManuel


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


можете подсказать - может дело не в коде, однако себе поставил на один комп
Цитата:
Сообщение от Maksim7enov Посмотреть сообщение
Поменял в строке 39 и 40
а на другом - даёт ошибку, прописывая в названиях команд декодированый текст и ставя только точку на первой вершине, игнорируя создание таблицы
SilvioManuel вне форума  
 
Непрочитано 25.02.2025, 16:14
#26
Maksim7enov


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


Добрый день! Как грузится лисп в кад? Про декодированый текст посмотрите здесь
https://adn-cis.org/forum/index.php?topic=8399.0
Какие версии када? ну и файл сам нужен. Так не особо понятно
Maksim7enov вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нумерация вершин полилинии по выбранному блоку и создание таблицы с номерами вершин и координатами



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание таблицы SPDS БЕЗ автообсчета, используя таблицу с автообсчетом. 13Rossoneri Прочее. Программное обеспечение 6 15.02.2014 13:43
Как уменьшить количество вершин в полилинии Димас AutoCAD 30 01.01.2014 21:53
координаты вершин выбранной полилинии на VB? как получить ssv22 Программирование 5 17.07.2008 00:01
Изменение отметки Z вершин полилинии Mazai Программирование 5 27.05.2008 03:35
Удаление совпадающих вершин из полилинии Кочетков Андрей Программирование 28 18.07.2006 20:48