Перейти к содержанию
  • записи
    3
  • комментариев
    10
  • просмотров
    159

О блоге

мысли и возможно полезное

Записи в этом блоге

doctorraz

На днях колеги подогнали файл со схемами предприятия

Спойлер

image.thumb.png.d5ca87365d58717b344e4251b916f75f.png

Ну а чо они так видят, им удобно и они в этом чертеже ориентируются вполне комфортно, в отличие от меня.

Вблизи схемы как схемы

Спойлер

image.png.f1892224685a73e1967b980200c68463.png

 

Спойлер

image.png.92c36affa2cf64d370d4eb951b4d61b4.png

Среди этой красоты мне нужно было найти определенную подстанцию ТП-8/7 и фидера откуда она питается

 

Спойлер

image.png.60d838cd59af854898e29137f709ce1c.png

Долог и неинформативен

Благо коллеги в кадах не сильно искушены и все надписи были сделаны просто текстом

И я подумал ведь есть служебная команда SPREFSHOW которая укажет мне путь)))

Добавил таблицу на чертеж

Добавил раздел  отчета

Спойлер

image.png.0b8c0959d042f105cb49a15c7628576c.png

если кому надо искать в мтекстах или других объектах, то добавляется по аналогии...

Для того что бы показывало объекты по SPREFSHOW, должно быть взято хотя бы одно свойство с объекта, ничего оригинальнее чем  взять =Object.Text я придумать не смог

Больше свойств брать не стоит, лишние связи будут мешать, загромождать... короче не надо

Ну и для перфекционизму объединил первый столбец и поставил на него счетчик

Спойлер

image.png.f91b5ca8fba591ca819a7c1c79375a4a.png

выходим из редактора таблиц

выделяем нашу табличку и в ком строке вводим вожделенное SPREFSHOW

Спойлер

image.thumb.png.04bd57f69fdaced8bc19609907725104.png

линии связей укажут искомое)))

---------------

ЗЫ мне реально лениво переключаться на инглиш раскладку, а потом еще и набирать такое длинное слово

можно добавить через НПИ в команды, менюшки и панельки..... но тогда нано,  все мои красиво расположенные  функциональные и не очень панельки смешает в кучу..

я работаю в основном из ком строки..

поэтому добавил в подгружаемый lisp команду

(defun C:спсс ();;Показать зависимости
	(command "SPREFSHOW" ) 
	(princ)
) 

благо что lisp команды можно добавлять, изменять не перезагружая нану (достаточно перезагрузить лисп))))..

в отличие от добавления команд через интуитивно понятный и чертовски удобный НПИ(((который после рестарта нано нарушит гармонию панелек настроенных мной, на строгий порядок определенный суровым разработчиком)))

doctorraz

АвтоЗаполнялка. Часть 2


Автоматизация

Сделал автозаполнялку , по результатам боевых стрельб внезапно выяснилось, что нана не умеет работать с полями нативных объектов.

Зато умеет вставлять поля из свойств документа (хотя возможно в следующей версии пофиксят и все будет наоборот)))

Возник вопрос, как запихнуть данные в  свойства документа....

Руками прям не вдохновляет

Спойлер

image.png.d238428f6d075708067bb818e58b3ebf.png

Второй вопрос откуда эти данные брать, решился просто, коль у нас на чертеже есть таблица, (автозаполнялка)  в которую мы занесли все сведения...

отчего бы данные не подтянуть из нее.

Принцип в кратце:

  1. Хватаем конкретную таблицу на чертеже
  2. Пробегаем по значениям именованных ячеек
  3. Имя ячейки пишем как ключ в пользовательские свойства документа
  4. Значением-свойством ключа будет содержимое ячейки

------------------------

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

Если изменить "комментарии"  ячеек, то соответственно в свойства документа запишутся другие ключи

Все ключи пишутся в пользовательские свойства документа, но при желании можно писать и в 

Спойлер

image.png.d1d023e4dfff1ade16c008af0f79a073.png

 

Под спойлером код, старался комментировал))

 

Спойлер



Dim ThisDrawing As Object
Sub docProp() 'заполнялка полей документа из таблицы (именованных ячеек)
    'без проверки исключений, чисто для общего понятия как
    Set objApp = GetObject(, "nanoCAD.Application") 'цепляемся к нане, или AutoCAD
    Set SPDS = CreateObject("McCOM2.Server") 'Получаем COM-сервер СПДС
    Set ThisDrawing = objApp.ActiveDocument 'хватаем активный документ
    Set ff = ThisDrawing
    TabName = "Заполнялка Таблица в таблицы" 'эту таблицу будем искать на чертеже
    Set FindTable = SPDS.Query("McCom2.SymTable", "Name=""" & TabName & """") _
            'ищем таблицу, можно изменить на свое
       If FindTable.Count > 0 Then 'если хоть одна таблица с таким именем найдена
        Set PropTable = FindTable(1).Properties 'хватаем первую из коллекции с таким именем (предполагается, что она одна)))
Dim varr
'<тут готовим путь для записи в таблицу (мне так надо)
        If ThisDrawing.FullName Like "*\*" Then 'НАНОКОСТЫЛЬ если файл сохранялся
            FulPatch = ThisDrawing.FullName
'<тут получаем имя файла без расширения
            varr = Split(ThisDrawing.Name, ".")
ReDim Preserve varr(UBound(varr) - 1)
            Filename = Join(varr, "")
        Else
            FulPatch = "ФАЙЛ НЕ СОХРАНЯЛСЯ!!"
            Filename = ThisDrawing.Name
        End If
Dim PropKey As String 'ключ для записи в свойства документа (коментарий ячейки)
Dim PropVal As String 'свойство ключа)) (содержимое ячейки)
On Error Resume Next 'страховочка вдруг такой ячейки нет((
        PropTable("Путь к файлу") = FulPatch 'пишем в ячейку полный путь
        PropTable("Имя файла") = Filename 'пишем в ячейку имя файла
On Error GoTo 0
    'тут в цикле заполняем свойства документа из именованных ячеек
        For Each namProp In PropTable.Names 'перебираем имена свойств
            Set PropProp = PropTable(namProp) 'получаем свойство по имени
            PropCategory = PropProp.Category
            If PropCategory = "Именованные ячейки" Then 'из свойств нам нужны только именованные ячейки
                PropKey = namProp 'коментарий ячейки будет ключ
                PropVal = PropProp.Value 'значение ячейки
                SetOrAddKey PropKey, PropVal 'идем писать в свойства
            End If
        Next
        res = "Значения именованных ячеек из " & "<" & TabName & ">" & _
                " записаны в свойства документа"
        ThisDrawing.SendCommand "(alert """ & res & """)" & vbCrLf
        SPDS.Message (res)
    Else
        MsgBox "Таблица: """ & TabName & """" & vbCrLf & _
                "не найдена на чертеже!", vbInformation, "docProp"
    End If
End Sub
    
Function SetOrAddKey(Key1 As String, val As String)
On Error Resume Next
    ThisDrawing.SummaryInfo.SetCustomByKey Key1, val 'НАНОКОСЯК если ключа нет в каде будет исключение, но нана создаст ключ)))
    If Err.Number <> 0 Then
        ThisDrawing.SummaryInfo.AddCustomInfo Key1, val
        Err.Number = 0
    End If
On Error GoTo 0
End Function
Sub main()
    docProp
End Sub

 

 

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

Поэтому этот код запускается из Excel большой красной кнопкой.

В принципе, как дальнейшее развитие, этот код можно причесать, откомпилировать и запускать, хоть из командной строки нано, из меню или кнопкой на панели.

В аттаче шаблон чертежа и большая красная кнопка.

PS кода без багов не бывает, поэтому по мере... буду улучшать

Автозаполнялка через поля документа V2.dwg docProp.xlsm

doctorraz

АвтоЗаполнялка


Автоматизация

По мотивам видео уважаемого  @MCAD

Спойлер

 

Собрал заполнялку форматок СПДС на основе таблиц...

Коротенько что умеет и зачем...

1. Заполняет реквизитную часть основных надписей

Спойлер

image.png.bb1eb081fccbcb24f20583517a64d91d.png

 

Но в связи с тем, что в таблицах бага (несколько (много ) отчетов начинают глючить, а мне надо много)

Эта таблица  заполняет данными другие таблицы..

Собирает данные с форматов в чертеже (мне надо для статистики по разделам, листов и приведение к А1)

UPD 19.05.2021  15:50 Заполняет данными  блок с атрибутами (иначе как мне взять полем в текст или мтекст??)  

И берет с этого блока поля  имени файла и путь файла ( заодно объехали еще одну багу с отцепляющимися полями в таблице при изменении в таблице количества строк и еще одну багу лишний пробел в начале строки)

из за баги в нано (атрибуты из блоков в тексты не держатся, слетают и глючит)

поэтому написал простенький VBA который значения именованных ячеек таблицы записывает в пользовательские свойства документа, а вот оттуда уже можно подтянуть полем в любой объект.

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

Продолжение истории))/UPD

-------------------

Маленькие таблицы:

непосредственно заполняют основные надписи форматок

нумеруют форматки (слева направо снизу вверх, можно перенастроить)

В первом формате ставят количество форматов.

В маленьких таблицах нужно только  задать область в которой расположен раздел и имя раздела (то что в обозначении после точки... СО, КЖ, Д, Р)

Спойлер

image.png.7e4d14d7f36dfeff725a55aa331dba47.png

Кому интересно качайте шаблончик, включайте скрытые строки и разделы (их там есть), разбирайтесь как это работает и конечно адаптируйте под свои нужды (кто проектирует проект файл)

Связи можно посмотреть-проверить по SPREFSHOW

------------------------

Критика только приветствуется))

ЗЫ возможно чего вспомню еще допишу, но проще раз увидеть

------------

upd перезалил шаблон, чегойто два файла прицепилось)))

 

 

Автозаполнялка.dwg

×
×
  • Создать...