イッツキャドコミュニティ

« 戻る

カスタマイズできないの? 2003/08/02 11:54
お名前 : T カテゴリー : 【未分類】

初めて書き込みします、超CAD-1のユーザです。

開発の方に要望があります。
それは、ユーザサイドでカスタマイズできるようにVB等に対応して
欲しいのです。

普通にCADを使うなら超CAD-1でも十分に活用できていますが、少し
手の込んだことや縦横断面図等を作成しようとするとかなりの苦労を
強いられます。

VB(VBAやVBS)でオートメーションに対応すればExcelやAccessなどと
連携して縦横断の作成や構造物の自動作画などが出来ると思います。

○ートCADはVer2000くらいからVBAが搭載されています。(それ以外の
スクリプト言語はもっと前からですけど。)
でも、LT以外は高くて、とてもとても手が出ません。

このあたり、何とか検討していただけないでしょうか?
出来るならDXFの知識をあまり必要としないですむようなVBAが希望です。

>> 返信する <<

修正



返答

Re: カスタマイズできないの? 2005/07/11 11:34
お名前 : Dim カテゴリー : 【未分類】

Private Sub Test()
1
2 '変数名のdrawing layer coor entity は、
3 '他のソフトで既存のオブジェクトやメソッドのような気がするので
4 '任意に変更しています。
5
6 Dim myDrw As itsCAD.Drawing
7 Dim myLyr As itsCAD.Layer
8 Dim myCrd As itsCAD.Coordinate
9 Dim myEnt As itsCAD.Entity
10 Dim cnt As Long
11 Dim i As Long
12
13 On Error GoTo Err_Handler
14
15 Set myDrw = New itsCAD.Drawing
16 myDrw.Application.Visible = True
17
18 '座標系の数を取得
19 cnt = myDrw.GetCoordinateCount
20 For i = cnt To 1 Step -1
21   '座標系のオブジェクトを取得
22 Set myCrd = myDrw.GetCoordinate(i)
23 'オブジェクト取得の確認
24 If myCrd Is Nothing Then
25 MsgBox (False)
26 Else
27 MsgBox (True)
28 End If
29 '座標系のオブジェクトを削除
30 myDrw.DeleteCoordinate (myCrd)
31 Next i
32
33 'レイヤの数を取得
34 cnt = myDrw.GetLayerCount
35 For i = cnt To 3 Step -1
36 'レイヤのオブジェクトを取得
37 Set myLyr = myDrw.GetLayer(i)
38 'オブジェクト取得の確認
39 If myLyr Is Nothing Then
40 MsgBox (False)
41 Else
42 MsgBox (True)
43 End If
44 myDrw.DeleteLayer (myLyr)
45 Next i

>> 返信する <<

修正


Re: カスタマイズできないの? 2005/07/11 11:41
お名前 : Dim カテゴリー : 【未分類】

46 '新規座標系を追加
47 Set myCrd = myDrw.AddCoordinate("新規", 0.1, 0.1, 0, 0, 0, 0, 0, False)
48 If myCrd Is Nothing Then
49 MsgBox ("新規座標系の追加に失敗しました。")
50 Exit Sub
51 End If
52 '新規レイヤを追加
53 Set myLyr = myDrw.AddLayer("新規")
54 If myLyr Is Nothing Then
55 MsgBox ("新規レイヤの追加に失敗しました。")
56 Exit Sub
57 End If
58 '各要素を作図
59 Set myEnt = myDrw.DBAddLine(0, 0, 10, 10, myLyr, myCrd)
60 Set myEnt = myDrw.DBAddCircle(10, 0, 10, myLyr, myCrd)
61 Set myEnt = myDrw.DBAddArc(20, 0, 10, 0, 3.141592, myLyr, myCrd)
62 Set myEnt = myDrw.DBAddEllipse(30, 30, 20, 10, 0, myLyr, myCrd)
63 Set myEnt = myDrw.DBAddEllipsearc(40, 40, 20, 10, 3.141592 / 3, 0, 3.141592, myLyr, myCrd)
64 '指定レイヤをアクティブにする
65 myDrw.Layer = myLyr
66 '最後に作図した要素を削除
67 myDrw.DBDeleteEntity (myEnt)
68 myDrw.SaveAs ("C:\Testtest.it")
69 Set myDrw = Nothing
70 Exit Sub
71
72 Err_Handler:
73 Call MsgBox("エラー番号:" & Err.Number & vbCrLf _
74 & "エラー内容:" & Err.Description, vbCritical + vbOKOnly, "エラー")
75 Set myDrw = Nothing
76
End Sub

>> 返信する <<

修正


Re: カスタマイズできないの? 2005/07/11 11:44
お名前 : Dim カテゴリー : 【未分類】

以下、結果です。

30,44,66行でエラー発生 エラー番号:438
            エラー内容:オブジェクトは、このプロパティまたはメソッドをサポートしていません。

失敗
  デリート系のメソッドが実行できません。

成功
  各オブジェクトの取得は問題なく出来ています。
  新規座標系・レイヤの追加や作図もできています。

要望
  実行できないメソッドを実行できるようにして欲しい…(^^)

  削除のメソッドの戻り値が欲しい。(Boolean等の戻り値で成否の判定がしたい。)

  アクティブレイヤの変更ですが、ステップ実行でCAD側を確認すると複数のレイヤが
  アクティブ(選択)状態になっています。
  変更が画面上に反映されていないだけでしたら、画面の再描画のメソッドが欲しいです。

  既存レイヤや既存座標系の取得後の変更を行うプロパティとそれを
  反映させるメソッドが欲しいです。

  角道さんが指摘されているように、文字入力系のメソッドやプロパティが欲しいです。

>> 返信する <<

修正


Re: カスタマイズできないの? 2005/07/11 12:56
お名前 : 角道 カテゴリー : 【未分類】

なるほど。 Setステートメントですね。

デリート系以外は動きました。

文字さえ書込みできればなあ・・・・

>> 返信する <<

修正


Re: カスタマイズできないの? 2005/07/11 13:38
お名前 : Dim カテゴリー : 【未分類】

To 角道さん
 ご無沙汰しております。(^^ゞ

>展開図作成 考えてみたいと思います。

 4月あたりから急激に忙しく、今日に至っても
 まとまった時間をとる事が叶わない状態です。

 折角のご好意に対して返事も出せずに申し訳ありません。

////////////////////////////////////////////////////

To 開発者さん

 要望の追加です。

 Step実行中に中止してもItsCADが終了します。
 (Set myDrw = Nothig を未通過でも!)
 Step実行状態でしかItsCAD側の実行結果を検証できないのは
 ちょっと辛いですね、、、何とかなりません?

 あと、ItsCAD側にスクリプトの実行を行うための
 手段が欲しいです。
 カスタムメニューにスクリプトの登録が出来ると、
 他のソフトの介在が必要ないケースの場合にありがたいです。

>> 返信する <<

修正


Re: カスタマイズできないの? 2005/08/03 13:56
お名前 : 中村(開発担当) カテゴリー : 【未分類】

>>33 Dimさま
返答が遅くなり申し訳ありません。
Excel 2002 でも同様の現象を確認しました。こちらでは、「Microsoft Visual Basic .NET」でテスト(正常に動作)していたので気づくのが遅くなりました。
なぜ動作が違うのか見当がつかないのですが、調べてみます。
よろしくお願いします。

>> 返信する <<

修正


Re: カスタマイズできないの? 2005/09/20 15:55
お名前 : 中村(開発担当) カテゴリー : 【未分類】

>>33 Dimさま
調査に時間がかかり申し訳ありません。
こちらで公開いたしましたサンプルコードの記述方法を少し変えましたら、Excel VBA でも問題なく動作することを確認しました。新しいものを、再度公開しましたのでお試しください。(超キャド側での変更はございません)

VBA と VB ではコードの記述・解釈方法に少し違いがあるようですね。詳しい理由はよく分からないのですが、判明した範囲でご連絡いたしました。
よろしくお願いします。

>> 返信する <<

修正


Re: カスタマイズできないの? 2005/09/21 09:59
お名前 : Dim カテゴリー : 【未分類】

中村さん、ご苦労様です。m(__)m

たしかにご提示いただいたコードにて実行することが出来ました。
が、、、ちょっと気になるところがあるので確認させてください。

まずデリート系ですが、VBEの入力支援機能をたよりにすると
座標系とレイヤの削除は戻り値の型が表示されず、線の削除は
戻り値に型があるみたいですね。

  DeleteCoordinate(Coordinate As Coordinate)
DeleteLayer(Layer As Layer)

DBDeleteEntity(Entity As Entity) As Boolean

同じく、線や円などの作図系も

  DBAddCircle(x As Double, y As Double, r As Double, [Layer], [Coordinate]) As Entity

なので、戻り値の型が指定されているDBDeleteEntityやDBAddCircleの記述は

戻り値を受け取るなら、
  Set myEntity = DBAddCircle(x, y, r, myLayer, myCoor)
Let blnTemp = DBDeleteEntity(myEntity)

戻り値を受け取らないなら
  DBAddCircle x, y, r, myLayer, myCoor
DBDeleteEntity myEntity

で、戻り値の型が指定されていない(もしくは戻り値がない)メソッドは
DeleteCoordinate myCoor
DeleteLayer myLayer

という記述スタイルになるみたいですね。

う〜ん、戻り値を受け取るか受け取らないかは個人のスタイルで分かれますが
同じデリート系で戻り値が有るメソッドと無いメソッドがあるのは
個人的にはどうかと感じます。

オブジェクトブラウザで確認するとDeleteCoordinate,DeleteLayerはSub、
DBDeleteEntityはFunctionなので前者には戻り値がなく、後者に戻り値があるのは
あたりまえですが、両者をわけている理由があるのですか?

Entityの削除は成否を判定できるけど、レイヤや座標系は削除の成否を
判定できないことになりますよね。

失敗は例外でキャッチという事でしょうか?

////////////////////////////////////////////////////////////////////////////////

あと、贅沢をいえば文字と寸法線にかんするメソッドやプロパティが欲しいです。
中村さん、よろしくお願いします。

>> 返信する <<

修正


Re: カスタマイズできないの? 2005/09/21 11:07
お名前 : Dim カテゴリー : 【未分類】

>VBA と VB ではコードの記述・解釈方法に少し違いがある…

VBAのヘルプを抜粋ですが…。

 Callステートメント

プロシージャを呼び出すとき、キーワード Call は省略できます。

キーワード Call を使って、引数が必要なプロシージャを呼び出す場合は、
引数リスト (引数 argumentlist) をかっこで囲む必要があります。

キーワード Call を省略するときは、引数リストを囲むかっこも省略しなければなりません。

 Sub プロシージャと Function プロシージャの呼び出し

Function プロシージャ呼び出し時のかっこの使い方

関数の戻り値を使用するには、式の中で関数を変数に代入して、
引数をかっこで囲みます。

また、関数の戻り値が不要の場合は、
Sub プロシージャを呼び出すときと同じ方法で関数を呼び出すことができます。
次のコード例のように、かっこを省略して引数リストを指定し、
関数を変数に代入しないように記述します。

MsgBox "作業が完了しました。", 0, "作業ボックス"

注意 このコード例で、引数をかっこで囲むと、構文エラーになります。

>> 返信する <<

修正


Re: カスタマイズできないの? 2005/09/21 13:46
お名前 : Dim カテゴリー : 【未分類】

1つ要望の追加です。
やっぱりVBAの終了もしくはステップ実行の中止にともなって
ItsCADが強制終了します。

何とか終了しないようにはならないでしょうか?

Win2k SP-4 + ItsSuperCAD3 Ver9.56 + Excel2k SP-3
WinXP SP-2 + ItsSuperCAD3 Ver9.56 + ExcelXP SP-3

>> 返信する <<

修正


Page : 1 / 2 / 3 / 4 / 5