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

О блоге

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

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

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

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


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

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

Спойлер

 

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

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

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

Спойлер

image.png.bb1eb081fccbcb24f20583517a64d91d.png

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Спойлер

image.png.7e4d14d7f36dfeff725a55aa331dba47.png

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

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

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

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

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

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

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

 

 

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

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