dポイントプレゼントキャンペーン実施中!

このコードで線が引けました、しかし線を回転させたいのですが、座標ではなく、FORMにTEXTBOXがありそこに角度を入力すれば直線が斜めになるとゆうコードにしたいのです。
どうかよろしくお願いします。(CAD系のコードになります)

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
' LineData用の変数です。
Dim cadLineData As New zwDrawCAD.LineData

' 線分の始点と終点を参照します。
Dim cadStartPoint As zwDrawCAD.DPoint = cadLineData.Start
Dim cadEndPoint As zwDrawCAD.DPoint = cadLineData.End


' 線分の座標を設定します。

cadStartPoint.x = 100
cadStartPoint.y = 100
cadEndPoint.x = CDbl(TextBox1.Text)
cadEndPoint.y = 100

'線分の角度を設定します。

Dim d As Double = 45 / (180 / Math.dI)


' 参照したオブ ジェクトを解放します。
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadStartPoint)
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadEndPoint)



' アクティブなDocumentを参照します。
Dim cadDocument As zwDrawCAD.Document = cadApplication.ActiveDocument

' 現在の作図属性を参照します。
Dim cadCurrentDraw As zwDrawCAD.DrawData = cadDocument.CurrentDraw

' 現在のレイヤ、線種、線幅、線色を設定します。
cadLineData.LayerNo = cadCurrentDraw.LayerNo
cadLineData.PenStyle = cadCurrentDraw.PenStyle
cadLineData.PenWidth = cadCurrentDraw.PenWidth
cadLineData.PenColor = cadCurrentDraw.PenColor

' 参照したオブジェクトを解放します。
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadCurrentDraw)

' データベースを参照します。
Dim cadDataBase As zwDrawCAD.CADDB = cadDocument.DataBase

' Undo情報を設定します。
cadDataBase.SetDelimitter("始点座標(0,0) 終点座標((textbox.text),0) の線分")

' 追加した要素の参照用変数です。
Dim cadAddPrimitive As zwDrawCAD.Primitive

' 要素を追加します。
cadAddPrimitive = cadDataBase.Add(cadLineData)

' 参照したオブジェクトを解放します。
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadAddPrimitive)
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadLineData)
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadDataBase)
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadDocument)

End Sub

A 回答 (3件)

こんにちは




コピペして、どのようなコードなのか調べようと思いましたが、残念ながら、クラスのコードがありませんでしたので、調べることができませんでした。
なにやら、とても難しいコードのようなので、そう簡単な質問ではないですね。
私もCADのアプリは毎日使用してますが、3Dだの動画シュミレーションだの、とても自力で開発できるレベルではないので、高額な金額を払って購入しました。
というわけで、回答はできませんが、他の方が回答するヒントになるかもしれませんので、みんなが知ってる超簡単なサンプルを掲載します。
なんでも結構ですので、megane-enagem さんが思ったことを、補足情報で返信して頂けるとうれしいです。
例  「そんなことは、知ってるよ」とか「TextBoxは1個です」とか、なんでも結構です、他の方の回答の参考になると思います


Public Class Form1
'cadStartPointがわかりませんので、とりあえず線のスタート点は(100,100)にしてます。
Const X As Integer = 100 'cadStartPoint.x = 100
Const Y As Integer = 100 'cadStartPoint.y = 100
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim len As Integer 'TextBox1に入力された線の長さ
Dim angle As Double 'TextBox2に入力された角度 単位は度
Dim ansx As Integer '計算された、xの座標
Dim ansy As Integer '計算された、yの座標

len = TextBox1.Text
angle = TextBox2.Text

ansx = X + len * (Math.Cos(angle / 180 * Math.PI)) '終点のx座標
ansy = Y - len * (Math.Sin(angle / 180 * Math.PI)) '終点のy座標

Dim g As Graphics
g = Me.CreateGraphics
'線の終点は、ansx、ansy にしてます。
g.DrawLine(Pens.Black, 100, 100, ansx, ansy) 'スタート点は(100,100)にしてます。
End Sub
End Class
「VB2010 直線の回転」の回答画像3

この回答への補足

FORMにこのコードで作図できましたが、図面の方には作図できませんでした。

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click


' LineData用の変数です。
Dim cadLineData As New zwDrawCAD.LineData

'とりあえず線のスタート点は(100,100)にしてます。
Dim cadStartPoint As zwDrawCAD.DPoint = cadLineData.Start
Dim cadEndPoint As zwDrawCAD.DPoint = cadLineData.End

cadStartPoint.x = 100
cadStartPoint.y = 100

Const X As Integer = 100 'cadStartPoint.x = 100
Const Y As Integer = 100 'cadStartPoint.y = 100

Dim len As Integer 'TextBox1に入力された線の長さ
Dim angle As Double 'TextBox2に入力された角度 単位は度
Dim ansx As Integer '計算された、xの座標
Dim ansy As Integer '計算された、yの座標

len = CDbl(TextBox1.Text)
angle = CDbl(TextBox2.Text)

ansx = X + len * (Math.Cos(angle / 180 * Math.PI)) '終点のx座標
ansy = Y - len * (Math.Sin(angle / 180 * Math.PI)) '終点のy座標



' 参照したオブ ジェクトを解放します。
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadStartPoint)
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadEndPoint)



' アクティブなDocumentを参照します。
Dim cadDocument As zwDrawCAD.Document = cadApplication.ActiveDocument

' 現在の作図属性を参照します。
Dim cadCurrentDraw As zwDrawCAD.DrawData = cadDocument.CurrentDraw

' 現在のレイヤ、線種、線幅、線色を設定します。
cadLineData.LayerNo = cadCurrentDraw.LayerNo
cadLineData.PenStyle = cadCurrentDraw.PenStyle
cadLineData.PenWidth = cadCurrentDraw.PenWidth
cadLineData.PenColor = cadCurrentDraw.PenColor

' 参照したオブジェクトを解放します。
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadCurrentDraw)

' データベースを参照します。
Dim cadDataBase As zwDrawCAD.CADDB = cadDocument.DataBase
' Undo情報を設定します。
cadDataBase.SetDelimitter("始点座標(100,100) 終点座標((ansx,ansy) の線分")

' 追加した要素の参照用変数です。
Dim cadAddPrimitive As zwDrawCAD.Primitive

' 要素を追加します。
cadAddPrimitive = cadDataBase.Add(cadLineData)


' 参照したオブジェクトを解放します。
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadAddPrimitive)
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadLineData)
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadDataBase)
System.Runtime.InteropServices.Marshal.ReleaseComObject(cadDocument)

エラーは出ませんでしたが、作図できませんでした

どこかがおかしいコードになってるのかと思います、教えていただけないでしょうか。

補足日時:2012/08/17 12:22
    • good
    • 0
この回答へのお礼

本当にありがとうございました、補足については解決いたしました。
説明不足の説明でしたが、親身な回答をいただきまして助かりました。

お礼日時:2012/08/17 22:15

回転させるためには、回転の中心座標が必要ですが、どこを中心に回転させるのでしょうか?

この回答への補足

回答ありがとうございます。分かりずらい説明ですいません。

’線分の座標を設定します。

cadStartPoint.x = 100
cadStartPoint.y = 100

を中心に回転させたいです。

宜しくお願いします。

補足日時:2012/08/12 08:28
    • good
    • 0

回転はマトリックスを使います。



行列のことです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!