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

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

Как присвоить атрибуты для полилинии

Ответ
Поиск в этой теме
Непрочитано 14.02.2020, 10:57
Как присвоить атрибуты для полилинии
romanov.gasu
 
Регистрация: 14.02.2020
Сообщений: 5

Добрый день! Нужна помощь.
Есть ли возможность в autocad присвоить необходимые атрибуты для полилинии?
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 561
Размер:	44.8 Кб
ID:	223117

Просмотров: 13158
 
Непрочитано 02.02.2022, 11:58
#41
koui


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


у полилинии нет атрибута. зато есть гиперссылка. для создания полей или извлечения данных вполне годно.
koui вне форума  
 
Непрочитано 02.02.2022, 16:08
#42
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от koui Посмотреть сообщение
у полилинии нет атрибута. зато есть гиперссылка. для создания полей или извлечения данных вполне годно.
Offtop: Кстати, не все и опытные программисты знают, что гиперссылки - эти самые XData.
Атрибутами в информационных системах за пределами AutoCAD обычно называют описательные свойства объектов. В исходном посте это: Наименование, Номер колодца, Назначение, Диаметр, Материал и т.д. С соответствующими значениями.
Всего здесь 10. Понятно, что может быть и 1, и 20.
И понятно, что для одних полилиний нужен один набор таких свойств, а для других другие, с разным количеством описательных свойств.
Одни свойства текстовые, другие числовые.
Кроме того, нормален вариант, когда одна полилиния может быть с несколькими наборами описательных свойств одновременно. Например, полилиния - граница участка, забор, граница улицы, огорода, газона одновременно.
Как это делать гиперссылкой?
Вопрос без подвоха - поделитесь опытом.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 02.02.2022, 18:01
#43
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Судя по отсутствию ответа на мой предыдущий вопрос - никак не получить) т.е. заполнить расширенные данные, и нехай болтаются отдельно от той же актуальной длины полилинии.

Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Кроме того, нормален вариант, когда одна полилиния может быть с несколькими наборами описательных свойств одновременно. Например, полилиния - граница участка, забор, граница улицы, огорода, газона одновременно. Как это делать гиперссылкой?
ну split/merge строк никто не отменял. Костыль, конечно, но не больший - чем носиться годами с XData отдельно от самих реальных данных)
Сергей812 вне форума  
 
Непрочитано 03.02.2022, 13:41
#44
koui


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Offtop: Кстати, не все и опытные программисты знают, что гиперссылки - эти самые XData.
Кроме того, нормален вариант, когда одна полилиния может быть с несколькими наборами описательных свойств одновременно. Например, полилиния - граница участка, забор, граница улицы, огорода, газона одновременно.
это, конечно, интересно, но даже если мы это сделаем, на придётся идти ещё дальше. допустим, требуются планы границ участков, планы ограждений, генплан, план озеленения. и что, формировать каждый план каждый раз отдельно? а потом заказчик скажет "вот тут сдвиньте на метр" и опять всё заново формировать, и так каждый раз? сколько назначений у линии, столько и слоёв с линиями.
koui вне форума  
 
Непрочитано 03.02.2022, 15:04
#45
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от koui Посмотреть сообщение
потом заказчик скажет "вот тут сдвиньте на метр" и опять всё заново формировать, и так каждый раз? сколько назначений у линии, столько и слоёв с линиями.
Зачем? Наоборот - "двигаешь на метр" только эту одну полилинию с примыкающими. У нее же идентификаторы всех типов объектов и информация о них у одной.
Но это другой вопрос - не в тему.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 03.02.2022, 15:26
#46
koui


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Зачем? Наоборот - "двигаешь на метр" только эту одну полилинию с примыкающими. У нее же идентификаторы всех типов объектов и информация о них у одной.
Но это другой вопрос - не в тему.
вопрос "зачем" - это всегда в тему, потому как людям чаще всего надо решить конкретную задачу. если у вас линии (отрезки или полилинии - я не буду каждый раз это писать) совпадают на 100%, то нет разницы сколько двигать - одну или 20. если придётся подвинуть забор от края улицы на 20 см. - вся система полетит? точнее, вся система будет разделена на отдельные подсистемы. послушайте моего совета: не изобретайте бурбулятор, делайте как все делают, это проверено годами и тысячами людей. и заказчику не нужна картинка, где есть всё, от такой картинки можно офигеть и ничего не понять. да и не надо дорожному строителю заборы видеть, ещё сделает что-то не то.
но тема заслуживает внимания, на самом деле. вы мне дали интересную идею лиспа для создания кабельного журнала. осталось только изучить ЛИСП
koui вне форума  
 
Непрочитано 03.02.2022, 15:59
#47
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от koui Посмотреть сообщение
вы мне дали интересную идею лиспа для создания кабельного журнала. осталось только изучить ЛИСП
Или заняться поиском по форуму: https://dwg.ru/cse?q=%D0%BA%D0%B0%D0...BD%D0%B0%D0%BB
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.02.2022, 21:25
#48
koui


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Или заняться поиском по форуму: https://dwg.ru/cse?q=%D0%BA%D0%B0%D0...BD%D0%B0%D0%BB
я уже долго искал и смотрел многоженство вариантов КЖ, но, к сожалению, ни один не делает то, что мне нужно на 100%. я бы даже сказал, ни один не делает то, что я не смогу сделать извлечением данных и самыми ходовыми лиспами.
что б не отходить от темы, я хочу написать Лисп, который ищет ближайшую точку к концу линии (будь то текст или атрибут блока) и записывает содержимое в гиперссылку, тогда у меня будет реальная привязка полилинии к блоку. а уж если сделать проверку на дублирование этого содержимого - так вообще круто получится. а дальше извлечение данных в эксель, где уже всё подготовлено, благо VBA маленько знаю (честно говоря, VBA у меня там применяется больше для форматирования/сортировки, расчёты производятся через формулы).
koui вне форума  
 
Непрочитано 03.02.2022, 23:33
#49
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от koui Посмотреть сообщение
я хочу написать Лисп, который ищет ближайшую точку к концу линии (будь то текст или атрибут блока)
все эти поиски по ближайшему срабатывают через раз) В районе пультовых, серверных, кроссовых и т.п. вообще такое "месиво" на чертежах...
Сергей812 вне форума  
 
Непрочитано 04.02.2022, 13:27
#50
koui


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
все эти поиски по ближайшему срабатывают через раз) В районе пультовых, серверных, кроссовых и т.п. вообще такое "месиво" на чертежах...
да, но только если лисп ищет среди всех объектов, а не только среди выделенных. и плюс начальная точка не так важна, она чаще всего уже скрыта в маркировке конечной. согласен, что будет тяжко заставить считать КЖ между коммутаторами, но вот до абонентов (на что уходит уйма времени) вполне сойдёт.
koui вне форума  
 
Непрочитано 04.02.2022, 14:06
#51
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от koui Посмотреть сообщение
да, но только если лисп ищет среди всех объектов, а не только среди выделенных. и плюс начальная точка не так важна, она чаще всего уже скрыта в маркировке конечной. согласен, что будет тяжко заставить считать КЖ между коммутаторами, но вот до абонентов (на что уходит уйма времени) вполне сойдёт.
имхо, программа должна быть ассистентом (помощником), а не надсмоторщиком типа БИМ-подобных) Т.е., например, соединение кабеля и оборудования - команда/хоткей на выделенные объекты (если уже есть соединение - то игнорируется) со сбросом выделения, разъединение - аналогично. Т.е. решение принимает исключительно проектировщик, а надстройка лишь запоминает его мнение - чтобы потом можно было тот же КЖ/спецификацию сгенерировать, не возвращаясь многократно к одним и тем же данным.
Сергей812 вне форума  
 
Непрочитано 09.02.2022, 00:52
#52
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от koui Посмотреть сообщение
вы мне дали интересную идею лиспа
И Вы дали мне интересную идею! Вместе с другими, кто советовал гиперссылки как альтернативу XData. (Не зная, что это тоже XData).
Можно сделать две программки: 1. Создавать гиперссылки с Текст для отображения из названий всех пользовательских XData. Например, с префиксом "XD=", чтобы отличать от собственно гиперссылки, если она была. И отделять друг от друга, если XData у одного графэлемента несколько. 2. Удалять из гиперссылок эти названия.
Это сделает XData "видимыми" в окне Свойства и при наведении на графэлемент.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 09.02.2022, 07:45
#53
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Это сделает XData "видимыми" в окне Свойства и при наведении на графэлемент.
С чего вдруг?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2022, 16:30
#54
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
С чего вдруг?
для одиночных - в свойствах текст гиперссылки отражается, для множества объект - либо *различные*, либо общий одинаковый текст гиперссылкиссылки. При наведении отображается только для текущего элемента под курсором. Видимо, с практический стороны для чисто академической задачи описательных данных больше для счастья человеку и не нужно)
Сергей812 вне форума  
 
Непрочитано 09.02.2022, 16:37
#55
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
С чего вдруг?
Конечно, видимы так могут быть только названия XData, не данные в них.
Но это лучше же, чем ничего.
И уже позволяет понимать, что у объекта XData есть.
Возвращаясь к апологетике гиперссылок как альтернативы - многие же уже видеть одни названия считают достаточным.
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 09.02.2022 в 16:44.
АлексЮстасу вне форума  
 
Непрочитано 09.02.2022, 16:39
#56
Кулик Алексей aka kpblc
Moderator

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


Значит, я неправильно понял предложение
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
сделать две программки: 1. Создавать гиперссылки с Текст для отображения из названий всех пользовательских XData. Например, с префиксом "XD=", чтобы отличать от собственно гиперссылки, если она была. И отделять друг от друга, если XData у одного графэлемента несколько. 2. Удалять из гиперссылок эти названия.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2022, 17:13
#57
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


взять типа этого и переделать на получение данных из XData. Lisp все-таки не очень подходит для интерактивных вещей.
Сергей812 вне форума  
 
Непрочитано 09.02.2022, 17:30
#58
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Значит, я неправильно понял предложение
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
сделать две программки: 1. Создавать гиперссылки с Текст для отображения из названий всех пользовательских XData. Например, с префиксом "XD=", чтобы отличать от собственно гиперссылки, если она была. И отделять друг от друга, если XData у одного графэлемента несколько. 2. Удалять из гиперссылок эти названия.
Очевидно, что я пишу недостаточно внятно.
Но я написал же "из названий всех пользовательских XData", "эти названия".
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 18.02.2022, 17:23
#59
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от koui Посмотреть сообщение
у полилинии нет атрибута. зато есть гиперссылка. для создания полей или извлечения данных вполне годно.
Сделали две команды для XData <--> Гиперссылки:
1. XDTOOLS_2HYPERLINKS - создание гиперссылок из названий XData. Имеющиеся гиперссылки сохраняются в XData "SAVED_PE_URL".
2. XDTOOLS_RETURNHYPERLINKS - восстановление исходных гиперссылок из сохраненных в XData "SAVED_PE_URL".

Т.о., в любой момент можно сделать свои XData "видимыми" - как гиперссылки. Такие гиперссылки начинаются на "xd=".
И в любой момент такие гиперссылки можно убрать.

В т.ч. таким способом можно оптом и в розницу изменять гиперссылки средствами XData. И создавать из XData "SAVED_PE_URL" гиперссылки с нужным содержанием.
Миниатюры
Нажмите на изображение для увеличения
Название: Hyperlinks_en.png
Просмотров: 79
Размер:	33.1 Кб
ID:	245532  
Вложения
Тип файла: lsp XDTOOLS_2HYPERLINKS-v-0-6.lsp (24.9 Кб, 9 просмотров)
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 18.02.2022 в 19:32. Причина: подправлен лисп
АлексЮстасу вне форума  
 
Непрочитано 18.02.2022, 18:35
#60
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Тот же результат без всяких гиперссылок - выдает дополнительную информацию в виде списка пар { Код - Значение } значений XData примитивов под апертурой курсора.


Код:
[Выделить все]
 
// Windows
using System;
using System.Text;

// AutoCAD
using aps = Autodesk.AutoCAD.ApplicationServices;
using dbs = Autodesk.AutoCAD.DatabaseServices;
using edi = Autodesk.AutoCAD.EditorInput;
using rtm = Autodesk.AutoCAD.Runtime;


namespace ShowXData
{
    public class CommandsClass
    {
        [rtm.CommandMethod("STARTMON")]
        public static void StartMonitor()
        {
            edi.Editor lEd = aps.Application.DocumentManager.MdiActiveDocument.Editor;
            lEd.PointMonitor += new edi.PointMonitorEventHandler(PointMonitorHandler);
        }


        [rtm.CommandMethod("STOPMON")]
        public static void StopMonitor()
        {
            edi.Editor lEd = aps.Application.DocumentManager.MdiActiveDocument.Editor;
            lEd.TurnForcedPickOn();
            lEd.PointMonitor -= new edi.PointMonitorEventHandler(PointMonitorHandler);
        }


        static void PointMonitorHandler(object sender, edi.PointMonitorEventArgs e)
        {
            aps.Document lDoc = aps.Application.DocumentManager.MdiActiveDocument;
            edi.Editor lEd = lDoc.Editor;
            try
            {
                dbs.FullSubentityPath[] lPaths = e.Context.GetPickedEntities();
                StringBuilder lSB = new StringBuilder(16384);
                using (dbs.Transaction lTr = lDoc.TransactionManager.StartTransaction())
                {
                    foreach (dbs.FullSubentityPath lPath in lPaths)
                    {
                        dbs.ObjectId[] lIds = lPath.GetObjectIds();
                        if (lIds.Length > 0)
                        {
                            dbs.ObjectId lId = lIds[lIds.GetUpperBound(0)];
                            if (!lId.IsNull && !lId.IsErased && lId.IsValid)
                            {
                                dbs.DBObject lDBObj = lTr.GetObject(lId, dbs.OpenMode.ForRead, false, false);
                                dbs.ResultBuffer lRB = lDBObj.XData;
                                if (lRB != null)
                                {
                                    foreach (dbs.TypedValue lTV in lRB)
                                    {
                                        lSB.AppendLine(string.Format("Code = {0:d4}; Value = {1}", 
                                            lTV.TypeCode, lTV.Value.ToString()));
                                    }
                                }
                            }
                        }
                    }
                    lTr.Commit();
                }
                if (lSB.Length > 0) e.AppendToolTipText(lSB.ToString());
            }
            catch(Exception ex)
            {
                lEd.WriteMessage("\nError = {0}", ex.Message);
            }
        }

    }

}


----- добавлено через ~6 мин. -----
собственно об этом говорил в п.57 - сделать на основе кода от Kean Walmsley, заменив только сбор информации о кривых на получение XData. Зачем судорожно пихать лишние объекты в базу чертежа dwg...
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как присвоить атрибуты для полилинии

Реклама i
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дублируются полилинии, блоки, атрибуты в динамических блоках. Как избежать? Nemyheim Динамические блоки 30 22.10.2021 13:34
Проблемы с возвратом площади полилинии в динамическом блоке (поля и атрибуты) Полусолнце Динамические блоки 10 11.11.2016 11:51
Атрибуты не в блоках, атрибуты как самостоятельный примитив АлексЮстасу AutoCAD 11 13.05.2015 10:39
Можно ли полилинии присвоить доп. свойства посредством LISP piter_ch LISP 1 20.11.2012 18:32
Атрибуты для полилинии Botticelli AutoCAD 13 17.10.2011 23:17