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

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

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

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ‰Π΅Π»Ρ‡ΠΊΠ° Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ…. НачнСм со Π²Ρ‚ΠΎΡ€ΠΎΠΉ (ΠžΡ‚ΠΌΠ΅Π½Π°), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ прост. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π΄Π²Π°ΠΆΠ΄Ρ‹ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Ρ„ΠΎΡ€ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠžΡ‚ΠΌΠ΅Π½Π° ΠΈ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅, автоматичСски созданном Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ всСго ΠΎΠ΄Π½Ρƒ строку, Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ (листинг 6.11).

Листинг 6.11. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‰Π΅Π»Ρ‡ΠΊΠ° Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠžΡ‚ΠΌΠ΅Π½Π°

procedure TGearsForm.Button2Click(Sender: TObject);

begin

if CloseQuery then Close;

end;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС. Условно Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€ΠΈ части.

1. РасчСт гСомСтричСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса ΠΏΠΎ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ исходным Π΄Π°Π½Π½Ρ‹ΠΌ.

2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° КОМПАБ-Π”Π΅Ρ‚Π°Π»ΡŒ.

3. БобствСнно построСниС ΠΌΠΎΠ΄Π΅Π»ΠΈ Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ построСниС ΠΌΠΎΠ΄Π΅Π»ΠΈ колСса Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

1. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ Π² плоскости XOY создаСтся эскиз, содСрТащий ΠΊΠΎΠ½Ρ‚ΡƒΡ€ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ сСчСния колСса (Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΡ‹ выполняли ΠΏΡ€ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π² Π³Π». 3). На основании этого эскиза выполняСтся опСрация вращСния, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса.

2. Π”Π°Π»Π΅Π΅ Π² плоскости YOZ строится Π²Ρ‚ΠΎΡ€ΠΎΠΉ эскиз с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ окруТностями, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ выполняСтся опСрация вырСзания Π² Π΄Π²Π° направлСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ отвСрстия Π² дискС.

3. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом являСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π΅Π·Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π·ΡƒΠ±ΡŒΡΠΌΠΈ Π² Π²Π΅Π½Ρ†Π΅ колСса. Для построСния Π²Ρ‹Ρ€Π΅Π·Π° Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈΠ· способов, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Π³Π». 3. Напомню, этот способ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² построСнии Π²Ρ‹Ρ€Π΅Π·Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π’Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΏΠΎ сСчСниям. ΠŸΡ€ΠΈ этом Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ колСса строится ряд эскизов-сСчСний, плоскости ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΎΡ‚ Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ повСрхности колСса Π½Π° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ l = i Β· b / (nс – 1) (Π³Π΄Π΅ b – ΡˆΠΈΡ€ΠΈΠ½Π° колСса, nс – количСство сСчСний ΠΈΠ»ΠΈ эскизов, i – порядковый Π½ΠΎΠΌΠ΅Ρ€ эскиза). Для нашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ достаточно Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π΅Ρ… эскизов: ΠΏΠΎ Π΄Π²Π° Π½Π° Ρ‚ΠΎΡ€Ρ†Π΅Π²Ρ‹Ρ… плоскостях колСса ΠΈ ΠΎΠ΄ΠΈΠ½ посрСдинС – Π½Π° плоскости YOZ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π²Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ плоскости, ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΎΠ±Π΅ стороны ΠΎΡ‚ плоскости YOZ Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π²Π΅Π½Ρ†Π° Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… плоскостСй (Π΄Π²ΡƒΡ… Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ YOZ) Π±ΡƒΠ΄Π΅Ρ‚ создано ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ эскиза Π²Ρ‹Ρ€Π΅Π·Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π·ΡƒΠ±ΡŒΡΠΌΠΈ, ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ оси Π½Π° ΡƒΠ³ΠΎΠ» Ξ± = 2 Β· l Β· tg Ξ² / dΠΊ, Π³Π΄Π΅ Ξ² – ΡƒΠ³ΠΎΠ» Π½Π°ΠΊΠ»ΠΎΠ½Π° Π»ΠΈΠ½ΠΈΠΈ Π·ΡƒΠ±Π°, dΠΊ – Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса (обоснованиС этой зависимости ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Π³Π». 3). Для ΠΏΠ΅Ρ€Π²ΠΎΠΉ плоскости вмСсто l Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ 0, для Π²Ρ‚ΠΎΡ€ΠΎΠΉ (YOZ) – b/2, для Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ – b.

4. Π’ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ создаСтся ось Π½Π° пСрСсСчСнии плоскостСй XOZ ΠΈ XOY. ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ этой оси формируСтся массив ΠΏΠΎ концСнтричСской сСткС Π²Ρ‹Ρ€Π΅Π·ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Π·ΡƒΠ±ΡŒΡΠΌΠΈ колСса. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠΏΠΈΠΉ устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ количСству Π·ΡƒΠ±ΡŒΠ΅Π² колСса.

НачнСм с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ этапа Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ построСния: расчСта гСомСтричСских характСристик создаваСмого колСса (листинг 6.12).

Листинг 6.12. РасчСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² колСса

procedure TGearsForm.Button1Click(Sender: TObject);

var

// Ρ€Π°Π·Π΄Π΅Π» объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

// всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… интСрфСйсов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ построСнии

doc3 : ksDocument3D;

iPart : ksPart;

PlaneXOY : ksEntity;

PlaneXOZ : ksEntity;

PlaneYOZ : ksEntity;

SketchEntity : ksEntity;

iSketchDef : ksSketchDefinition;

doc : ksDocument2D;

r : reference;

iBaseRotatedEntity : ksEntity;

Color : ksColorParam;

iBaseRotatedDef : ksBaseRotatedDefinition;

iSketch1Entity : ksEntity;

iSketch1Def : ksSketchDefinition;

iCutExtrusion : ksEntity;

iCutExtrusionDef : ksCutExtrusionDefinition;

iOffsetPlaneEntity : ksEntity;

iOffsetPlaneDef : ksPlaneOffsetDefinition;

iSketch2Entity : ksEntity;

iSketch2Def : ksSketchDefinition;

iSketch3Entity : ksEntity;

iSketch3Def : ksSketchDefinition;

iOffsetPlane1Entity : ksEntity;

iOffsetPlane1Def : ksPlaneOffsetDefinition;

iSketch4Entity : ksEntity;

iSketch4Def : ksSketchDefinition;

iCutLoftEntity : ksEntity;

iCutLoftDef : ksCutLoftDefinition;

Collect : ksEntityCollection;

iAxis : ksEntity;

iAxis2PlDef : ksAxis2PlanesDefinition;

iCircularCopy : ksEntity;

iCirCopyDef : ksCircularCopyDefinition;

Collect1 : ksEntityCollection;

// гСомСтричСскиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ колСса

module : double;

Lm, Dm : double;

Dv : double;

b_k, c : double;

d_k, d_fk, d_ak : double;

delta0 : double;

z : integer;

beta : double;

Dotv : double;

alfa1, alfa2 : double;

begin

Hide; // прячСм Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ

// считываСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² ΠΎΠΊΠ½Π΅

module := StrToFloat(Edit1.Text);

z := StrToInt(Edit2.Text);

Lm := StrToFloat(Edit3.Text);

beta := StrToFloat(Edit4.Text);

// Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ отвСрстия ΠΏΠΎΠ΄ Π²Π°Π»

Dv := round(Lm/1.4);

// ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΌΠ°Ρ‚ΠΎΡ‡ΠΈΠ½Ρ‹ ΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρƒ колСса ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ

b_k := Lm;

// Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ°Ρ‚ΠΎΡ‡ΠΈΠ½Ρ‹

Dm := 1.8*Dv;

// Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° диска, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ°Ρ‚ΠΎΡ‡ΠΈΠ½Ρƒ с ΠΎΠ±ΠΎΠ΄ΠΎΠΌ

c := round(0.35*b_k);

// Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° ΠΎΠ±ΠΎΠ΄Π°

delta0 := round(2.5*module/cos(DegToRad(beta)));

d_k := module*z; // Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ колСса

d_ak := d_k+2*module; // Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ выступов

d_fk := d_k-2.5*module; // Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ Π²ΠΏΠ°Π΄ΠΈΠ½

// Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ размСщСния Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ² отвСрстий Π² дискС

Dotv := (d_fk – 2*delta0 + Dm)/2;

// созданиС Π΄Π΅Ρ‚Π°Π»ΠΈ...

// построСниС ΠΌΠΎΠ΄Π΅Π»ΠΈ...

Close; // Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΡƒ

end;

Если сСйчас ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ создаСтся ΠΈ Π½Π΅ строится.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап построСния Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ интСрСсСн – ΠΎΠ½ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ создании Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° КОМПАБ-Π”Π΅Ρ‚Π°Π»ΡŒ (листинг 6.13). Π’ Π΄Π°Π½Π½ΠΎΠΌ листингС Ρ€Π°Π·Π΄Π΅Π» описания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ расчСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² колСса ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½, Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ созданиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°-Π΄Π΅Ρ‚Π°Π»ΠΈ. Π’ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ построСния (ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅) этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ вставлСн сразу послС расчСтов.

Листинг 6.13. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π΄Π΅Ρ‚Π°Π»ΠΈ

// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° интСрфСйс Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

doc3 := ksDocument3D(ks.Document3D());

// создаСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

// ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ false – Π² Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅

// ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ true – Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚-Π΄Π΅Ρ‚Π°Π»ΡŒ

if doc3.Create(false, true) then

begin

// заполняСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

doc3.author := β€œΠœΠ°ΠΊΡΠΈΠΌ ΠšΠΈΠ΄Ρ€ΡƒΠΊβ€;

doc3.comment := β€œΠ—ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ΅ колСсо”;

doc3.drawMode := 3;

doc3.perspective := true;

doc3.UpdateDocumentParam();

end else exit;

// провСряСм, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡˆΠ»Π° инициализация

if (doc3 = nil) then

begin

ks.ksMessage(β€œΠΠ΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚!”);

exit;

end;

ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π² ΠΈ запустив ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ смоТСтС Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ послС закрытия Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сама создаст пустой Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ КОМПАБ-Π”Π΅Ρ‚Π°Π»ΡŒ.

Π’ листингС 6.14 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ с нСбольшими сокращСниями ΠΊΠΎΠ΄ построСния Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠ΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·ΡΡ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Examples\Π“Π»Π°Π²Π° 6\Delphi Programming\Gears3D\BuildUnit.pas Π½Π° дискС. Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° содСрТит достаточно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, поэтому, полагаю, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ нСслоТно.

Листинг 6.14. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ колСса

// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° интСрфСйс Π΄Π΅Ρ‚Π°Π»ΠΈ

iPart := ksPart(doc3.GetPart(pNew_Part));

if (iPart <> nil) then

begin

// интСрфСйсы ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… плоскостСй

PlaneXOY := ksEntity(iPart.GetDefaultEntity(o3d_planeXOY));

PlaneXOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeXOZ));

PlaneYOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeYOZ));

// интСрфСйс эскиза (ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° сСчСния колСса)

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

if (iSketchEntity <> nil) then

begin

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

iSketchDef := ksSketchDefinition(iSketchEntity.GetDefinition);

if (iSketchDef <> nil) then

begin

if (PlaneXOY <> nil) then

begin

// устанавливаСм ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ,

// Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создаСтся эскиз

iSketchDef.SetPlane(PlaneXOY);

iSketchEntity.Create;

// запускаСм процСсс рСдактирования эскиза

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

doc := ksDocument2D(iSketchDef.BeginEdit);

if (doc <> nil) then

begin

// Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ эскиза

// с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² интСрфСйса ksDocument2D

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

end;

// Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ рСдактирования эскиза

iSketchDef.EndEdit;

end;

end;

end;

// интСрфСйс Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вращСния

iBaseRotatedEntity := ksEntity(iPart.NewEntity(o3d_baseRotated));

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

Color := ksColorParam(iBaseRotatedEntity.ColorParam);

Color.specularity := 0.8;

Color.shininess := 1;

if (iBaseRotatedEntity <> nil) then

begin

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

iBaseRotatedDef :=

ksBaseRotatedDefinition(iBaseRotatedEntity.GetDefinition);

if (iBaseRotatedDef <> nil) then

begin

// настройка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² вращСния

iBaseRotatedDef.SetThinParam(false, dtNormal, 1, 1);

iBaseRotatedDef.SetSideParam(true, 360);

iBaseRotatedDef.toroidShapeType := false;

iBaseRotatedDef.SetSketch(iSketchEntity);

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

// Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ – Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ колСса

iBaseRotatedEntity.Create;

end;

end;

// интСрфСйс эскиза (отвСрстия Π² дискС)

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

if (iSketch1Entity <> nil) then

begin

iSketch1Def := ksSketchDefinition(iSketch1Entity.GetDefinition);

if (iSketch1Def <> nil) then

begin

if (PlaneYOZ <> nil) then

begin

// Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ эскиз Π½Π° плоскости YOZ

iSketch1Def.SetPlane(PlaneYOZ);

iSketch1Entity.Create;

doc := ksDocument2D(iSketch1Def.BeginEdit);

if (doc <> nil) then

begin

// ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² эскизС – 4 окруТности

// ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ksDocument2D::ksCircle

doc.ksCircle(0, Dotv/2, 0.4*(d_fk/2-delta0-Dm/2), 1);

doc.ksCircle(0, -Dotv/2, 0.4*(d_fk/2-delta0-Dm/2), 1);

doc.ksCircle(Dotv/2, 0, 0.4*(d_fk/2-delta0-Dm/2), 1);

doc.ksCircle(-Dotv/2, 0, 0.4*(d_fk/2-delta0-Dm/2), 1);

end;

iSketch1Def.EndEdit;

end;

end;

end;

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

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

if (iCutExtrusion <> nil) then

begin

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