Цвет псевдоразреза.

Автор Тема: Цвет псевдоразреза.  (Прочитано 6119 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Цвет псевдоразреза.
« : 19-08-2020, 15:39:02 »
Можно ли программно задать цвет псевдоразреза? Может быть по этому поводу есть какая-нибудь системная переменная? Я что-то не нашел...:(

Заранее благодарен!

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Цвет псевдоразреза.
« Ответ #1 : 19-08-2020, 15:40:43 »
Можно ли программно задать цвет псевдоразреза? Может быть по этому поводу есть какая-нибудь системная переменная? Я что-то не нашел...:(

Заранее благодарен!


Это что за псевдоразрез??? Подробнее пожалуйста. А еще лучше чертежик с таким псевдоразрезом.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Цвет псевдоразреза.
« Ответ #2 : 19-08-2020, 16:44:45 »
Я так понял, что ты про _LIVESECTION и _SECTIONPLANESETTINGS. То что есть в диалоговом окне _SECTIONPLANESETTINGS ни в каких системных переменных не появляется. Это объект класса AcDbSectionSettings (SectionSettings в .NET)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Цвет псевдоразреза.
« Ответ #3 : 19-08-2020, 16:59:43 »
В VisualLisp/AutoLisp нет удобного API для работы с SectionSettings.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Re: Цвет псевдоразреза.
« Ответ #4 : 19-08-2020, 17:09:06 »
В VisualLisp/AutoLisp нет удобного API для работы с SectionSettings.
Жаль...:(

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Цвет псевдоразреза.
« Ответ #5 : 19-08-2020, 19:41:32 »
Балиев,
Зато это можно сделать из .NET и ObjectARX.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Re: Цвет псевдоразреза.
« Ответ #6 : 19-08-2020, 20:00:36 »
Зато это можно сделать из .NET и ObjectARX.
Это я понял...

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Цвет псевдоразреза.
« Ответ #7 : 19-08-2020, 20:05:02 »
Зато это можно сделать из .NET и ObjectARX.
Это я понял...
Пример нужен?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Re: Цвет псевдоразреза.
« Ответ #8 : 19-08-2020, 20:07:17 »

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Цвет псевдоразреза.
« Ответ #9 : 19-08-2020, 20:09:24 »
Пример нужен?
Да, конечно.
А чего молчишь? Подготовлю пример и выложу. Тему перенесу в раздел .NET
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Re: Цвет псевдоразреза.
« Ответ #10 : 19-08-2020, 21:16:30 »
Подготовлю пример и выложу. Тему перенесу в раздел .NET
ОК.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Цвет псевдоразреза.
« Ответ #11 : 20-08-2020, 00:39:47 »
В первом приближении получился такой код:
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7. using Autodesk.AutoCAD.Windows;
  8. using Autodesk.AutoCAD.Colors;
  9.  
  10. // This line is not mandatory, but improves loading performances
  11. [assembly: CommandClass(typeof(Rivilis.SetSectionSettings))]
  12.  
  13. namespace Rivilis
  14. {
  15.   public class SetSectionSettings
  16.   {
  17.     [CommandMethod("SetSectionColor")]
  18.     public void MyCommand()
  19.     {
  20.       Document doc = Application.DocumentManager.MdiActiveDocument;
  21.       if (doc == null) return;
  22.       Editor ed = doc.Editor;
  23.  
  24.       PromptEntityOptions peo = new PromptEntityOptions("\nВыберите сечение: ");
  25.       peo.SetRejectMessage("\nЭто не сечение!");
  26.       peo.AddAllowedClass(typeof(Section), true);
  27.       PromptEntityResult per = ed.GetEntity(peo);
  28.       if (per.Status != PromptStatus.OK) return;
  29.       ObjectId idSecSets = ObjectId.Null;
  30.       using (Transaction tr = doc.TransactionManager.StartOpenCloseTransaction())
  31.       {
  32.         Section sec = tr.GetObject(per.ObjectId, OpenMode.ForRead) as Section;
  33.         idSecSets = sec.Settings;
  34.         tr.Commit();
  35.       }
  36.       using (Transaction tr = doc.TransactionManager.StartOpenCloseTransaction())
  37.       {
  38.         SectionSettings secset = tr.GetObject(idSecSets, OpenMode.ForWrite) as SectionSettings;
  39.         Color clr = secset.Color(SectionType.LiveSection, SectionGeometry.IntersectionFill);
  40.         ColorDialog cd = new ColorDialog();
  41.         cd.Color = clr;
  42.         System.Windows.Forms.DialogResult dr = cd.ShowDialog();
  43.         if (dr != System.Windows.Forms.DialogResult.OK) return;
  44.         ed.WriteMessage("\nВыбран цвет: " + cd.Color.ToString());
  45.         clr = cd.Color;
  46.         // Определяет цвет чего мы меняем
  47.         secset.SetColor(SectionType.LiveSection, SectionGeometry.IntersectionFill, clr);
  48.         tr.Commit();
  49.       }
  50.       short _cmdecho = (short)Application.GetSystemVariable("CMDECHO");
  51.       Application.SetSystemVariable("CMDECHO", 0);
  52.       ed.Command("_LIVESECTION", per.ObjectId); // Отключаем LIVESECTION
  53.       ed.Command("_LIVESECTION", per.ObjectId); // Включаем LIVESECTION
  54.       Application.SetSystemVariable("CMDECHO", _cmdecho);
  55.     }
  56.   }
  57. }

Пришлось воспользоваться командным методом для включения/выключения LIVESECTION для того, чтобы цвет сечения поменялся на экране. Задам вопрос в ADN DevHelp можно ли тоже самое сделать при помощи чистого .NET-кода без использования командных методов.

Результат:


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Re: Цвет псевдоразреза.
« Ответ #12 : 20-08-2020, 11:27:18 »
В первом приближении получился такой код:
Классно! Но у меня такой вопрос: как сечение найти программно - не указывая на экране? Оно у меня всегда одно, поэтому выбирать, собственно, не из чего.

Отмечено как Решение Балиев 20-08-2020, 13:14:49

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Цвет псевдоразреза.
« Ответ #13 : 20-08-2020, 13:07:44 »
LIVESECTION (ПСЕВДОРАЗРЕЗ) может быть только один. Поэтому:

Код - C# [Выбрать]
  1. [CommandMethod("SetLiveSectionColor")]
  2. public void SetLiveSectionColor()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   if (doc == null) return;
  6.   Editor ed = doc.Editor;
  7.   ObjectId idLiveSect = ObjectId.Null;
  8.   ObjectId idSecSets = ObjectId.Null;
  9.   using (Transaction tr = doc.TransactionManager.StartOpenCloseTransaction())
  10.   {
  11.     SectionManager sm = tr.GetObject(doc.Database.SectionManagerId, OpenMode.ForRead) as SectionManager;
  12.     if (sm != null) {
  13.       idLiveSect = sm.LiveSection;
  14.       Section sec = tr.GetObject(sm.LiveSection, OpenMode.ForRead) as Section;
  15.       idSecSets = sec.Settings;
  16.     }
  17.     tr.Commit();
  18.   }
  19.   if (idSecSets != ObjectId.Null)
  20.   {
  21.     using (Transaction tr = doc.TransactionManager.StartOpenCloseTransaction())
  22.     {
  23.       SectionSettings secset = tr.GetObject(idSecSets, OpenMode.ForWrite) as SectionSettings;
  24.       Color clr = secset.Color(SectionType.LiveSection, SectionGeometry.IntersectionFill);
  25.       ColorDialog cd = new ColorDialog();
  26.       cd.Color = clr;
  27.       System.Windows.Forms.DialogResult dr = cd.ShowDialog();
  28.       if (dr != System.Windows.Forms.DialogResult.OK) return;
  29.       ed.WriteMessage("\nВыбран цвет: " + cd.Color.ToString());
  30.       clr = cd.Color;
  31.       // Определяет цвет чего мы меняем
  32.       secset.SetColor(SectionType.LiveSection, SectionGeometry.IntersectionFill, clr);
  33.       tr.Commit();
  34.     }
  35.     short _cmdecho = (short)Application.GetSystemVariable("CMDECHO");
  36.     Application.SetSystemVariable("CMDECHO", 0);
  37.     ed.Command("_LIVESECTION", idLiveSect); // Отключаем LIVESECTION
  38.     ed.Command("_LIVESECTION", idLiveSect); // Включаем LIVESECTION
  39.     Application.SetSystemVariable("CMDECHO", _cmdecho);
  40.   }
  41. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Re: Цвет псевдоразреза.
« Ответ #14 : 20-08-2020, 13:14:42 »
LIVESECTION (ПСЕВДОРАЗРЕЗ) может быть только один
Спасибо! То, что надо.