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

  • Published on
    08-Dec-2016

  • View
    220

  • Download
    5

Embed Size (px)

Transcript

<ul><li><p> " " </p><p> " " </p><p> " " </p><p> 230104 </p><p> 2007 </p></li><li><p> ..., . .. . ..., . _______________ .. </p></li><li><p>1. </p><p> . .rtw. dll-, dll rtw. , , Delphi. , , API . , Delphi, .. </p><p> - 3D . , , ( Shaft 3D) .. </p><p> , . 3D , 3D , 2D . 2D . </p><p> SDK sdk.hlp, , API. , SDK\Pascal\DelphiAuto Delphi. </p><p> 2. </p><p> 2D , </p><p> : (x1,y1,x2,y2) x1,y1 x2,y2. Delphi "DLL library" ( " "). .dpr . , , : LibraryName - , ; LibraryId , ; LibraryEntry , , , , . </p></li><li><p> 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. </p><p> , 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 </p></li><li><p>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; </p></li><li><p>end. </p><p> LibraryEntry , . . 2D-. , Delphi -, ksMessage Kompas, .. . </p><p> 2.1. </p><p> . </p><p> (FileNewForm) , , former.pas. MainForm. TEdit, "" "". . </p><p> , . , , , . 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 </p></li><li><p>end; </p><p> . , , , , . , Close. "" ModalResult mrOK. . </p><p> 2.2. </p><p> API . </p><p> iDocument2D. : </p><p>procedure TMainForm.Button1Click(Sender: TObject); begin iDocument2D.ksLineSeg(StrTofloat(edit1.Text), StrTofloat(edit2.Text), StrTofloat(edit3.Text), StrTofloat(edit4.Text),1) end; </p><p> ksLineSeg(x1,y1,x2,y2,type) x1,y1 x2,y2 type. , 2. Document2D , Reference. </p><p> 2D : ksPoint(x,y,style) </p><p>x,y style. 1 </p><p> ksLineSeg(x1,y1,x2,y2,type) type (x1,y1) (x2,y2) </p><p> ksLine(x,y,angle) x,y angle </p><p> ksArcBy3Points (x1, y1, x2, y2, x3, y3, type) </p><p> type </p></li><li><p> ksArcByAngle (xc, yc, rad, f1, f2, direction, type) </p><p> : xc, yc - , rad - , f1, f2 - , direction - : 1 - , -1 - , type - </p><p> ksArcByPoint (xc, yc, rad, x1, y1, x2, y2, direction, type) </p><p> : xc, yc - , rad - , x1, y1 - , x2, y2 - , direction - : 1 - , -1 - , type - . </p><p> ksCircle(xc, yc, rad, type) xc,yc, rad type </p><p> 2.3. </p><p>, ( ) "" Delphi , . : </p><p>- Delphi; - ; - Delphi ; - . </p><p>3. </p></li><li><p> (, , ) , . : ( RECORD), . , . </p><p> : </p><p>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; </p><p>NURBS- , , </p><p> . , . : </p><p> var par : ksNurbsPointParam; begin par := ksNurbsPointParam( kompas.GetParamStruct(ko_NurbsPointParam)); with par do begin Init; // 3 // FALSE (TRUE ) </p></li><li><p> // 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; </p><p> 3- . ksParagraph, . </p><p> , 4. , , . 3.1. </p><p> . 3.1 . </p></li><li><p>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 </p></li><li><p> begin SetBitVectorValue( NEW_LINE, true ); SetBitVectorValue( BOLD_ON, true ); Height:=10; end; ItemParam.s := ' ()'; iDocument2d.ksTextLine(itemParam); iDocument2d.ksEndObj end; </p><p> SetBitVectorValue (. </p><p> 4) ( NEW_LINE). . . </p><p> , </p><p>. . Reference. </p><p> 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; // </p></li><li><p> LenYmTail:=25; end; // iDocument2D.ksCentreMarker(par) </p><p> . : </p><p> , , , . </p><p> 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; </p><p> ! </p><p>, ! .. </p><p> . 3.2 . </p><p> : - (); - (); - (100); - (+0,2 -0,4); </p></li><li><p>- (); - (2x45o). , </p><p> . &amp;04 &amp;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, </p></li><li><p> // 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 ); // // &amp;04 - "" // &amp;01 - str.str := '2&amp;0445&amp;01'; arrText.ksAddArrayItem( -1, str ); // iDocument2d.ksLinDimension(param) end; </p></li><li><p> , , , . . step91.pas, . . </p><p>, . ksMtr(x, y, Angle, scaleX, scaleY) x, y - , angle - , scaleX - , scaleY - Y. ksDeleteMtr. </p><p>4. . </p><p> , - . . , , . , . : </p><p> 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; // , .. </p></li><li><p> state := stACTIVE; name := nm end; n:=0; iDocument2D.ksCreateSheetView( par, n ) end; : MakeView(100,100,'busher'); </p><p> ( 0,0 ), . </p><p>5. "" </p><p>. (. 5.1). , "" ( 110) "" ( 130): </p><p> 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 </p></li><li><p>end; </p><p> . 5.1 . </p><p> , 2D ( </p><p> ) ? : </p><p> // stamp := ksStamp( iDocument2d.GetStamp ); itemParam := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) ); itemParam.Init; // if stamp.ksOpenStamp=0 then begin kompas.ksMessage (' '); Exit end; </p><p> 6. </p><p> , , </p><p> 2D (. 6.1) . </p></li><li><p> . 6.1 . </p><p> . </p><p> (0,0) . , </p><p> . , . : </p><p> 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 </p></li><li><p> (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; </p><p> , </p><p> : </p><p>procedure Stamp(c:byte; t:string); var </p></li><li><p> 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; </p><p>, : , . . MakeView . . 4. </p><p> : </p><p>procedure DrawBusher (x0,y0:double; nm:string; D1,D2,L:double); // D1 - ; D2 - ; // L - // x0,y0 - ; // mn - // D1 - ; D2 - ; // L - procedure Contour; // begin </p></li><li><p> 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; </p><p> , </p><p>: </p><p>procedure TMainForm.Button3Click(Sender: TObject); var d1,d2,l:double; begin try </p></li><li><p> d1:=StrToFloat(Edit1.Text); d2:=StrToFloat(Edit2.Text); l:=StrToFloat(Edit4.Text) except Kompas.ksMessage(' '); abort end; if D2&gt;=d1 then begin Kompas.ksMessage(' '); abort end; DrawBusher(100,100, 'busher',d2, d1, l) end; </p><p> , , </p><p>. </p></li><li><p>7. 1. </p><p>0 1 2 - 3 4 5 6 7 8 </p><p> 8. 2. </p><p> 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 ) </p></li><li><p> 9. 3. </p><p> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 </p><p> 10. 4. </p><p>INVARIABLE 0 NUMERATOR $1 DENOMINATOR $2 END_FRACTION $3 UPPER_DEVIAT $4 LOWER_DEVIAT $5 END_DEVIAT $6 S_BASE $7 </p><p> S_UPPER_INDEX $8 </p><p> S_LOWER_INDEX $9 </p><p> S_END $10 </p><p> SPECIAL_SYMBOL $11 SPECIAL_SYMBOL_END $12 </p></li><li><p>RETURN_BEGIN $13 , , </p><p>RETURN_DOWN $14 , , </p><p>RETURN_RIGHT $15 , , </p><p>TAB $16 FONT_SYMBOL $17 ITALIC_ON $40 ITALIC_OFF $80 BOLD_ON $100 BOLD_OFF $200 </p><p> UNDERLINE_ON $400 UNDERLINE_OFF $800 NEW_LINE $1000 </p><p> 11. 5. </p><p> ( pt1,pt2) </p><p>0 1 2 3 4 </p><p> ( textBase) 0 1 ( ) textPos 2 ( ) textPos </p><p> ( bitFlag) </p><p>_AUTONOMINAL $1 </p><p>_RECTTEXT $2 _PREFIX $4 _NOMINALOFF $8 </p></li><li><p>_TOLERANCE $10 _DEVIATION $20 _UNIT $40 _SUFFIX $80 _DEVIATION_INFORM $100 </p><p>_DEVIATION (...</p></li></ul>

Recommended

View more >