Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «КОМПАБ-3D V10 Π½Π° 100 %Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 97

Автор Максим ΠšΠΈΠ΄Ρ€ΡƒΠΊ

end;

end;

end;

// интСрфСйс ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π’Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ Π²Ρ‹Π΄Π°Π²Π»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ

iCutExtrusion := ksEntity(iPart.NewEntity(o3d_cutExtrusion));

if (iCutExtrusion <> nil) then

begin

// интСрфСйс ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² вырСзания

iCutExtrusionDef :=

ksCutExtrusionDefinition(iCutExtrusion.GetDefinition);

if (iCutExtrusionDef <> nil) then

begin

// настройка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

iCutExtrusionDef.SetSketch(iSketch1Entity);

// Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

iCutExtrusionDef.directionType := dtBoth;

// Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° вырСзания ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ

iCutExtrusionDef.SetSideParam(true, etBlind, c/2,

0, false);

iCutExtrusionDef.SetSideParam(false, etBlind, c/2,

0, false);

iCutExtrusionDef.SetThinParam(false, 0, 0, 0);

// создаСм отвСрстия Π² дискС

iCutExtrusion.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 := b_k/2;

iOffsetPlaneDef.SetPlane(PlaneYOZ);

iOffsetPlaneDef.direction := false;

// Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ скрытой

iOffsetPlaneEntity.Hidden := true;

// создаСм Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ

iOffsetPlaneEntity.Create;

end;

end;

// эскиз ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Ρ‹Ρ€Π΅Π·Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π·ΡƒΠ±ΡŒΡΠΌΠΈ

iSketch2Entity := ksEntity(iPart.NewEntity(o3d_sketch));

if (iSketch2Entity <> nil) then

begin

iSketch2Def := ksSketchDefinition(iSketch2Entity.GetDefinition);

if (iSketch2Def <> nil) then

begin

// базовая ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ – Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ iOffsetPlaneEntity

iSketch2Def.SetPlane(iOffsetPlaneEntity);

iSketch2Entity.Create;

doc := ksDocument2D(iSketch2Def.BeginEdit);

alfa1 := 360/z;

doc.ksMtr(0, 0, 90, 1, 1);

// Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ изобраТСния эскиза

// вмСсто ΡΠ²ΠΎΠ»ΡŒΠ²Π΅Π½Ρ‚ для простоты

// Π±Π΅Ρ€Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π΄ΡƒΠ³ΠΈ ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ

// ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½

doc.ksDeleteMtr;

iSketch2Def.EndEdit;

end;

end;

// интСрфСйс Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ эскиза Π²Ρ‹Ρ€Π΅Π·Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π·ΡƒΠ±ΡŒΡΠΌΠΈ

iSketch3Entity := ksEntity(iPart.NewEntity(o3d_sketch));

if (iSketch3Entity <> nil) then

begin

iSketch3Def := ksSketchDefinition(iSketch3Entity.GetDefinition);

if (iSketch3Def <> nil) then

begin

// строим Π½Π° плоскости YOZ

iSketch3Def.SetPlane(PlaneYOZ);

iSketch3Entity.Create;

doc := ksDocument2D(iSketch3Def.BeginEdit);

alfa2 := -RadToDeg(b_k*tan(DegToRad(beta))/d_k);

doc.ksMtr(0, 0, 90, 1, 1);

// Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ изобраТСния эскиза

// вмСсто ΡΠ²ΠΎΠ»ΡŒΠ²Π΅Π½Ρ‚ для простоты

// Π±Π΅Ρ€Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π΄ΡƒΠ³ΠΈ ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ

// ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½

doc.ksDeleteMtr;

iSketch3Def.EndEdit;

end;

end;

// вторая смСщСнная ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ

iOffsetPlane1Entity := ksEntity(iPart.NewEntity(o3d_planeOffset));

if (iOffsetPlane1Entity <> nil) then

begin

iOffsetPlane1Def :=

ksPlaneOffsetDefinition(iOffsetPlane1Entity.GetDefinition);

if (iOffsetPlane1Def <> nil) then

begin

// Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° смСщСния Ρ‚Π° ΠΆΠ΅

iOffsetPlane1Def.Offset := b_k/2;

// Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅

iOffsetPlane1Def.direction := true;

iOffsetPlane1Def.SetPlane(PlaneYOZ);

// Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ скрытой

iOffsetPlane1Entity.Hidden := true;

// создаСм ΡΠΌΠ΅Ρ‰Π΅Π½Π½ΡƒΡŽ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ

iOffsetPlane1Entity.Create;

end;

end;

// Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ (послСдний) эскиз Π²Ρ‹Ρ€Π΅Π·Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π·ΡƒΠ±ΡŒΡΠΌΠΈ

iSketch4Entity := ksEntity(iPart.NewEntity(o3d_sketch));

if (iSketch4Entity <> nil) then

begin

iSketch4Def := ksSketchDefinition(iSketch4Entity.GetDefinition);

if (iSketch4Def <> nil) then

begin

// базовая ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданная смСщСнная

iSketch4Def.SetPlane(iOffsetPlane1Entity);

iSketch4Entity.Create;

doc := ksDocument2D(iSketch4Def.BeginEdit);

alfa2 := -RadToDeg(2*b_k*tan(DegToRad(beta))/d_k);

doc.ksMtr(0, 0, 90, 1, 1);

// Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ изобраТСния эскиза

// вмСсто ΡΠ²ΠΎΠ»ΡŒΠ²Π΅Π½Ρ‚ для простоты

// Π±Π΅Ρ€Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π΄ΡƒΠ³ΠΈ ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ

// ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½

doc.ksDeleteMtr;

iSketch4Def.EndEdit;

end;

end;

// интСрфСйс ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π’Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΏΠΎ сСчСниям

iCutLoftEntity := ksEntity(iPart.NewEntity(o3d_cutLoft));

if (iCutLoftEntity <> nil) then

begin

// интСрфСйс ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ сСчСниям

iCutLoftDef := ksCutLoftDefinition(iCutLoftEntity.GetDefinition);

if (iCutLoftDef <> nil) then

begin

// интСрфСйс массива ksEntityCollection

// ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ эскизов для вырСзания ΠΏΠΎ сСчСниям

Collect := ksEntityCollection(iCutLoftDef.Sketchs);

// добавляСм эскизы Π² ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΡŽ

Collect.Add(iSketch2Entity);

Collect.Add(iSketch3Entity);

Collect.Add(iSketch4Entity);

// создаСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ сСчСниям

// Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ – ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Ρ€Π΅Π· ΠΌΠ΅ΠΆΠ΄Ρƒ Π·ΡƒΠ±ΡŒΡΠΌΠΈ Π² Π²Π΅Π½Ρ†Π΅ колСса

iCutLoftEntity.Create;

end;

end;

// интСрфСйс Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ оси Π½Π° пСрСсСчСнии Π΄Π²ΡƒΡ… плоскостСй

iAxis := ksEntity(iPart.NewEntity(o3d_axis2Planes));

if (iAxis <> nil) then

begin

// интСрфСйс ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ оси

// Π½Π° пСрСсСчСнии плоскостСй

iAxis2PlDef := ksAxis2PlanesDefinition(iAxis.GetDefinition);

if (iAxis2PlDef <> nil) then

begin

// Π·Π°Π΄Π°Π΅ΠΌ плоскости

iAxis2PlDef.SetPlane(1, PlaneXOZ);

iAxis2PlDef.SetPlane(2, PlaneXOY);

// дСлаСм ось нСвидимой

iAxis.hidden := true;

// создаСм Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ось

iAxis.Create;

end;

end;

// интСрфСйс ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Массив ΠΏΠΎ концСнтричСской сСткС

iCircularCopy := ksEntity(iPart.NewEntity(o3d_circularCopy));

if (iCircularCopy <> nil) then

begin

// интСрфСйс ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ копирования ΠΏΠΎ массиву

iCirCopyDef :=

ksCircularCopyDefinition(iCircularCopy.GetDefinition);

if (iCirCopyDef <> nil) then

begin

// коллСкция ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для копирования

Collect1 :=

ksEntityCollection(iCirCopyDef.GetOperationArray);

// опСрация всСго лишь ΠΎΠ΄Π½Π° – Π²Ρ‹Ρ€Π΅Π·Π°Π½ΠΈΠ΅ Π·ΡƒΠ±Π°

Collect1.Add(iCutLoftEntity);

// количСство ΠΊΠΎΠΏΠΈΠΉ, Ρ€Π°Π²Π½ΠΎ количСству Π·ΡƒΠ±ΡŒΠ΅Π²

iCirCopyDef.count2 := z;

iCirCopyDef.factor2 := true;

// ось копирования

iCirCopyDef.SetAxis(iAxis);

// создаСм концСнтричСский массив – колСсо Π³ΠΎΡ‚ΠΎΠ²ΠΎ!

iCircularCopy.Create;

end;

end;

end;

Если Π²Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π°, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Π³ΠΎ Π² создаваСмый ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. ΠΠ΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ части скопируйтС ΠΈΠ· Ρ„Π°ΠΉΠ»Π° модуля построСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π½Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΠΎΠΌ ΠΊ ΠΊΠ½ΠΈΠ³Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС. Π’ Π½ΠΈΡ… Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ слоТно, обычная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄Π° графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ksLineSeg, ksArcByAngle ΠΈ ksCircle интСрфСйса ksDocument2D, просто ΠΎΠ½ΠΈ достаточно Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° страницах ΠΊΠ½ΠΈΠ³ΠΈ.

Π’Π½ΠΎΠ²ΡŒ собСритС (ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅) Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΎΠΊΠ½ΠΎ КОМПАБ ΠΈ запуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ исходныС Π΄Π°Π½Π½Ρ‹Π΅ для Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ – 3, 5 ΠΌΠΌ, количСство Π·ΡƒΠ±ΡŒΠ΅Π² – 56, ΡˆΠΈΡ€ΠΈΠ½Π° Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ Π²Π΅Π½Ρ†Π° – 60 ΠΌΠΌ ΠΈ ΡƒΠ³ΠΎΠ» Π½Π°ΠΊΠ»ΠΎΠ½Π° Π»ΠΈΠ½ΠΈΠΈ Π·ΡƒΠ±ΡŒΠ΅Π² – 15Β°) ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сами ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠΈΠ½ΠΈ-БАПР Π½Π΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ. Π’ частности, ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ Π·Π½Π°ΠΊ (Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈΠ»ΠΈ запятая) установлСн Π² вашСй систСмС Π² качСствС раздСлитСля Ρ†Π΅Π»ΠΎΠΉ ΠΈ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части вСщСствСнного числа. ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ сами Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Ρ‹Π΅ ситуации.

ВсСго Π·Π° нСсколько сСкунд ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° построит ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ 3D-модСль косозубого Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса (рис. 6.25).

Рис. 6.25. ВрСхмСрная модСль Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса, созданная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠΉ нСбольшой ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹Π΅ колСса практичСски Π»ΡŽΠ±Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΡƒΠ³Π»ΠΎΠΌ Π½Π°ΠΊΠ»ΠΎΠ½Π° Π·ΡƒΠ±ΡŒΠ΅Π², Π° Ρ‚Π°ΠΊΠΆΠ΅ прямозубыС. ВсС исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ сам Ρ„Π°ΠΉΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ находятся Π½Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΠΎΠΌ ΠΊ ΠΊΠ½ΠΈΠ³Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС Π² ΠΏΠ°ΠΏΠΊΠ΅ Examples\Π“Π»Π°Π²Π° 6\Delphi Programming\Gears3D. Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ послС копирования Π΅Π³ΠΎ Π½Π° ТСсткий диск ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² настройках ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΌ модулям КОМПАБ API. Волько послС этого выполняйтС ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ.

НСмного ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ формируСмая модСль Π½Π΅ создавалась Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅-Π΄Π΅Ρ‚Π°Π»ΠΈ, Π° Π²ΡΡ‚Π°Π²Π»ΡΠ»Π°ΡΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ сборку с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ°. Для этого Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

1. Π’ ΠΌΠΎΠ΄ΡƒΠ»Π΅ BuildUnit Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ public класса Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ cancel Ρ‚ΠΈΠΏΠ° boolean. Π­Ρ‚Π° пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ дСйствий ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ: true – Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния ΠΈ false – Ссли построСниС Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса Π±Ρ‹Π»ΠΎ Π½Π°Ρ‡Π°Ρ‚ΠΎ. ПослС этого Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события OnCreate создания Ρ„ΠΎΡ€ΠΌΡ‹ присвойтС Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, достаточно Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π² любой Ρ‚ΠΎΡ‡ΠΊΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹, Π½Π΅ занятой элСмСнтом управлСния).

2. Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ Ρ‰Π΅Π»Ρ‡ΠΊΠ° Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠžΡ‚ΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ установитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ cancel Ρ€Π°Π²Π½Ρ‹ΠΌ true (хотя это Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ опСрация). Волько ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ пСрСмСнная cancel Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false.

3. Π’ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° создания Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° doc3.Create(false, true) Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π° true – doc3.Create(true, true). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ модСль Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ Π² Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

4. Π’ самый ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠ΄, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ модСль Π½Π° ТСсткий диск (листинг 6.15). Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒ сохраняСтся Π² ΠΏΠ°ΠΏΠΊΡƒ C:\gear.m3d. ΠŸΡƒΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… запрос Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Листинг 6.15. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ построСнной Π΄Π΅Ρ‚Π°Π»ΠΈ

// doc3 – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° интСрфСйс ksDocument3D

// построСнной Π΄Π΅Ρ‚Π°Π»ΠΈ

doc3.SaveAs(β€œC:\gear.m3d”);

doc3.close;

// Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°

Close;

5. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π³Π»Π°Π²Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ Ρ€Π°Π·Π΄Π΅Π» uses ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… модуля: ksConstTLB, LDefin3D ΠΈ LDefin2D. Π­Ρ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ понадобятся для объявлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² интСрфСйсов, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² создании Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ°. Π’ Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π²Ρ…ΠΎΠ΄Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, сразу послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° KompasObject, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (листинг 6.16).

Листинг 6.16. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚