часть шара

Автор DVRU, 11.05.10, 19:01:38

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

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

DVRU

Подскажите как сделать в Делфях чтобы Компас из цилиндра вырезал часть сферы (то что красным)

bergovin

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

Вобщем ручками (или потом и програмно) это делается например так:
рисуется эскиз образующей сферы (полуокружность)
затем выполняется операция Вырезать вращением (вращение этого эскиза на требуемый угол)

DVRU

а какие процедуры рисуют полуокружность и вырезают? и есть ли список процедур и функций и их описание?

bergovin

Цитата: DVRU от 11.05.10, 20:21:12
а какие процедуры рисуют полуокружность и вырезают? и есть ли список процедур и функций и их описание?
изучи SDK

DVRU

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

bergovin

Цитата: DVRU от 11.05.10, 20:59:25
извините мне некогда изучать, был бы благодарен если бы помогли с данным вопросом
мне тоже некогда, только если вам некогда изучать программирование в КОМПАСе, зачем вообще за это браться. Сделайте это ручками раз вы далеки от программирования

Николай

Если надо сделать просто трёхмерку- выложите сюда и вам помогут достроить. А если делаете программу по автоматической генерации резцов- кто же за вас эту работу сделает? bergovin вам правильно ответил.

Maxagg

вообще то там не сферой резать надо а многоугольником

Maxagg

а вот пример как резать по нему можно разобраться что и как

DVRU

Почему из цилиндра не хочет вырезать фигуру?
может повлиять то что цилиндр и фигура в разных плоскостях?

iOffsetPlaneEntity := ksEntity(iPart.NewEntity(o3d_planeOffset));
if (iOffsetPlaneEntity <> nil) then
begin
iOffsetPlaneDef :=ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition);
if (iOffsetPlaneDef <> nil) then
begin
iOffsetPlaneDef.Offset:=a;
iOffsetPlaneDef.SetPlane(PlaneXOY);
iOffsetPlaneDef.direction:=true;
iOffsetPlaneEntity.Hidden:=true;
iOffsetPlaneEntity.Create;
end;
end;

iSketchEntity := ksEntity(iPart.NewEntity(o3d_sketch));
if (iSketchEntity <> nil) then
begin
iSketchDef := ksSketchDefinition(iSketchEntity.GetDefinition);
if (iSketchDef <> nil) then
begin
iSketchDef.SetPlane(iOffsetPlaneEntity);
iSketchEntity.Create;
iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);
if iSketchDocument2D <> nil then begin
iSketchDocument2D.ksCircle(-50,-50,b-1,1);
end;
iSketchDef.EndEdit;
end;
end;

iBaseExtrusionEntity := ksEntity(iPart.NewEntity( o3d_baseExtrusion ));
Color := ksColorParam(iBaseExtrusionEntity.ColorParam);
Color.color:=RGB(75,80,95);
if iBaseExtrusionEntity <> nil then begin
iBaseExtrusionDef := ksBaseExtrusionDefinition(iBaseExtrusionEntity.GetDefinition);
if iBaseExtrusionDef <> nil then begin
iBaseExtrusionDef.directionType:=0;
   iBaseExtrusionDef.SetSideParam(True,etBlind, 175-a, 0, true );
   iBaseExtrusionDef.SetSketch( iSketchEntity );
   iBaseExtrusionEntity.Create;
end;
end;


iOffsetPlaneEntity := ksEntity(iPart.NewEntity(o3d_planeOffset));
if (iOffsetPlaneEntity <> nil) then
begin

iOffsetPlaneDef :=ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition);
if (iOffsetPlaneDef <> nil) then
begin

iOffsetPlaneDef.Offset :=38;
iOffsetPlaneDef.SetPlane(PlaneYOZ);
iOffsetPlaneDef.direction := true;
iOffsetPlaneEntity.Hidden := true;
iOffsetPlaneEntity.Create;
end;
end;

iSketchEntity := ksEntity( iPart.NewEntity( o3d_sketch ));
if iSketchEntity <> nil then
begin
iSketchDef := ksSketchDefinition(iSketchEntity.GetDefinition);
if iSketchDef <> nil then
begin
iSketchDef.SetPlane(iOffsetPlaneEntity);
iSketchEntity.Create;
iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);
if iSketchDocument2D <> nil then
begin
iSketchDocument2D.ksLineSeg(-a-45,50,-a-45,50+b-1,1);
iSketchDocument2D.ksLineSeg(-a-45,50+b-1,-a-10,50+b-1,1);
iSketchDocument2D.ksLineSeg(-a-10,50+b-1,-a-20,50,1);
iSketchDocument2D.ksLineSeg(-a-20,50,-a-45,50,1);
end;
end;
end;
iSketchDef.EndEdit;
end;

iCutExtrusionEntity := ksEntity(iPart.NewEntity( o3d_cutExtrusion ));
Color := ksColorParam(iCutExtrusionEntity.ColorParam);
Color.color:=RGB(150,170,190);
if iCutExtrusionEntity <> nil then begin
iCutExtrusionDef := ksCutExtrusionDefinition(iCutExtrusionEntity.GetDefinition);
if iCutExtrusionDef <> nil then begin
iCutExtrusionDef.directionType:=0;
   iCutExtrusionDef.SetSideParam(true,etBlind, 30, 0, false );
   iCutExtrusionDef.SetSketch( iSketchEntity );
   iCutExtrusionEntity.Create;
end;

Maxagg

ошибка у вас скорее всего в a и b
вот ваш код, немного урезанный
полностью работает

iOffsetPlaneEntity := ksEntity(iPart.NewEntity(14));
PlaneXOY:=ksEntity(iPart.NewEntity(1));
iOffsetPlaneDef :=ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition);
iOffsetPlaneDef.Offset:=10;
iOffsetPlaneDef.SetPlane(PlaneXOY);
iOffsetPlaneDef.direction:=true;
iOffsetPlaneEntity.Hidden:=true;
iOffsetPlaneEntity.Create;

iSketchEntity := ksEntity(iPart.NewEntity(5));
iSketchDef := ksSketchDefinition(iSketchEntity.GetDefinition);
iSketchDef.SetPlane(iOffsetPlaneEntity);
iSketchEntity.Create;
iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);
iSketchDocument2D.ksCircle(-10,-10,10,1);
iSketchDef.EndEdit;

iBaseExtrusionEntity := ksEntity(iPart.NewEntity(24));
iBaseExtrusionDef := ksBaseExtrusionDefinition(iBaseExtrusionEntity.GetDefinition);
iBaseExtrusionDef.directionType:=0;
iBaseExtrusionDef.SetSideParam(True,0, 175, 0, true );
iBaseExtrusionDef.SetSketch( iSketchEntity );
iBaseExtrusionEntity.Create;

iOffsetPlaneEntity := ksEntity(iPart.NewEntity(14));
PlaneYOZ := ksEntity(iPart.NewEntity(3));
iOffsetPlaneDef :=ksPlaneOffsetDefinition(iOffsetPlaneEntity.GetDefinition);
iOffsetPlaneDef.Offset :=38;
iOffsetPlaneDef.SetPlane(PlaneYOZ);
iOffsetPlaneDef.direction := true;
iOffsetPlaneEntity.Hidden := true;
iOffsetPlaneEntity.Create;

iSketchEntity := ksEntity( iPart.NewEntity(5));
iSketchDef := ksSketchDefinition(iSketchEntity.GetDefinition);
iSketchDef.SetPlane(iOffsetPlaneEntity);
iSketchEntity.Create;
iSketchDocument2D := ksDocument2D(iSketchDef.BeginEdit);
iSketchDocument2D.ksLineSeg(-45,50,-45,10,1);
iSketchDocument2D.ksLineSeg(-45,10,-90,10,1);
iSketchDocument2D.ksLineSeg(-90,10,-110,50,1);
iSketchDocument2D.ksLineSeg(-110,50,-45,50,1);
iSketchDef.EndEdit;

iCutExtrusionEntity := ksEntity(iPart.NewEntity(26));
iCutExtrusionDef := ksCutExtrusionDefinition(iCutExtrusionEntity.GetDefinition);
iCutExtrusionDef.directionType:=0;
iCutExtrusionDef.SetSideParam(true,0, 30, 0, false );
iCutExtrusionDef.SetSketch( iSketchEntity );
iCutExtrusionEntity.Create;

DVRU

выбрав плоскость например iOffsetPlaneDef.SetPlane(PlaneYOZ); я черчу круг и с помощью
iBaseExtrusionEntity := ksEntity(iPart.NewEntity( o3d_baseExtrusion ));
Color := ksColorParam(iBaseExtrusionEntity.ColorParam);
Color.color:=RGB(220,225,235);
iBaseExtrusionDef := ksBaseExtrusionDefinition(iBaseExtrusionEntity.GetDefinition);
iBaseExtrusionDef.directionType:=dtNormal;
iBaseExtrusionDef.SetSideParam( true,etBlind, a, 0, true );
iBaseExtrusionDef.SetSketch( iSketchEntity );
iBaseExtrusionEntity.Create;
получаю цилиндр. Почему у меня цилиндр строится вдоль оси X либо в положительную сторону либо в отрицательную (при выборе разных плоскостей) можно например построить в плоскости YOZ круг и чтобы процедурой начертился цилиндр в сторону отрицательного X ???

Maxagg

iBaseExtrusionDef.SetSideParam( true,etBlind, a, 0, true );
в этой процедуре указываются параметры, определитесь с а и b
причем в данной процедуре "а" не может быть отрицательным,  а направление задает первый параметр