Разработка 2D-библиотек для КОМПАС: Методические указания для выполнения лабораторных работ

  • Published on
    08-Dec-2016

  • View
    220

  • Download
    5

Embed Size (px)

Transcript

  • " "

    " "

    " "

    230104

    2007

  • ..., . .. . ..., . _______________ ..

  • 1.

    . .rtw. dll-, dll rtw. , , Delphi. , , API . , Delphi, ..

    - 3D . , , ( Shaft 3D) ..

    , . 3D , 3D , 2D . 2D .

    SDK sdk.hlp, , API. , SDK\Pascal\DelphiAuto Delphi.

    2.

    2D ,

    : (x1,y1,x2,y2) x1,y1 x2,y2. Delphi "DLL library" ( " "). .dpr . , , : LibraryName - , ; LibraryId , ; LibraryEntry , , , , .

  • rtw, dll, {$E rtw}. dpr- : library chanel; {$E rtw} uses SysUtils, Classes, KsTLB; exports LibraryName name 'LIBRARYNAME', LibraryId name 'LIBRARYID', LibraryEntry name 'LIBRARYENTRY'; begin end.

    , USES KsTLB, API . ( ) Program Files\Ascon\KOMPAS\SDK\Include. Delphi, . ToolsEnvironment OptionsLibraryLibrary Path Include. (FileNewUnit), (, main). LibraryName, LibraryId, LibraryEntry. unit main; interface uses Windows, SysUtils, LDefin2D, ksConstTLB, ksAuto, ksTLB, Forms; // procedure LIBRARYENTRY(command: WORD); Pascal; function LIBRARYNAME : PChar; Pascal; function LIBRARYID : Cardinal; Pascal; // 2D

  • var Kompas: KompasObject; iDocument2D: ksDocument2D; implementation function LIBRARYNAME: PChar; pascal; begin // Result := ' ' end; function LIBRARYID: UINT; pascal; begin // 100 Result := 100; end; procedure LIBRARYENTRY (command:WORD); pascal; begin // Kompas API Kompas := KompasObject(CreateKompasObject); // if Kompas nil then begin // iDocument2D // 2D iDocument2D := ksDocument2D(Kompas.ActiveDocument2D()); if iDocument2D=nil then // Kompas.ksMessage(' ') else begin // . Run; Kompas.ksMessage(' ') end; // iDocument2D := nil; end; Kompas := nil end;

  • end.

    LibraryEntry , . . 2D-. , Delphi -, ksMessage Kompas, .. .

    2.1.

    .

    (FileNewForm) , , former.pas. MainForm. TEdit, "" "". .

    , . , , , . Run main, . , USES (former) (forms). procedure Run; // var form : TMainForm; // begin // Application.Handle := kompas.ksGetHWindow; // kompas.ksEnableTaskAccess(0); // form:=TMainForm.Create(Application); // form.ShowModal; // kompas.ksEnableTaskAccess(1); // Application.Handle := 0

  • end;

    . , , , , . , Close. "" ModalResult mrOK. .

    2.2.

    API .

    iDocument2D. :

    procedure TMainForm.Button1Click(Sender: TObject); begin iDocument2D.ksLineSeg(StrTofloat(edit1.Text), StrTofloat(edit2.Text), StrTofloat(edit3.Text), StrTofloat(edit4.Text),1) end;

    ksLineSeg(x1,y1,x2,y2,type) x1,y1 x2,y2 type. , 2. Document2D , Reference.

    2D : ksPoint(x,y,style)

    x,y style. 1

    ksLineSeg(x1,y1,x2,y2,type) type (x1,y1) (x2,y2)

    ksLine(x,y,angle) x,y angle

    ksArcBy3Points (x1, y1, x2, y2, x3, y3, type)

    type

  • ksArcByAngle (xc, yc, rad, f1, f2, direction, type)

    : xc, yc - , rad - , f1, f2 - , direction - : 1 - , -1 - , type -

    ksArcByPoint (xc, yc, rad, x1, y1, x2, y2, direction, type)

    : xc, yc - , rad - , x1, y1 - , x2, y2 - , direction - : 1 - , -1 - , type - .

    ksCircle(xc, yc, rad, type) xc,yc, rad type

    2.3.

    , ( ) "" Delphi , . :

    - Delphi; - ; - Delphi ; - .

    3.

  • (, , ) , . : ( RECORD), . , .

    :

    var par:ksEllipseParam; begin // par := ksEllipseParam( kompas.GetParamStruct(ko_EllipseParam)); with par do begin Init; // xc := 50; // yc := 40; a := 20; // B := 10; style := 1; // end; iDocument2D.ksEllipse(par) // end;

    NURBS- , ,

    . , . :

    var par : ksNurbsPointParam; begin par := ksNurbsPointParam( kompas.GetParamStruct(ko_NurbsPointParam)); with par do begin Init; // 3 // FALSE (TRUE )

  • // 1 iDocument2D.ksNurbs(3,False,1); x := 0; y := 0; weight := 1; // x,y "" weight iDocument2D.ksNurbsPoint(par); x := 20; y := 20; weight := 1; iDocument2D.ksNurbsPoint(par); x := 50; y := 10; weight := 1; iDocument2D.ksNurbsPoint(par); x := 70; y := 20; weight := 1; iDocument2D.ksNurbsPoint(par); x := 100; y := 0; weight := 1; iDocument2D.ksNurbsPoint(par); x := 50; y := -50; weight := 1; iDocument2D.ksNurbsPoint(par); // iDocument2D.ksEndObj end end;

    3- . ksParagraph, .

    , 4. , , . 3.1.

    . 3.1 .

  • var par : ksParagraphParam; // itemParam : ksTextItemParam; // itemFont : ksTextItemFont; // begin par := ksParagraphParam( kompas.GetParamStruct(ko_ParagraphParam) ); par.Init; // with par do begin x := 30; // y := 30; height := 25; // width := 20; // end; // iDocument2d.ksParagraph( par ); // itemParam := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam)); itemParam.Init; // itemFont := ksTextItemFont(itemParam.GetItemFont); itemFont.Init; with itemFont do begin // c SetBitVectorValue( NEW_LINE, true ); // FontName:='Arial'; // Height:=5; end; // ItemParam.s:= ' '; // iDocument2d.ksTextLine( itemParam ); // itemFont.Init; with itemFont DO

  • begin SetBitVectorValue( NEW_LINE, true ); SetBitVectorValue( BOLD_ON, true ); Height:=10; end; ItemParam.s := ' ()'; iDocument2d.ksTextLine(itemParam); iDocument2d.ksEndObj end;

    SetBitVectorValue (.

    4) ( NEW_LINE). . .

    ,

    . . Reference.

    var par:ksCentreParam; c:reference; begin // , c:=iDocument2D.ksCircle(150,150,20,1); // par:=ksCentreParam(kompas.GetParamStruct(ko_CentreParam)); with par do begin init; // BaseCurve:=c; // - type_:=2; // LenXPTail:=25; // LenXmTail:=25; // LenYPTail:=25; //

  • LenYmTail:=25; end; // iDocument2D.ksCentreMarker(par)

    . :

    , , , .

    ksHatch(style, Angle, step, width, x0, y0) style angle step width. x0,y0. 3. , ksEndObj. : iDocument2D.ksHatch(1,0,1,10,100,100); iDocument2D.ksCircle(100,100,20,1); // iDocument2D.ksEndObj;

    !

    , ! ..

    . 3.2 .

    : - (); - (); - (100); - (+0,2 -0,4);

  • - (); - (2x45o). ,

    . &04 &01 0. . 5. var param : ksLDimParam; dPar : ksDimDrawingParam; sPar : ksLDimSourceParam; tPar : ksDimTextParam; str : ksChar255; arrText : ksDynamicArray; obj : Reference; begin // param := ksLDimParam ( kompas.GetParamStruct(ko_LDimParam) ); // dPar := ksDimDrawingParam( param.GetDPar ); // sPar := ksLDimSourceParam( param.GetSPar ); // tPar := ksDimTextParam ( param.GetTPar ); dPar.Init; dPar.textBase := 0; // // (1- , 2 ) dPar.pt1 := 2; dPar.pt2 := 2; // dPar.ang := -30; // dPar.lenght := 20; // sPar.Init; // sPar.x1 := 50; sPar.y1 := 50; // sPar.x2 := 150; sPar.y2 := 50; // sPar.dx := 0; sPar.dy := 20; // : // 1 - 1,y1,

  • // 2 - x2,y2 sPar.basePoint := 1; tPar.Init( False ); // tPar.SetBitFlagValue( _AUTONOMINAL, true ); // tPar.SetBitFlagValue( _PREFIX, true ); // tPar.SetBitFlagValue( _DEVIATION, true ); // tPar.SetBitFlagValue( _UNIT, true ); // tPar.SetBitFlagValue( _SUFFIX, true ); // tPar.sign := 1; // 255 str := ksChar255( kompas.GetParamStruct(ko_Char255)); // arrText := ksDynamicArray( tPar.GetTextArr ); // str.str := '+'; // arrText.ksAddArrayItem( -1, str ); // str.str := '+0,2'; // arrText.ksAddArrayItem( -1, str ); // str.str := '-0,4'; // arrText.ksAddArrayItem( -1, str ); // str.str := ' '; // arrText.ksAddArrayItem( -1, str ); // // &04 - "" // &01 - str.str := '2&0445&01'; arrText.ksAddArrayItem( -1, str ); // iDocument2d.ksLinDimension(param) end;

  • , , , . . step91.pas, . .

    , . ksMtr(x, y, Angle, scaleX, scaleY) x, y - , angle - , scaleX - , scaleY - Y. ksDeleteMtr.

    4. .

    , - . . , , . , . :

    procedure MakeView(x0,y0:DOUBLE; nm:STRING); // x0,y0 , nm var par:ksViewParam; n:INTEGER; begin par := ksViewParam( kompas.GetParamStruct(ko_ViewParam) ); with par do begin Init; // x := x0; y := y0; scale_ := 1; Angle := 0; // , ..

  • state := stACTIVE; name := nm end; n:=0; iDocument2D.ksCreateSheetView( par, n ) end; : MakeView(100,100,'busher');

    ( 0,0 ), .

    5. ""

    . (. 5.1). , "" ( 110) "" ( 130):

    var stamp : ksStamp; itemParam : ksTextItemParam; begin // stamp := ksStamp( iDocument2d.GetStamp ); itemParam := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) ); itemParam.Init; // stamp.ksOpenStamp; // 110 Stamp.ksColumnNumber(110); // ItemParam.s := ' ..'; Stamp.ksTextLine( ItemParam ); // 130 Stamp.ksColumnNumber(130); // - // ItemParam.s := DateToStr(Now); Stamp.ksTextLine( ItemParam ); // stamp.ksCloseStamp

  • end;

    . 5.1 .

    , 2D (

    ) ? :

    // stamp := ksStamp( iDocument2d.GetStamp ); itemParam := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) ); itemParam.Init; // if stamp.ksOpenStamp=0 then begin kompas.ksMessage (' '); Exit end;

    6.

    , ,

    2D (. 6.1) .

  • . 6.1 .

    .

    (0,0) . ,

    . , . :

    procedure LinDim(x1,y1,x2,y2,dx,dy:DOUBLE; diamsign:boolean; pl1,pl2:boolean); // // x1,y2,x2,y2 - // dx,dy - x1,x2 // diamsign - // pl1, pl2 - var param : ksLDimParam; dPar : ksDimDrawingParam; sPar : ksLDimSourceParam; tPar : ksDimTextParam; str : ksChar255; arrText : ksDynamicArray; begin // param := ksLDimParam( kompas.GetParamStruct

  • (ko_LDimParam) ); // dPar := ksDimDrawingParam( param.GetDPar ); // sPar := ksLDimSourceParam( param.GetSPar ); // tPar := ksDimTextParam ( param.GetTPar ); dPar.Init; dPar.textBase := 0; // // (1-, 2-) dPar.pt1 := 1; dPar.pt2 := 1; // // /. dPar.pl1 :=not(pl1); dPar.pl2 :=not(pl2); dPar.ang := 0; // dPar.lenght := 0; // sPar.Init; // sPar.x1 := x1; sPar.y1 := y1; // sPar.x2 := x2; sPar.y2 := y2; // sPar.dx := dx; sPar.dy := dy; // : // 1 - 1,y1, 2 - x2,y2 sPar.basePoint := 1; tPar.Init( False ); // tPar.SetBitFlagValue( _AUTONOMINAL, true ); if diamsign then tPar.sign := 1; // iDocument2d.ksLinDimension( param ) end;

    ,

    :

    procedure Stamp(c:byte; t:string); var

  • stamp : ksStamp; itemParam : ksTextItemParam; begin // stamp := ksStamp( iDocument2d.GetStamp ); itemParam := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) ); itemParam.Init; // if stamp.ksOpenStamp=0 then begin kompas.ksMessage (' '); Exit end; // Stamp.ksColumnNumber(c); // ItemParam.s := t; Stamp.ksTextLine( ItemParam ); // stamp.ksCloseStamp end;

    , : , . . MakeView . . 4.

    :

    procedure DrawBusher (x0,y0:double; nm:string; D1,D2,L:double); // D1 - ; D2 - ; // L - // x0,y0 - ; // mn - // D1 - ; D2 - ; // L - procedure Contour; // begin

  • iDocument2D.ksLineSeg(0,D2-(D2-D1)/2,L,D2-(D2-D1)/2,1); iDocument2D.ksLineSeg(0,D2-(D2-D1)/2,0,d2,1); iDocument2D.ksLineSeg(L,D2-(D2-D1)/2,L,d2,1); iDocument2D.ksLineSeg(0,D2,L,D2,1) end; begin // MakeView(x0,y0,nm); // iDocument2D.ksLineSeg(-5,d2/2,L+5,d2/2,3); // iDocument2D.ksLineSeg(0,0,l,0,1); iDocument2D.ksLineSeg(0,0,0,D2-(D2-D1)/2,1); iDocument2D.ksLineSeg(L,0,L,D2-(D2-D1)/2,1); Contour; // iDocument2D.ksHatch(0,45,1,5,5,D2-(D2-D1)/2+5); Contour; iDocument2D.ksEndObj; // LinDim(0,0,L,0,0,-20,false,true,true); // LinDim(0,0,0,d2,-20,0,true,true,true); // LinDim(0,(D2-D1)/2,0,(D2-D1)/2+d1,-10,0,true,false,true); // Stamp(1,''); Stamp(3,' 40'); Stamp(9,''); Stamp(8,'1'); Stamp(110,' ..'); Stamp(130,DateToStr(Now)) end;

    ,

    :

    procedure TMainForm.Button3Click(Sender: TObject); var d1,d2,l:double; begin try

  • d1:=StrToFloat(Edit1.Text); d2:=StrToFloat(Edit2.Text); l:=StrToFloat(Edit4.Text) except Kompas.ksMessage(' '); abort end; if D2>=d1 then begin Kompas.ksMessage(' '); abort end; DrawBusher(100,100, 'busher',d2, d1, l) end;

    , ,

    .

  • 7. 1.

    0 1 2 - 3 4 5 6 7 8

    8. 2.

    1 2 3 4 5 6 7 8 9 10 11 , 12 ISO 13 ISO (. ) 14 ISO (. ) 15 ISO (. 2 ) 16 ISO (. 3 ) 17 ISO 18 ISO (. . ) 19 ISO (. 2 . ) 20 ISO 21 ISO (2 ) 22 ISO (2 ) 23 ISO (3) 24 ISO (2 2 ) 25 ISO (2 3 )

  • 9. 3.

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

    10. 4.

    INVARIABLE 0 NUMERATOR $1 DENOMINATOR $2 END_FRACTION $3 UPPER_DEVIAT $4 LOWER_DEVIAT $5 END_DEVIAT $6 S_BASE $7

    S_UPPER_INDEX $8

    S_LOWER_INDEX $9

    S_END $10

    SPECIAL_SYMBOL $11 SPECIAL_SYMBOL_END $12

  • RETURN_BEGIN $13 , ,

    RETURN_DOWN $14 , ,

    RETURN_RIGHT $15 , ,

    TAB $16 FONT_SYMBOL $17 ITALIC_ON $40 ITALIC_OFF $80 BOLD_ON $100 BOLD_OFF $200

    UNDERLINE_ON $400 UNDERLINE_OFF $800 NEW_LINE $1000

    11. 5.

    ( pt1,pt2)

    0 1 2 3 4

    ( textBase) 0 1 ( ) textPos 2 ( ) textPos

    ( bitFlag)

    _AUTONOMINAL $1

    _RECTTEXT $2 _PREFIX $4 _NOMINALOFF $8

  • _TOLERANCE $10 _DEVIATION $20 _UNIT $40 _SUFFIX $80 _DEVIATION_INFORM $100

    _DEVIATION (...

Recommended

View more >