Как получить объекты из документа 2D в формате cdw ?
Цитата: dosart от 13.10.16, 18:15:26
Как получить объекты из документа 2D в формате cdw ?
Вы свой вопрос, ещё раз перечитайте, может у Вас к себе вопросы появятся.
PS. Бинарный формат компактней, но свой формат.
Нет, вопросов, к сожалению, нет.
Есть у меня файлик в формате cdw. В файлике кружки и рамка. Как мне получить список кружков?
Так получите от контейнера коллекцию окружностей IDrawingContainer.Circles.
Sabahs, вы не подскажете, как получить данный интерфейс. Я пытался, но ничего не получается.
Оптимальный вариант показать, где проблема, на каком этапе Вы теряете интерфейс.
Я уже разобрался с получением объектов.
Как быть, если необходимо использовать объекты. Например, взять объект и нарисовать на другом чертеже?
Раз Вы получили объект, значит знаете все его параметры, на новом чертеже создаёте такой же новый объект.
Sabahs как получить сложный объект целиком(иашинку например), а не примитивы, из которых он состоит?
Давайте в картинках, хотя судя по вопросу и так понятно, сложные объекты бывают разные.
Вы можете нормально вопросы задавать?
Цитироватькак получить сложный объект целиком(иашинку например), а не примитивы, из которых он состоит?
Что такое
иашинка я не знаю, если имелась ввиду машинка, то в API Компас-3D нет таких сложных объектов, как: самолёт, самокат, велосипед и т.д.
а макроэлемент целиком, или вид?
Цитата: Kirilius83 от 02.11.16, 11:10:35
а макроэлемент целиком, или вид?
Вам оно зачем, я не видел, чтобы Вы программы под Компас-3D писали.
Тем более, знаете ответ, что можно, вроде Вы не новичок.
PS. Если Вам сильно нужен ответ, то воспользуйтесь поиском по форуму.
У меня есть такой чертёж
самолёт (https://yandex.ru/images/search?img_url=http%3A%2F%2Faircraftworld.ru%2Fimg%2F2015%2F082109%2F1151222&text=%D1%87%D0%B5%D1%80%D1%82%D1%91%D0%B6%20%D1%81%D0%B0%D0%BC%D0%BE%D0%BB%D1%91%D1%82%20%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D1%81&noreask=1&pos=0&lr=11083&rpt=simage)
Как мне вытащить УГО самолёта из чертежа, сохранить в память компьютера, а потом сохранить в другой чертёж
Картинки можно к сообщению прикреплять, ответить в двух словах не получиться, со сложными объектами нужно играться, на это времени у меня нет. Когда у Вас появится конкретный вопрос с кодом и проблемой, тогда можно о чем то разговаривать.
Понятно. Спасибо. Но технически такая возможность, как я понимаю есть?
Если в Компасе выделить объект, нажать Ctrl + C, выбрать начало координат, а потом в новом документе нажать Ctrl + V, то объект будет добавлен в новый документ.
Техническая возможность, есть всегда, нажать Ctrl+C и Ctrl+V можно и программно, но это уже к Компасу не относится.
В сторону какого интерфеса надо смотреть, чтобы решить данную проблему?
Если руками скопировать объект в файл формата crw, то его получание програмным путём выглядит легче. Но, всё равно, не понятно, в сторону какого интерфейса смотреть.
IDrawingContainer
Это коллекция примитивов. А если на чертеже, объект представлен не как коллекция примитивов, а как макрообъект. Есть возможность с ним работать как с единым целом?
В SDK есть соответствующий интерфейс. но не очень понятно, имея такой макрообъект скопировать его в память, а потом начертить в другом документе.
IDrawingContainer.MacroObjects
Типа макрообъект - не примитив?
ЦитироватьТипа макрообъект - не примитив?
не знаю.
Я думал, что примитив, это окружности, отрезки и прочее.
Так посмотрите SDK, какие типы есть.
Sabahs, если сделать так;
MacroObjects.MacroObject[0] то мне вернётся макрообъект цельный(т.е. деление на дальнейшие примитивы не пойдёт).
Нет.
Возвращается нулевой элемент колекции MacroObjects?
Откуда я знаю, что возвращается я кода вопроса не вижу.
Sabahs, можно макроэлемент "разобрать" на составные части? На примитивы вроде линий и окружностей.
Можно.
Какой интерфейс для это нужно использовать?
Тут сложнее, хотя, где то есть, ищите.
Использовалось здесь http://forum.ascon.ru/index.php/topic,20277.msg130327.html#msg130327 (http://forum.ascon.ru/index.php/topic,20277.msg130327.html#msg130327) это коммерческий продукт, хоть и бесплатный для использования.
Sabahs, т.е. стандартными средствами API компаса нельзя разбить макрообъект на примитивы? У меня просто была идея разбить макрообъект на примитивы, и изменить координаты каждого примитива, чтобы, хотя бы сдвинуть объект.
Можно, читайте SDK, там всё написано.
PS. Зачем его разбивать, чтобы сдвинуть? Он двигается без разбиения.
а если через API? То можно сдвинуть не разбирая?
На этом, тема, закрыта - не люблю ленивых.
Вам лень почитать.
IMacroObject.SetPlacement
Я знаю про эту функцию.
Вот и хорошо, на этой оптимистичной новости, тему закрываем.
Sabahs,
если есть потребность научиться рисовать кружочки, то как это сделать правильно? Я делаю так, у меня вылетает на строчке:
IDrawingObject drawingObject = (IDrawingObject) view;
ViewsAndLayersManager viewsAndLayersManager = document2D.ViewsAndLayersManager;
IViews views = viewsAndLayersManager.Views;
IView view = views.View[0];
IDrawingObject drawingObject = (IDrawingObject) view;
ICircle circle = (ICircle) drawingObject;
circle.Xc = 100;
circle.Yc = 100;
circle.X = 150;
circle.Yc = 205;
circle.Radius = 100;
drawingObject.Update();
IDrawingContainer drawingContainer = (IDrawingContainer)view;
[/code]
http://forum.ascon.ru/index.php/topic,20426.msg131779.html#msg131779 (http://forum.ascon.ru/index.php/topic,20426.msg131779.html#msg131779)
Вообще у Вас код написан через ...
После получения вида, нужно получить контейнер, затем коллекцию окружностей, а от неё получить интерфейс окружности, далее заполнить и создать её.
ViewsAndLayersManager viewsAndLayersManager = document2D.ViewsAndLayersManager;
IViews views = viewsAndLayersManager.Views;
IView view = views.View[0];
IDrawingContainer drawingContainer = (IDrawingContainer)view;
ICircles Circles = drawingContainer.Circles
ICircle circle = ICircles.Add
IDrawingObject drawingObject = (IDrawingObject) circle
circle.Xc = 100;
circle.Yc = 100;
circle.Radius = 100;
circle.Style = 1;
drawingObject.Update();