Jump to content
  • entries
    15
  • comments
    97
  • views
    3,632

About this blog

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

Entries in this blog

doctorraz

Благодаря @Lidia.Antipina BGTOOLS почти полностью заработал в nanoCAD

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

подробное описание команд можно посмотреть в конце файла bgtools 3.11a_Nc_22.lsp ( @Lidia.Antipina достаточно подробно все расписала)

 

image.png.8c98f0680ed6b3349f999bbcf44d0cd8.png

 

Собрал панельку из четырех команд (муторно им иконки подбирать)))

image.png.dc6730b33ca7e68be8e0a6583cb39479.png

Ну и заодно пристегнул свою утилиту по нормализации блоков (старые куски кода собрал в кучу, когда BGTOOLS еще в нано не работала)

image.png.f66d879ace95a93a5b5b95cc7bda9069.png

кое в чем повторяет функционал BGTOOLS

из уникального:

  1. умеет топить маскировки в блоках 
  2. умеет синхронизировать атрибуты блоков не меняя их положение

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

Как этим добром  пользоваться:

  1. Распаковать архив в доступное место
  2. Добавить в автозагрузку файл BlockStandard.package
  3. Перезагрузить нанокад, появится меню и две новых панельки

==========================

Естественно я все программы на всех возможных конфигурациях не тестировал, поэтому используем как есть, сохраняемся делаем копии, в общем обычная наноработа.

Отзывы, пожелания, критику в комментарии

 

 

BlockStandardNC_for_nanoCAD.zip

doctorraz

Автоматическая печать из nanoCAD (только форматы СПДС)

Спойлер

Работает с nanoCAD22,23+СПДС или Механика

с nano20 работает (upd отдельная сборка)

с  nano21 не тестировал

 

Спойлер
  1. Скачать архивчик (в аттаче)

  2. Если установлена предыдущая версия PublishNC AnyCpu - надо удалить его из автозагрузки

  3. Распаковать zip-архив с программой;

  4. Папку PlotSPDS_for_nanoCAD поместить в любой каталог, куда у пользователя есть доступ;

  5. Добавить файл PlotSPDS_22.package (для nanoCAD22,23, для nanoCAD20-> PlotSPDS_20.package) в автозагрузку, как показано на скриншоте.

  6. image.png.563e58d242af4bc20cbd4996009ca360.png

  7. Перезапустить nanoCAD.

  8. На ленте появится вкладка “drzTools” с панелью Публикация СПДС.

  9. image.png.a4cc658cfc9709551bdeec3afd0f0c81.png
  10. В классическом интерфейсе появится новый пункт меню и панель инструментов
  11.  image.png.90c6cf4a0f77ffdb2efef5b0f795f6e9.png
  12. Eсли  панель инструментов не появилась вызвать ее можно по ПКМ на свободном месте панели инструментов
  13. image.png.1e484e323fd2bfbda00c23535ea368c6.png
  14.  Или через меню Вид
  15. image.png.f0806a42231f28aaaa2a78cd72f327d8.png 

 

 

 

 

 

 

Спойлер

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

СППУБЛИКАЦИЯ

spPublish

drz_PublishMC

 

откроется вот такое окошко

 

image.png.5b5ad44d3cb7b77c175c96e1b4801e47.png

 

 

 

Спойлер

Публикация в пакетном режиме:

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

в файл (PDF)

Выбор:

ручным выбором на чертеже,

с активного пространства,

открытого чертежа (чертежей),

из заданного каталога (каталогов)

Доступны опции:

поиск форматов в модели или листах

учитывать слои (прямым выбором или по маске)

Сортировка форматов:

обозначение->номер листа

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

Группировка форматов при печати в файл

Закладки (оглавление для файла PDF)

 

 

 

Спойлер

Для PDF настройки не требуются, просто выберите принтер PDF и стиль

==========

Для печати на бумагу

image.png.efc1a056517de190949caa15d9efe924.png

 

Откроются настройки шаблонов

image.png.6fd93a2be51af5269056e7d7de70dbd2.png

 

Можно добавить новый или удалить существующий шаблон

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

Малые форматы предполагается принтер (только основные форматы, А4, А3, А2)

 

Средние и большие форматы это плоттер, печать на рулон (умеет дополнительные форматы А4х3, А3х5 и  т.д.) Формат определяется максимальной шириной рулона плоттера, для А1 это ~594, для А0~841

т.е. для настроек с рисунка выше:

на малый плоттер попадут А4, А3

на средний например А4х3, А3х3, А2, А2х3, А1

на большой А0, А1х3 и т.д.

Задаем стили печати

Сохраняем шаблон!!!!

Выход и можно печатать

 

Спойлер

При печати в PDF концепция такая:

Если задан "Путь вывода PDF":

напечатанные файлы будут по этому пути, если файл с таким именем уже есть, то добавляется суффикс (1), (2)....

Путь печати не задан:

Файл чертежа сохранен-> PDF будет рядом с файлом чертежа

Файл чертежа не сохранен->PDF будет в папке Мои документы

Несколько файлов сохраненных и не сохраненных->при сборке в один PDF -> файл PDF будет рядом с файлом первого формата (если первый формат не сохранен, в моих документах)

 

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

Баги и пожелания эту тему.

Вышло очередное обновление 0.2.8656 от 13.09.2023  что нового?

Актуальная версия программы

Домашняя страница программы

 

 

 

 

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

Attsync. Альтернатива


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

  Ждать пока nanoDev выгребет все баги мне некогда, работать надо сейчас, поэтому...

Под свои потребности сделал сборочку, на основе кода Андрея Бушмана (с небольшими изменениями).

взять сборочку можно тут: https://disk.yandex.ru/d/87lVPPumz3FPzA

В архиве две сборки под Autocad 2018-2021 и nanoCad 21. Также в архиве простенький тестовый dwg пример.

Для вызова доступны две команды:

  1. от Андрея Бушмана drz-MySynch

что делает:

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

   2. от Gilles Chanteau drz-MySynchHard

 что делает:

  • то что должен был делать Attsync в nanoCad 21, только по нормальному (без удаления значений атрибутов и видит атрибуты в измененных дин блоках)

!!!! Важно:

  •  drz-MySynch работает только в nanoCad  21, в nanoCad  20.х некоторые .NET методы не реализованы (либо я не разобрался, как((();
  • drz-MySynchHard в nanoCad  20 обрабатывает только статические блоки, в nanoCad  21 обрабатывает все;
  • Тестировалось на nanoCad х64 (теоретически должно и на х86 работать, если надо пересоберу без проблем);
  • На автокад не тестировалось, но по опыту предыдущих стрельб должно работать на АК2018-2021

Короче кому интересно скачивайте пробуйте.

doctorraz

В nano  20.х добавили функциональную панель "Инструменты" (в Autocad называлось палитра)

Сама по себе неплохая штука и порой весьма удобная.. 

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

Спойлер

image.png.7272304427ec9180111ece44bccd437b.png

В nano21 эту багу исправили.

В принципе казалось бы, в чем проблема..

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

Да и статические после вставки нового блока с функциональной панели "Инструментов" каждый раз править, то еще удовольствие(((

Но решение достаточно простое

Спойлер

#if NC
using Teigha.DatabaseServices;
using Teigha.Runtime;
using HostMgd.ApplicationServices;
using HostMgd.EditorInput;

#else
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
#endif
namespace drz
{
    public class Utils : IExtensionApplication

    {
        [CommandMethod("drz-WipBot", CommandFlags.Modal)]
        public void WipeoutToBotton()
        /*Топит маскировку внутри блоков
         */
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            int count = 0;
            //using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction())//вот нельзя тут так делать, только для UpgradeOpen(), DowngradeOpen();
//иначе Автокад валится, нане пофих
            using (Transaction tr = db.TransactionManager.StartTransaction())  
            {
                BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
                foreach (ObjectId btrId in bt)
                {
                    BlockTableRecord btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead);
                    if (!btr.IsFromExternalReference && !btr.IsDependent && !btr.IsLayout)// not xref and not xref|block and not Layout
                    {
                        foreach (ObjectId id in btr)
                        {
                            Entity ent = tr.GetObject(id, OpenMode.ForRead) as Entity;
                            if (ent != null)
                            {
                                Wipeout wpt = ent as Wipeout;
                                if (wpt != null)//если маскировка
                                {
                                    // получаем таблицу порядка отрисовки блока
                                    DrawOrderTable drawOrder =
                                                         tr.GetObject(btr.DrawOrderTableId,
                                                        OpenMode.ForWrite) as DrawOrderTable;
                                    ObjectIdCollection ids = new ObjectIdCollection();
                                    ids.Add(wpt.ObjectId);
                                    drawOrder.MoveToBottom(ids);//топим маскировку
                                    count++;
                                }
                            }
                        }
                    }
                }
                tr.Commit();
            }
            ed.Regen();
            ed.WriteMessage(
                "Move to bottom in blocks " + count + " wipeout"
                );
        }
        //-----------------------------
        public void Initialize()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("\n\"drz\" загружен");
            ed.WriteMessage("\nВызов drz-WipBot");
        }
        public void Terminate()
        {
        }
    }
}

 

Проходит по всем описаниям блоков находит в них маскировки и топит их на дно.

вызов из командной строки drz-WipBot

Тестировался в nano20.1-21, Autocad2018-2021 (естественно в каждый CAD) надо загружать свою сборку (NETLOAD или APPLOAD)

Спойлер

image.png.7ac6ed6a44526d85dd51caf806d556f6.png

Форум не позволяет загружать dll и архивы, поэтому ссылка на сборку и там же пример блоков которые режут линию под собой

doctorraz

В рамках самообучения VB.NET решил портировать VBA из Автозаполнялка. Часть 2

Естественно, я сильно не заморачивался, просто добавил нужные функции для себя, ну и прикрутил интерфейс для других))

Для чего это нужно можете прочитать выше по ссылке...

Возможности утилиты:

  • Работает с нанокад и автокад+СПДС
  • Удаление всех пользовательских свойств документа DWG
  • Добавляет пользовательские свойства в активный документ из таблиц nanoCad (именованные ячейки)
    • прямым выбором таблиц на чертеже
    • сохраненное имя таблицы из настроек
  • режим ком строки (без интерфейса) ключи:
    • без ключа-поведение определяется настройкой утилиты, возможны опции:
      • Открыть настройки (интерфейс)
      • Записать в свойства документа данные из имени таблицы сохраненной в настройках
      • Выбрать таблицу для записи в свойства документа на чертеже
    • 1-Записать в свойства документа данные из имени таблицы сохраненной в настройках
    • 2-Выбрать таблицу для записи в свойства документа на чертеже
    • любой другой ключ-Интерфейс, откроется окно настроек
  • Обновление утилиты онлайн (в смысле при наличии интернета, сама проверит обновление и попросит обновиться)

=====================

В принципе функционал можно  наращивать до бесконечности (если кто-то проявит интерес)...собирал для себя, то что необходимо мне)))

upd Накрутил там еще шашечек))) по мелочи и продолжаю пилить

Спойлер

image.png.6ac2f36c414224b52b044508985377ba.png

Спойлер

image.png.85137f1639a2cbf8695776ce67157751.png

 

image.png.aece71222de3bef4337f5d0b958c92a5.png

 

 

 

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

 Заполнялка Таблица в таблицы.dwg


docProp

doctorraz

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


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

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

Спойлер

 

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

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

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

Спойлер

image.png.bb1eb081fccbcb24f20583517a64d91d.png

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Спойлер

image.png.7e4d14d7f36dfeff725a55aa331dba47.png

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

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

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

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

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

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

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

 

 

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

×
×
  • Create New...