DELPHIのKOMPAS 3Dを使用して作業を継続(および終了)

画像画像 ご挨拶、%ユーザー名%。



そしておそらく、私は前の投稿で始めたものでこの投稿を終了するでしょう。 というのは、少し時間が経ったが、情報がウェブの広がりにゆっくりと現れ始めたからです...

将来の著者から「一切れのパン」を奪わないために、私は始めたものを終えるだけです。







4.4。 私たちは仕様に取り組んでいます。


モデルを引き続き使用します。 次の行はクリアランスです。

すぐに(私にとって)混乱を招く仕様で始めてください。



Copy Source | Copy HTML<br/>procedure TForm2.SetSpc (Nk:Integer; SSpec: String );<br/> var <br/> spc: ksSpecification;<br/> iter: ksIterator;<br/> obj, columnType, ispoln, blok: LongInt;<br/> count: Integer;<br/> spcColPar: ksSpcColumnParam;<br/> buf: string ;<br/>begin<br/> <br/> spc := ksSpecification(doc3d.GetSpecification); // . <br/> if spc = nil then exit;<br/> <br/> iter := ksIterator( kompas.GetIterator() ); // <br/> iter.ksCreateSpcIterator( '' , 0 , 0 ); // <br/> if iter.Reference <> 0 then begin // <br/> obj := iter.ksMoveIterator( 'F' ); // <br/> // <br/> count := spc.ksGetSpcTableColumn( '' , 0 , 0 );<br/> //kompas.ksMessage( Format( '- = %d', [ count ] ) ); // <br/> <br/> spcColPar := ksSpcColumnParam( kompas.GetParamStruct(ko_SpcColumnParam) );<br/> if spcColPar<>nil then<br/> if spc.ksGetSpcColumnType( obj, // <br/> 4 , // , 1, <br/> spcColPar ) <> 0 then begin <br/> // , "" <br/> columnType := spcColPar.columnType; <br/> ispoln := spcColPar.ispoln;<br/> blok := spcColPar.block;<br/> // ( , ) <br/> buf := spc.ksGetSpcObjectColumnText( obj, columnType , ispoln, blok );<br/> <br/> //kompas.ksMessage( buf ); //, ( ) <br/> spc.ksSpcObjectEdit(obj); // . <br/> if spc.ksSetSpcObjectColumnText(columnType,ispoln, blok , SSpec)<> 1 then<br/> ShowMessage( ' ' ); // <br/> spc.ksSpcObjectEnd(); // <br/> //buf := spc.ksGetSpcObjectColumnText( obj, columnType , ispoln, blok ); <br/> //kompas.ksMessage( buf ); // ( ) <br/> end;<br/> <br/> //obj := iter.ksMoveIterator( 'N' ); // <br/> // <br/> end;<br/>end;<br/> <br/>







4.5。 パーツの名前を使用します。


ここではすべてがはるかに簡単です。

可変部分があります:ksPart;

part.marking:= 'パーツ名'; //詳細を呼び出します。



4.6。 図面を使用します。


このアイテムは非常に豊富です。

しかし、記事のこの部分を書く過程で、リンクを誤ってグーグルで検索してしまいました。 「事故は偶発的ではありません」(c)

図面とその要素を使用した作業の優れた「分析」が提供されています。 ( トピックのホームページ

この点で、私の「流出」の数は急激に減少しました。 なぜなら テンプレート図面はパラメータ化されているため、パーツのサイズを変更すると、投影がそれぞれ自動的に変更され、正しいサイズに変更されます。

テンプレートを開くと、私たちにとっても難しくありません:



Copy Source | Copy HTML<br/> if Kompas = nil then begin<br/> {$IFDEF __LIGHT_VERSION__}<br/> Kompas:= KompasObject( CreateOleObject( 'KompasLT.Application.5' ) );<br/> {$ELSE}<br/> Kompas:= KompasObject( CreateOleObject( 'Kompas.Application.5' ) );<br/> {$ENDIF}<br/> if Kompas <> nil then Kompas.Visible := true ;<br/>end;<br/> <br/>doc2d:= ksDocument2D( kompas.Document2D );<br/> if FileIsThere(Path+ '\'+FileName) then <br/> doc2d.ksOpenDocument(Path+' \ '+FileName,false) // <br/> else Kompas.ksMessage(' - '+FileName); <br/>







5.小さな「回避策」。 または常に悪いアドバイスではありません。




5.1。 図面テンプレート-モデルテンプレートの代わり。


それぞれが個別の作業図面を必要とする多数の類似部品を含む完全に洗練されていないビューでは、図面から直接作成されたテンプレートの塗りつぶしを使用すると便利です。

したがって、ハードディスク上の「冗長」データの量を減らし、処理速度を上げます(100以上の図面では、これはすでに非常に重要です)。

(実際、これは適切な方法ではありません。サイズ表を使用して1つの図面を作成する方が簡単です。しかし、道徳的および倫理的原則に反しない場合は90%のケースで顧客の要望を満たす必要があり、「平和的な」方法で説得することはできません)

テンプレートの作成は非常に簡単です。 これを行うには、ビューを分解して(モデルを分離する)、ディメンション値をテンプレート名に置き換える必要があります。 例:、、、、、。

次に、図面内で直接サイズを変更します。

もちろん、その「公正」は相対的な概念です。

繰り返しになりますが、「お気に入り」のイテレーションを使用します。このイテレーションでは、あまり時間とコンピューターリソースを追加しません。



Copy Source | Copy HTML<br/>function TForm2.DrawWD: Boolean ;<br/> var Iter: ksIterator;<br/> param:ksDimTextParam;<br/> iDimParams : ksLDimParam; // <br/> arr:ksDynamicArray;<br/> textLine : ksTextLineParam;<br/> textItem : ksTextItemParam;<br/> i, ref :Integer;<br/> kStr:ksChar255; // )) <br/>begin<br/> Result:=False;<br/> Iter:=ksIterator(Kompas.GetIterator); // <br/> If Iter.ksCreateIterator(LDIMENSION_OBJ, 0 )=False then exit;<br/> // <br/> <br/> ref :=Iter.ksMoveIterator( 'F' );<br/> if Doc2.ksExistObj( ref )= 1 then<br/> repeat // <br/> <br/> iDimParams := ksLDimParam(Kompas.GetParamStruct(ko_LDimParam));<br/> textLine := ksTextLineParam( kompas.GetParamStruct( ko_TextLineParam) );<br/> textItem := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) );<br/> if ( (iDimParams = nil) Or (textLine = nil) Or (textItem = nil) ) then Exit;<br/> Doc2.ksGetObjParam( ref , iDimParams, ALLPARAM); // <br/> param := ksDimTextParam( iDimParams.GetTPar ); // <br/> if param = nil then Exit;<br/> arr := ksDynamicArray( param.GetTextArr ); // <br/> if arr = nil then Exit;<br/> <br/> kStr:=ksChar255(kompas.GetParamStruct(ko_Char255));<br/> for I := 0 to arr.ksGetArrayCount - 1 do begin // <br/> arr.ksGetArrayItem(i,kStr);<br/> <br/> if '<L1>' =kStr.str then kStr.str:=Format( '%1.1f' ,[L1]);<br/> if '<L2>' =kStr.str then kStr.str:=Format( '%1.1f' ,[L2]);<br/> if '<L3>' =kStr.str then kStr.str:=Format( '%1.0f' ,[L3]);<br/> <br/> if '<D1>' =kStr.str then kStr.str:=Format( '%1.0f' ,[D1]);<br/> if '<D2>' =kStr.str then kStr.str:=Format( '%1.0f' ,[D2]);<br/> if '<D3>' =kStr.str then kStr.str:=Format( '%1.1f' ,[D3]);<br/> // (/) Format() <br/> <br/> arr.ksSetArrayItem(i,kStr); // <br/> end;<br/> <br/> param.SetTextArr(arr); // <br/> iDimParams.SetTPar(param); // <br/> <br/> doc2.ksSetObjParam( ref ,iDimParams,ALLPARAM); // . <br/> <br/> ref :=Iter.ksMoveIterator( 'N' );<br/> until Doc2.ksExistObj( ref )= 0 ;<br/> Iter.ksDeleteIterator;<br/> <br/> doc2.ksRebuildDocument;<br/> Result:=True;<br/>end;<br/> <br/>





例は名目上のものですが、2時間の説明の「報告」によって拷問されます...



5.2。 「余分なジェスチャー」を取り除きます。


図面では、多くの場合、サイズだけでなく、何らかのテキスト(たとえば、Plan_Number、Customer、Number of products)も変更する必要があります。

図面要素を再度「実行」するのではなく、テキストではなく図面テキストオブジェクトを参照して、これらのラベルを寸法値として作成できます。

図面の自由空間に長さ寸法を作成します。 サイズの値をテンプレート名に置き換えます。 サイズのプロパティで、余分な線と矢印を削除します。

サイズが「実行」されると、図面内のテキストを同時に置き換えることができます。

ところで、この手法を使用して、他のいくつかのタイプのサイズを線形寸法に縮小することができます。



5.3。 そしてもう少し。


「すべての設計ドキュメントを提供する」ための本格的な製品および顧客の要件を設計する場合、ドキュメントの完全なセットのテンプレートを作成するだけで十分です。 処理する前に、それらを別の作業フォルダーにコピーし、作業が終了したら、対応するプロジェクト(製品)名を持つフォルダーにコピーします。

ホラーにコピーする手順は簡単です。 私は次を使用しています:



Copy Source | Copy HTML<br/>uses ShellApi;<br/> <br/>function CopyDir( const fromDir, toDir: string ): Boolean ;<br/> var <br/> fos: TSHFileOpStruct;<br/>begin<br/> ZeroMemory(@fos, SizeOf(fos));<br/> with fos do <br/> begin<br/> wFunc := FO_COPY;<br/> fFlags := FOF_FILESONLY;<br/> pFrom := PChar(fromDir + # 0 );<br/> pTo := PChar(toDir)<br/> end;<br/> Result := ( 0 = ShFileOperation(fos));<br/>end; <br/>







実際、KOMPAS 3D自体とそのプログラミングの両方に、はるかに多くの「落とし穴」があります。 覚えていれば、更新されます。



All Articles