Jump to content

XaraMathers

Пользователи
  • Posts

    43
  • Joined

  • Last visited

Posts posted by XaraMathers

  1. Дорогие друзья!

     

    Столкнулся с задачей взять вложенную ссылку из слоя, который заблокирован.

    И вот незадача - если использовать класс

    PromptNestedEntityResult rs = ed.GetNestedEntity("\nВыберите объект внешней ссылки: ");

    То при выборе ссылки из заблокированного слоя nanoCAD сообщает, что слой заблокирован и не берет вложенную ссылку.

    Выберите объект внешней ссылки или [?]:
    1 найдено
    1 заблокированный объект(ы)

    Если же использовать конструкцию

    PromptEntityOptions opt = new PromptEntityOptions(String.Format("Укажите внешнюю ссылку"));
    opt.AllowNone = false;
    opt.AllowObjectOnLockedLayer = true;
    PromptEntityResult rs = ed.GetEntity(opt);

    То мы берем внешнюю ссылку из заблокированного слоя, но не можем работать с его контейнерами

    rs.GetContainers();

    В этом случае будет Null.

    Почему!? Очень прошу помочь, в ACAD данная конструкция работает (по первой схеме).

  2. 2 часа назад, Ivanco сказал:

    язык разработки какой?


    Пример на .net по идее должен работать(не проверял, но в справке по API методы есть).

    // get the current value from a system variable int pltStyle = System.Convert.ToInt32(Application.GetSystemVariable("PSTYLEMODE")); // do something // set system var to new Application.SetSystemVariable("PSTYLEMODE", 0);

    
    // get the current value from a system variable
    int pltStyle = System.Convert.ToInt32(Application.GetSystemVariable("PSTYLEMODE"));
    
    // do something
    
    // set system var to new 
    Application.SetSystemVariable("PSTYLEMODE", 0);

     

     

    Ох да, забыл указать - язык C#.

    SetSystemVariable я рассматривал, но он выдает исключение, хоть и видимых ошибок в коде нет, а лишь в процессе отладки.

    Сдается мне, что нельзя просто взять и поменять эту переменную (кстати, в NanoCAD она доступна только для чтения)... :wacko:

     

    144665921_.png.e75ec581870abe2a6cfff18ca212f45c.png

     

    794705481_.png.34abd5c7669d9bccd1dda173b3a41b0b.png

  3. Уважаемые друзья!

     

    Сталкивался ли кто-нибудь с задачей выяснить, включен ли цветозависимый режим печати?

    В AutoCAD была соответствующая переменная DEFLPLSTYLE, зная которую, в коде можно было перейти на другой режим.

    В NanoCAD же ее нет и режимы переключаются в явном виде. Это удобно, но не совсем... :-)

     

    Передо мной стоит задача выяснить, какое значение в свойстве "Стиль печати" присвоено примитиву и изменить его, однако в случае, если задан цветозависимый режим, мне не удается ничего сделать с этим свойством и вылетает Exception.

     

    Вопрос - как определить, задан ли цветозависимый режим печати для текущего чертежа и можно ли его поменять?

     

    Заранее благодарен за любую помощь!

     

    АП: Нашел системную переменную PSTYLEMODE, которая тоже есть в Нано.

    Вопрос с определением режима отпал, вопрос изменения режима остался :)

  4. В 14.09.2020 в 17:55, ISL сказал:

    Может, от файлов зависит? Я попробовал пару — не повторяется. Опять же, добавлял код в пример HelloHost.

    Сделал тестовую процедуру:

            public void TestCommand()
            {
                Document adoc = HostMgd.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
                if (adoc == null) return;
    
                Editor ed = adoc.Editor;
    
                try
                {
                    PromptNestedEntityResult rss;
                    rss = ed.GetNestedEntity("\nВыберите объект внешней ссылки: ");
                    
                    if (rss.Status != PromptStatus.OK)
                        return;
    
                    ObjectId idSel = rss.ObjectId;
                    ObjectId[] objIds = rss.GetContainers();//список id контейнеров
                }
                catch (System.Exception ex)
                {
                    App.ShowModalDialog(new ErrorForm("Ошибка при выгрузке вложенной внешней ссылки", ex));
                }
            }

    В момент rss = ed.GetNestedEntity сразу сваливается с ошибкой "Error during command executing: 'Параметр задан неверно'."

     

    Что тут не так-то?... :stena:

     

    АП: И да, пробовал на разных файлах с разными xref...

  5. Дорогие друзья!

     

    Случилась несколько иная проблема, но симптомы похожи:
     

    Document adoc = App.DocumentManager.MdiActiveDocument;
    
    Editor ed = adoc.Editor;
    
    try
    
    {
    
    PromptNestedEntityResult rs;
    
    rs = ed.GetNestedEntity("\nВыберите объект внешней ссылки: ");
    
    }

     

    Выбрасывает Exception при выборе любой внешней ссылки:

    981947755_.png.91c444a28243fbe15ff77d854ddb9ebc.png

     

    При выборе любого другого элемента объект успешно берется, но нужный мне код не выполняется.

    В этот транзакции ни при чем. Не понимаю, что я делаю не так... Опять же, в акаде все работало нормально...

    Подскажите пожалуйста, "куда копать?" :rolleyes:

     

     

  6. 49 минут назад, Robink сказал:

    Лучше переделывайте

     

    Спасибо, последую совету, я поместил все в одну транзакцию.

    Вопрос мой касаемо выноса значения за пределы tr наверное так, спортивного интереса ради :)

  7. 2 часа назад, ISL сказал:

    Что я делаю не так?

     

    Вы знаете, мне кажется, что это я что-то делаю не так...

    Один и тот же (со своими библиотеками, само собой) код в автокаде отрабатывает, а в нанокаде - нет...

    В момент закрытия транзакции в акаде значение lt остается в неизменном виде, а в нано - сразу после tr.Commit(); слетает, и выглядит, как у меня на скриншоте выше.

  8. 8 минут назад, Robink сказал:

        var lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;

    Почти :)

     

    14 минут назад, ISL сказал:

    Приведите, пожалуйста, код, в котором получено значение lt.

    lt = tr.GetObject(dbSource.LayerTableId, OpenMode.ForRead) as LayerTable;

    Собственно, Robink попал в точку :)

  9. Уважаемые друзья, всем доброго дня!

     

    Столкнулся с неприятной проблемой при попытке адаптировать написанное для AutoCAD ранее .NET-приложение под NanoCAD.

    По всей видимости, есть определенная разница в API (как бы могло быть иначе) между этими САПР. А именно, проблема с тем, что многие классы и методы не реализованы, а вместо этого стоят «заглушки» - так, что ли? Кто-нибудь сталкивался с чем-то подобным? Нормальной документации по Nano20.1 SDK не нашел, и как будто в темноте черную кошку ищу, получается.


    В частности, вот пример:
    обычное объявление

    static LayerTable lt;

    В Нано дает одно, а в акаде другое (см. скриншоты).
    Как говорится, то ли лыжи не едут... :wacko:

     

    NanoCAD:

    image.png.2784524491cd9f6947554cba0ef32abb.png

     

    AutoCAD:

    image.png.275bb75c55d21ac954d5770f15f252e8.png


    Заранее всем спасибо!
     

×
×
  • Create New...