Обрезка объектов в соответствии с кромками других объектов

Автор Тема: Обрезка объектов в соответствии с кромками других объектов  (Прочитано 7678 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 14
  • Карма: -1
Добрый день.

Подскажите пожалуйста как выполнить обрезку объектов внутри выделенных замкнутых полилиний.
Не могу понять как задать облать внутри полилинии для команды _trim

Команду посылаю через acDoc.SendStringToExecute("_Trim ", false, false, true);

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Если касаться именно команд, то у _.trim есть забавная опция: _fence. Хотя я бы подумывал о получении точек пересечения и нормальном разбитии объектов. Или есть второй вариант - использовать _clip и соответствующие словари (правда, работает это только для блоков и ссылок).
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • ADN OPEN
  • Сообщений: 14
  • Карма: -1
Если говорить об опции _fence, как мне потом задать координаты точек.

Пытаюсь сделать таким образом, но ничего не выходит

Код - C# [Выбрать]
  1. acDoc.SendStringToExecute("_Trim _fence ", points[0], points[2]," "false, false, true);

Подскажите как правильно. Точки не должны выбираться пользователем.

п.с.
Код - C# [Выбрать]
  1. var points = new List<Point3d>();
  2.  for (int i = 0; i < acEnt.NumberOfVertices; i++)
  3.     {
  4.        points.Add(acEnt.GetPoint3dAt(i));
  5.     }
  6.  
« Последнее редактирование: 13-05-2015, 16:13:13 от JustMe »

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

  • ADN OPEN
  • Сообщений: 14
  • Карма: -1
Попытался сделать через (command), повторив команду _.trim c пользовательским вводом

Код - C# [Выбрать]
  1. public void Test()
  2.         {
  3.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  4.             PromptEntityOptions prOpt =
  5.               new PromptEntityOptions("\nУкажите объект: ");
  6.             PromptEntityResult rs = ed.GetEntity(prOpt);
  7.             if (rs.Status != PromptStatus.OK) return;
  8.             PromptPointOptions p1Opt =
  9.               new PromptPointOptions("\nУкажите первую точку");
  10.             PromptPointResult rs1 = ed.GetPoint(p1Opt);
  11.             if (rs1.Status != PromptStatus.OK) return;
  12.             PromptPointOptions p2Opt =
  13.               new PromptPointOptions("\nУкажите вторую точку");
  14.             PromptPointResult rs2 = ed.GetPoint(p2Opt);
  15.             if (rs2.Status != PromptStatus.OK) return;
  16.             ed.Command("._trim ", "_fence ",rs.ObjectId, rs1.Value, rs2.Value, "");
  17.         }

но после запуска команды в Autocad выдает ошибку, что команда _trim неизвестна, помогите пожалуйста разобраться

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Я практически не пишу на .NET, но все же позволю себе вопрос: это Command не срабатывает или SendStringToExecute?
Откровенно говоря, я затрудняюсь описать весь алгоритм, который будет гарантированно возвращать корректный результат. А позориться с сырым решением не хочу.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • ADN OPEN
  • Сообщений: 14
  • Карма: -1
SendStringToExecute формат записи в принципе не верный...откровенно говоря не нашел куда там можно вставить координаты точек.

А вот command взял по примеру
http://adn-cis.org/forum/index.php?topic=1816.15, последний пост
Где Александр Ревилис показывал как осуществить команду _.MOVE

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А вот command взял по примеру
http://adn-cis.org/forum/index.php?topic=1816.15, последний пост
Где Александр Ривилис показывал как осуществить команду _.MOVE
Какая версия AutoCAD?
P.S.: В ed.Command() не нужно дополнительного пробела после имени команды и опции команды. Т.е. не "._trim ", а "_.trim" и не "_fence ", а "_fence".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 14
  • Карма: -1
Александр Ривилис , Прошу прощения, это все от невнимательности.

AutoCAD 2010

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

  • ADN OPEN
  • Сообщений: 14
  • Карма: -1
Да, действительно, убрав пробелы команда _.trim заработала, но вот координаты точек для линии _fence не воспринимаются.

Цитировать
командная строка Autocad:
Команда: testmove
Укажите объект:
Укажите первую точку:
Укажите вторую точку: ._trim
Текущие установки: Проекция=ПСК, Кромки=Без продолжения
Выберите режущие кромки ...
Выберите объекты или <выбрать все>: _fence
Укажите первую точку линии выбора:
Неверный ответ.
Укажите первую точку линии выбора:

А вообще в  ed.Command() я бы хотел передавать конкретные координаты для линии выбора.

Отмечено как Решение JustMe 13-05-2015, 20:23:42

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я предлагаю категорически отказаться от запуска команды _TRIM. Причину могу объяснить:
1) Устойчиво код с запуском команды _TRIM работать не будет.
2) Точки указания должны быть видны на экране
3) Вместо ObjectId объектов нужно передавать список содержащий точку указания и ads_name
4) Вполне возможно, что в AutoCAD 2010 Point3d не преобразовывается автоматом в ads_point, который и нужно передавать в ed.Command
5) Еще чего-нибудь я забыл.

Так что напиши свой аналог команды _TRIM для своего конкретного случая обрезки внутри замкнутой полилинии.

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

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

  • ADN OPEN
  • Сообщений: 14
  • Карма: -1
Понял, спасибо, буду разбираться. Кстати искомый результат достигается, когда изменил порядок в ed.Command

ed.Command("_trim","_SI",rs.ObjectId,"_fence",rs1.Value,rs2.Value,"");