Отключение слоя на чертеже

Автор Тема: Отключение слоя на чертеже  (Прочитано 2531 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн valtur1983Автор темы

  • ADN OPEN
  • Сообщений: 41
  • Карма: 2
Доброго дня форумчане!

Подскажите как отключить выбранный слой на чертеже

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

Отмечено как Решение valtur1983 13-11-2021, 09:02:21

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13196
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отключение слоя на чертеже
« Ответ #1 : 13-11-2021, 08:57:05 »
Свойство IsOff
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн valtur1983Автор темы

  • ADN OPEN
  • Сообщений: 41
  • Карма: 2
Re: Отключение слоя на чертеже
« Ответ #2 : 13-11-2021, 09:02:16 »
Спасибо, помогло!

А за что тогда отвечает свойство IsHidden и почему при изменении этого свойства ничего не происходит, а только имя слоя меняется?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13196
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отключение слоя на чертеже
« Ответ #3 : 13-11-2021, 09:04:33 »
Имя слоя становится скрытым (анонимным). Читаем документацию.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13196
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Atomohod

  • ADN OPEN
  • ****
  • Сообщений: 440
  • Карма: 1
Re: Отключение слоя на чертеже
« Ответ #5 : 19-11-2021, 15:00:57 »
заинтересовал такой вопрос - как потом расположить на этом слое объекты?
Тестовый код при попытке присвоения этого слоя выдает eInvalidInput.
Код - C# [Выбрать]
  1. [CommandMethod("Hiddenlayer")]
  2.         public static void Hiddenlayer()
  3.  
  4.         {
  5.             Document doc = Application.DocumentManager.MdiActiveDocument;
  6.  
  7.             Database db = doc.Database;
  8.  
  9.             Editor ed = doc.Editor;
  10.  
  11.             using (Transaction tr = db.TransactionManager.StartTransaction())
  12.  
  13.             {
  14.                 LayerTable table = tr.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable;
  15.  
  16.                 LayerTableRecord Anonymous = new LayerTableRecord();
  17.  
  18.                 Anonymous.Name = "Test";
  19.  
  20.                 Anonymous.IsHidden = true;
  21.  
  22.                 table.Add(Anonymous);
  23.  
  24.                 tr.AddNewlyCreatedDBObject(Anonymous, true);
  25.  
  26.                 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  27.              
  28.                 Polyline Polyline = new Polyline();
  29.                 Polyline.SetDatabaseDefaults();
  30.                 Polyline.AddVertexAt(0, new Point2d(-35, 40), 0, 0, 0);
  31.                 Polyline.AddVertexAt(1, new Point2d(-45, 20), 0, 0, 0);
  32.                 Polyline.AddVertexAt(2, new Point2d(-75, 20), 0, 0, 0);
  33.                 Polyline.AddVertexAt(3, new Point2d(-95, 20), 0, 0, 0);
  34.  
  35.                 Polyline.LineWeight = LineWeight.LineWeight060;
  36.                 Polyline.LayerId = Anonymous.ObjectId;
  37.                 btr.AppendEntity(Polyline);
  38.                 tr.AddNewlyCreatedDBObject(Polyline, true);
  39.  
  40.                 tr.Commit();
  41.             }
  42.         }

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13196
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отключение слоя на чертеже
« Ответ #6 : 19-11-2021, 17:02:58 »
Atomohod,
Зачем тебе анонимный слой понадобился?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13196
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отключение слоя на чертеже
« Ответ #7 : 19-11-2021, 17:50:53 »
Если сильно нужно, то снимаем признак анонимности, устанавливаем слой и возвращаем признак анонимности:
Код - C# [Выбрать]
  1. [CommandMethod("Hiddenlayer")]
  2. public static void Hiddenlayer()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   Database db = doc.Database;
  6.   Editor ed = doc.Editor;
  7.   ObjectId idLayer = ObjectId.Null;
  8.   // Здесь мы создаём анонимный слой
  9.   using (Transaction tr = db.TransactionManager.StartTransaction())
  10.   {
  11.     LayerTable lt = tr.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable;
  12.     LayerTableRecord ltr = new LayerTableRecord();
  13.     ltr.Name = "Test";
  14.     ltr.IsHidden = true;
  15.     idLayer = lt.Add(ltr);
  16.     tr.AddNewlyCreatedDBObject(ltr, true);
  17.     tr.Commit();
  18.   }
  19.   // Здесь мы используем этот слой для добавления полилинии
  20.   using (Transaction tr = db.TransactionManager.StartTransaction())
  21.   {
  22.     BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  23.  
  24.     Polyline pline = new Polyline();
  25.     pline.SetDatabaseDefaults();
  26.     pline.AddVertexAt(0, new Point2d(-35, 40), 0, 0, 0);
  27.     pline.AddVertexAt(1, new Point2d(-45, 20), 0, 0, 0);
  28.     pline.AddVertexAt(2, new Point2d(-75, 20), 0, 0, 0);
  29.     pline.AddVertexAt(3, new Point2d(-95, 20), 0, 0, 0);
  30.     pline.LineWeight = LineWeight.LineWeight060;
  31.  
  32.     LayerTableRecord ltr = tr.GetObject(idLayer, OpenMode.ForWrite) as LayerTableRecord;
  33.     ltr.IsHidden = false; // Убираем признак анонимности
  34.  
  35.     pline.LayerId = idLayer;
  36.  
  37.     ltr.IsHidden = true; // Возвращаем признак анонимности
  38.  
  39.     btr.AppendEntity(pline);
  40.     tr.AddNewlyCreatedDBObject(pline, true);
  41.     tr.Commit();
  42.   }
  43. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Atomohod

  • ADN OPEN
  • ****
  • Сообщений: 440
  • Карма: 1
Re: Отключение слоя на чертеже
« Ответ #8 : 19-11-2021, 20:30:35 »
Зачем тебе анонимный слой понадобился?
Я подумал что это может подойти чтобы разместить на этом слое объекты не предназначенные для широкой публики, и получить своего рода "сейф" внутри чертежа так как без написания кода туда не попасть. Может я не прав? Как Автодеск подразумевает назначение этого слоя?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13196
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отключение слоя на чертеже
« Ответ #9 : 19-11-2021, 20:52:05 »
Как Автодеск подразумевает назначение этого слоя?
Нигде не находил описания предназначения анонимных слоёв кроме того что они не видны в диспетчере слоёв. И соответственно им нельзя поменять свойства встроенными средствами AutoCAD без написания кода. Но то что вы предложили мне кажется совсем не надежным.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение