Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 30-05-2017, 18:43:30

Название: Как проверить, что пользователь указал на внешнюю ссылку
Отправлено: Алексей (IdeaSoft) от 30-05-2017, 18:43:30
Подскажите.

Через EditorInput делаю выбор примитива

Код - C# [Выбрать]
  1. PromptEntityResult res = .. GetEntity(...);

Как мне проверить, что пользователь
указал элемент внешней ссылки?

Название: Re: Как проверить, что пользователь указал на внешнюю ссылку
Отправлено: Александр Пекшев aka Modis от 30-05-2017, 18:52:58
Код - C# [Выбрать]
  1. PromptEntityResult per = ed.GetEntity(peo);
  2. if (per.Status != PromptStatus.OK)
  3. return;
  4.  
  5. // Open the block reference
  6.  
  7. BlockReference br =
  8. (BlockReference)tr.GetObject(
  9. per.ObjectId,
  10. OpenMode.ForRead
  11. );
  12.  
  13. // And the underlying block table record
  14.  
  15. btr =
  16. (BlockTableRecord)tr.GetObject(
  17. br.BlockTableRecord,
  18. OpenMode.ForRead
  19. );
  20.  
  21. // If it's an xref, store its ObjectId
  22.  
  23. if (btr.IsFromExternalReference)
  24. {
  25.         ed.WriteMessage("\nXref ID: " + br.BlockTableRecord.ToString());
  26.         xrefId = br.BlockTableRecord;
  27. }
  28. else
  29. {
  30.         // Otherwise print a message and loop
  31.        
  32.         ed.WriteMessage(
  33.         "\nMust be an external reference."
  34.         );
  35. }
Название: Re: Как проверить, что пользователь указал на внешнюю ссылку
Отправлено: Александр Ривилис от 30-05-2017, 19:21:43
Как мне проверить, что пользователь
указал элемент внешней ссылки?
Так будет выбран не элемент внешней ссылки, а вся внешняя ссылка. Чтобы выбрать элемент внешней ссылки смотри в сторону Editor.GetNestedEntity. Это не гарантирует выбор элемента внешней ссылки, но позволяет выбрать примитивы внутри внешней ссылки.
Название: Re: Как проверить, что пользователь указал на внешнюю ссылку
Отправлено: Алексей (IdeaSoft) от 30-05-2017, 19:32:49
Editor.GetNestedEntity
А вот эта функция (Editor.GetNestedEntity)
начиная с какого AutoCAD появилась?
Название: Re: Как проверить, что пользователь указал на внешнюю ссылку
Отправлено: Александр Ривилис от 30-05-2017, 19:35:38
А вот эта функция (Editor.GetNestedEntity)
начиная с какого AutoCAD появилась?
С AutoCAD 2006. Впрочем в 2005-ом я не проверял. :)
Название: Re: Как проверить, что пользователь указал на внешнюю ссылку
Отправлено: Алексей (IdeaSoft) от 30-05-2017, 19:45:01
С AutoCAD 2006
C 2006 вполне мне хватит
Название: Re: Как проверить, что пользователь указал на внешнюю ссылку
Отправлено: Алексей (IdeaSoft) от 30-05-2017, 19:46:55
Это не гарантирует выбор элемента внешней ссылки, но позволяет выбрать примитивы внутри внешней ссылки.
Так что же я получу коллекцию элементов ссылки, а там потом сам буду выбирать то что мне нужно
по признаку геометрического положения?
Название: Re: Как проверить, что пользователь указал на внешнюю ссылку
Отправлено: Александр Ривилис от 30-05-2017, 20:03:20
Так что же я получу коллекцию элементов ссылки, а там потом сам буду выбирать то что мне нужно
по признаку геометрического положения?
Ты получишь один примитив, но если бы ты использовал GetEntity для внешней ссылки, то получил бы BlockReference для внешней ссылки, а если используешь GetNestedEntity, то получишь примитив внутри внешней ссылки, на который укажет пользователь (это может быть отрезок, полилиния, круг и т.д.)
Название: Re: Как проверить, что пользователь указал на внешнюю ссылку
Отправлено: Александр Ривилис от 30-05-2017, 20:07:30
Может быть полезно: Запуск команды ССЫЛРЕД (REFEDIT) с выбранным примитивом средствами .NET (http://adn-cis.org/zapusk-komandyi-ssyilred-refedit-s-vyibrannyim-primitivom-sredstvami-net.html)