Отверстие с зенковкой.

Автор graphdark, 14.07.21, 13:52:42

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

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

graphdark

Никак не соображу, как построить. Простое вырезание и фаска не подходит.

Просто вырезание, не подходит?
Либо смотреть интерфейс - IHole3D.

Ушкуй

Справка "Отверстие с зенковкой" недоступна?

graphdark

Цитата: Ушкуй от 14.07.21, 13:57:42Справка "Отверстие с зенковкой" недоступна?
Ткните носом.

Ушкуй

Нате!  :sun:

VLaD-Sh

Цитата: Ушкуй от 14.07.21, 14:33:59Нате!  :sun:
А где код? Это же раздел программирования!!!!

Ушкуй


Kirilius83

фаску - вырезать по окружность, вращая вокруг оси отв.
я так понимаю, цель - что бы фаску можно было сделать не только на отв в плоских пов?

graphdark

Да в другой теме уже обсасывали задачу. На сложной поверхности (днище гост6533) строю отверстие и на нем фаску под сварку. И все выходит. Только беда, что отверстие из круглого становится овальным при проецировании на криволинейную поверхность, а уж фаска про кромке вообще делается невероятной. Просто в компасе пытался построить. Пришел к выводу, что самое простое решение на 0 плоскости ставлю точку в координатах отверстия, после для отверстия с зенковкой выбираю эту точку и криволинейную поверхность. В этом случае мертвы все зайцы. Отверстие строго перпендикулярно, фаска идеально точно, и соблюдаю координаты. Но вот счас начал ковырять интерфейс ihole3d

p3452

Нет там никаких проблем ни при программном, ни при "ручном" построении:
Кто ясно мыслит тот ясно излагает.png

graphdark

Цитата: p3452 от 14.07.21, 21:53:20Нет там никаких проблем ни при программном, ни при "ручном" построении:
Не поделитесь кодом? Для меня пока проблема.

p3452

graphdark, "с миру по нитке..." это не ваш случай, потому что - "не в коня корм", судя по упомянутой вами теме.
- Создали новую тему:
Цитата: graphdark от 14.07.21, 13:52:42Никак не соображу, как построить. Простое вырезание и фаска не подходит.
То что у меня на скрине, это и есть "простое вырезание и фаска", но это же вам "не подходит"! 

graphdark

Цитата: p3452 от 15.07.21, 10:05:33То что у меня на скрине, это и есть "простое вырезание и фаска", но это же вам "не подходит"! 
Мастера флуда. Где ж оно простое? Если у вас есть ось. Так полагаю перпендикулярна поверхности. Откуда и как эскиз начинаете? В той теме чуть не матом инженеры ругались. И даже, когда я поблагодарил за решение. Они не остановились и продолжили флудить совершенно не в тему. Все продолжается?

graphdark

#13
Цитата: Sabahs от 14.07.21, 13:57:18Просто вырезание, не подходит?
Либо смотреть интерфейс - IHole3D
Дабы не плодить тем, проблему свою почти решил. Никак не могу построить плоскость по касательной в точке.

  SurfCon := iPart as IAuxiliaryGeomContainer;
  planes3D := SurfCon.Planes3D;
  plane3D := planes3D.Add(o3d_PlaneByPointAndTangentToFace);

Но у Plane3D нет свойств face или point. ЧЯДНТ?

PS: У интерфейса ImdelObject вообще не увидел метода iplane3D


Slaviation

Добрый день.
Может как то так:
SurfCon := iPart as IAuxiliaryGeomContainer;
planes3D := SurfCon.Planes3D;
plane3D := planes3D.Add(o3d_PlaneByPointAndTangentToFace);
plane3D1 := plane3D as IPlane3DTangentToFaceInPoint;
и у plane3D1 должно быть свойство Face.

graphdark

Цитата: Slaviation от 23.07.21, 14:05:26plane3D as IPlane3DTangentToFaceInPoint
Спасибо. Полный код:
  SurfCon := iPart as IAuxiliaryGeomContainer;
  planes3D := SurfCon.Planes3D;
  plane3D := planes3D.Add(o3d_PlaneByPointAndTangentToFace);
  PlaneTan := plane3D as IPlane3DTangentToFaceInPoint;
  PlaneTan.Face := Surf as IModelObject;
  PlaneTan.Point := points;
  planeTan.Update;

graphdark

Чтобы не быть голословным. И, может, кому-то поможет. Полный код функции следующего алгоритма: Ставлю точку по координатам, от нее отрезок до днища Определяю точку пересечения, строю поверхность по касательной через точку, строю эскиз отверстия, вырезаю, строю фаски по условию. Не надо спрашивать зачем, как мне вопрошали в другой теме.

  AuxiliaryGeomContainer := iPart as IAuxiliaryGeomContainer;
  Lines3D := AuxiliaryGeomContainer.LineSegments3D;
  Line3D := Lines3D.Add;
  Line3D.BuildingType := ksLSTPointLenghtAngle;
  Line3D.SetPoint(true, 50, 50, 0);
  Line3D.Lenght := 700;
  Line3D.Angle := 270;
  XOZ := ksEntity(part.GetDefaultEntity(o3d_planeXOZ));
  XOZ := ksEntity(Kompas.TransferInterface(XOZ,ksAPI7Dual,0));
  Line3D.BasePlane := XOZ as IModelObject;
  edgePartCollection := ksEntityCollection(part.EntityCollection(o3d_vertex));
  edgePartCollection.SelectByPoint(X,Y,0);
  edgePartCollection := ksEntityCollection(edgePartCollection.First);
//  Построение отрезка от точки координат до днища.
//  line3D.AssociationObject[true];
//  Line3D.PointType(true, ksPParamCoord);
  Line3D.Name :='Coords';
  line3D.Hidden := true;
  Line3D.Update;
  point3D := modelContainer.Points3D;
  points := point3D.Add;
  points.ParameterType := ksPIntersect;
  EdgePartCollection := ksEntityCollection(Part.EntityCollection(o3d_face));
  edge := ksEntity(EdgePartCollection.GetByName('Outer',true,true));
  Surf := Kompas.TransferInterface(edge,ksAPI7Dual,0);
  paramIntersect := points.Parameters as IPoint3DParamIntersect;
  ParamIntersect.SetCurveObject(line3D);
  ParamIntersect.SetSurfaceObject(Surf as IModelObject);
  points.Hidden := true;
  points.Update;
//  Точка на пересечении отрезка с днищем.
  SurfCon := iPart as IAuxiliaryGeomContainer;
  planes3D := SurfCon.Planes3D;
  plane3D := planes3D.Add(o3d_PlaneByPointAndTangentToFace);
  PlaneTan := plane3D as IPlane3DTangentToFaceInPoint;
  PlaneTan.Face := Surf as IModelObject;
  PlaneTan.Point := points;
  PlaneTan.Name := 'Tangent';
  planeTan.Update;
  EdgePartCollection := ksEntityCollection(Part.EntityCollection(o3d_PlaneByPointAndTangentToFace));
  TangenPlaneAPI5 := ksEntity(edgePartCollection.GetByName('Tangent',true,true));
//  Эта строка меняет плоскость для апи7 в плоскость апи5
//  Касательная в точке
  Sketch := ksEntity(Part.NewEntity(o3d_sketch));
  SketchDefinition := ksSketchDefinition(Sketch.GetDefinition());
  SketchDefinition.SetPlane(TangenPlaneAPI5);
  Sketch.Create();
  Doc2D := ksDocument2D(SketchDefinition.BeginEdit());
  Doc2D.ksCircle(50, 50, 10, 1);
  SketchDefinition.EndEdit();
  EntityCut := ksEntity(Part.NewEntity(o3d_cutExtrusion));
  CutExtrusionDefinition := ksCutExtrusionDefinition(EntityCut.GetDefinition());
  CutExtrusionDefinition.cut := TRUE;
  CutExtrusionDefinition.directionType := dtNormal;
  CutExtrusionDefinition.SetSideParam(TRUE, 1, 2500, 0, false);
  CutExtrusionDefinition.SetSketch(Sketch);
  EntityCut.name := 'Отверстие';
  EntityCut.Create();
//  Отверстие и вырез
В этот раз спасибо Slaviation, Sabahs, Vitalij Lysanov. Без них я бы сделал, но еще бы неделю ковырял. Про фаски не написал, но если кому надо будет-добавлю.

PS: А может кто, для собственного развития пояснить. Апи7, без Апи5 никак, как и наоборот. Я раньше думал, что АПИ5-это делфи5, ну типа написано им. Это точно не так, выяснил в процессе. Нафига в АПИ7 переменная на каждый чих, нафиг она так Разительно от апи5 отличается?

Цитата: graphdark от 23.07.21, 15:48:55PS: А может кто, для собственного развития пояснить. Апи7, без Апи5 никак, как и наоборот. Я раньше думал, что АПИ5-это делфи5, ну типа написано им. Это точно не так, выяснил в процессе. Нафига в АПИ7 переменная на каждый чих, нафиг она так Разительно от апи5 отличается?
КОМПАС-3D, написан на C++.
PS. Я использую экспортные функции, API7 и API5 в последнюю очередь, все от задач(Embarcadero Delphi 10.2.3).