Сечение поверхностью и проецирование в эскиз

Автор chum, 04.12.11, 04:13:34

« назад - далее »

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

chum

Уважаемые форумчане,
подскажите, как программно сделать операцию "сечение поверхностью" для построенной детали. А затем в нужной мне плоскости, создав эскиз, туда "Спроецировать объект"? Если кто сталкивался, то ткните меня носом, пожалуйста,  в соответствующие разделы  help'а  SDK ( не могу найти..... ) или, в виде примера, если возможно......

ksCutByPlaneDefinition,  ICutByPlaneDefinition Интерфейс операции сечения плоскостью.
ksSketchDefinition::AddProjectionOf,  ISketchDefinition::AddProjectionOf Добавить в эскиз проекцию объекта.

chum


chum

08.12.11, 00:50:55 #3 Последнее редактирование: 08.12.11, 01:09:11 от chum
Я плоскостью рассекла тело вращения, тем самым на детали образовалась грань, полученная сечением. Как правильно получить ребра, которые к ней примыкают? Может быть, я не так совсем верно выразилась, но мне потом нужно спроецировать некоторые из этих ребер на другую плоскость (в эскиз). Для AddProjectionOf нужно параметром указать entity ребра.
Пытылась так:
entityEdgeFace:= ksEntity( iPart.NewEntity(o3d_edge ));
                    if entityEdgeFace <> nil then
                      begin
                         EdgeFaceDef:= ksFaceDefinition(entityEdgeFace.GetDefinition);
                         if EdgeFaceDef <> nil then
                           begin
                            iEdgeCollection:= ksEdgeCollection(EdgeFaceDef.EdgeCollection);

а далее в цикле до iEdgeCollection.GetCount-1 хотела получать получать entity каждого ребра грани и засовывать их параметром  в AddProjectionOf,
но что-то запуталась.......
Пожалуйста, подскажите, как нужно правильно получить коллекцию ребер, которые граничат с сечением, чтоб их можно было спроецировать в эскиз?

А Вы справку читали?
ksSketchDefinition::AddProjectionOf
ISketchDefinition::AddProjectionOf
Добавить в эскиз проекцию объекта.
Синтаксис Automation:long AddProjectionOf (LPDISPATCH entity);
Синтаксис COM:long AddProjectionOf (LPENTITY entity);
Входной параметр:entity - указатель на интерфейс объектаksEntity или IEntity.
Возвращаемое значение: указатель на группу объектов, получившихся в результате проецирования.

Примечание:
1. Данный метод работает только в режиме редактирования эскиза
2. Параметр entity может быть указателем на ребро, вершину или грань.

chelkar

Цитата: chum от 08.12.11, 00:50:55
но что-то запуталась.......
Пожалуйста, подскажите, как нужно правильно получить коллекцию ребер, которые граничат с сечением, чтоб их можно было спроецировать в эскиз?
Сначала, в КОМПАСе, в визуальном режиме стукните мышкой в полученную операцию - Сечение .., в Дереве построения.
Одновременно с этим действием подсветятся грани и ребра модели, которые породила эта операция.
Их можно получить через API.
Для этого от IEntity, которую вы создали надо получить интерфейс элемента Дерева построеняи через IEntity::GetFeature().
Далее берем IFeature::EntityCollection с нужным типом. Это и будет то что создалось в модели при выполнении операции.
Дальше берем эскиз на редактирование ISketchDefinition::BeginEdit и можно проецировать ребра.

Меня смущает ваша фраза "некоторые ребра". Вы знаете какие? По каким признакам их можно определить?
Если, например, известны координаты, то можно взять всю коллекцию ребер и выполнить IEntityCollection::SelectByPoint




chum

Цитата: Sabahs от 08.12.11, 09:11:13
А Вы справку читали?
ksSketchDefinition::AddProjectionOf
ISketchDefinition::AddProjectionOf
Добавить в эскиз проекцию объекта.
Синтаксис Automation:long AddProjectionOf (LPDISPATCH entity);
Синтаксис COM:long AddProjectionOf (LPENTITY entity);
Входной параметр:entity - указатель на интерфейс объектаksEntity или IEntity.
Возвращаемое значение: указатель на группу объектов, получившихся в результате проецирования.

Примечание:
1. Данный метод работает только в режиме редактирования эскиза
2. Параметр entity может быть указателем на ребро, вершину или грань.

Sabahs, да, этот раздел я читала (вы мне ссылку в посте выше дали). Только судя по последнему Вашему сообщению, вы считаете, что я принципиально неверно поняла справку.  В чем мой косяк?

chum

Цитата: chelkar от 08.12.11, 11:30:34
Меня смущает ваша фраза "некоторые ребра". Вы знаете какие? По каким признакам их можно определить?
Если, например, известны координаты, то можно взять всю коллекцию ребер и выполнить IEntityCollection::SelectByPoint
chelkar, спасибо за совет, приду домой, попробую сделать. Да, ребра мне нужно не все спроецировать, какие тоже знаю.

Вроде уважаемый chelkar, Вам все разжевал, но если, что поможем.