ショッピングモール  Automotive / Motorcycles ( Pictorial )


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.5310

CADを使った描画について
投稿者---taku(2006/01/23 01:49:56)


質問させて頂きます。
OS:WindowsXP
コンパイラ:borland C++ compiler5.5

プログラムの計算結果をCADを使って描画したいのですが、どのように作ればいいのでしょうか?
また、CADでなくても他のアプリケーションを使った便利な描画方法をご存知でしたら、ぜひ教えてください。

もしこちらで質問するのが不適切ならすぐに削除させていただきます。




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:CADを使った描画について 5311 Blue 2006/01/23 02:10:03


No.5311

Re:CADを使った描画について
投稿者---Blue(2006/01/23 02:10:03)


>プログラムの計算結果をCADを使って描画
ということは、ある計算をすると、描画できるような結果(図形等)になるのでしょうか?
CADを使うということならば、CADのバージョンも載せたほうがよいかと思います。

C/C++でなく、AutoCADであればVBAでつくったほうが楽かも。(あんま詳しくない)


この投稿にコメントする

削除パスワード

No.5312

Re:CADを使った描画について
投稿者---taku(2006/01/23 02:29:42)


ご回答有難うございます!

>ということは、ある計算をすると、描画できるような結果(図形等)になるのでしょうか?
はい。具体的に説明すると長くなってしまうので省きますが、何百個もプロットをしてその形がどうなるか?ということを確認したいと思ってます。図の編集、保存をしたいのでCADにしました。

説明が足りなくてすいません。TurboCAD Professional v8です。





この投稿にコメントする

削除パスワード

No.5314

Re:CADを使った描画について
投稿者---Blue(2006/01/23 02:41:06)


TurboCADはすいません、よくわかりません。

ちなみに
Windows + C/C++で画像ファイル(ビットマップ等)を作成することは可能です。


この投稿にコメントする

削除パスワード

No.5315

Re:CADを使った描画について
投稿者---taku(2006/01/23 02:53:22)


>Windows + C/C++で画像ファイル(ビットマップ等)を作成することは可能です。

できればその方法について質問していいですか?
win32apiの勉強もちょっとしたんですが、ファイル読み込みや入力の関数を併用すると命令が無視されてしまいます。
ウィンドウは作成されるんですけど・・・。
遅くまで付き合っていただいて申し訳ありません。


この投稿にコメントする

削除パスワード

No.5316

Re:CADを使った描画について
投稿者---Blue(2006/01/23 08:46:58)


> win32apiの勉強もちょっとしたんですが、ファイル読み込みや入力の関数を併用すると
> 命令が無視されてしまいます。
とは具体的にどのような記述をすると、どうなるのでしょうか?


この投稿にコメントする

削除パスワード

No.5330

Re:CADを使った描画について
投稿者---taku(2006/01/23 18:51:23)


>とは具体的にどのような記述をすると、どうなるのでしょうか?
遅くなってすいません。部分的に抜き出すと

// ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
HDC hDC;
PAINTSTRUCT ps;

     int x;

scanf("%d",&x);
      
switch( msg )
{
case WM_PAINT:
      hDC = BeginPaint( hWnd, &ps );
  MoveToEx( hDC, 100, 100, NULL );
  LineTo( hDC, x, 100 );
EndPaint( hWnd, &ps );
return 0;

case WM_DESTROY:
 PostQuitMessage( 0 );
   return 0;
}
return DefWindowProc( hWnd, msg, wp, lp );
}
実験的に上のような記述をしました。xを入力して直線描画っていう簡単なものです。試したところ、scanfが実行されずに直線だけがウィンドウに表示されます。実際はファイル名をscanfで読み込んで、データファイル読み込みという事をしようと思ってます。


この投稿にコメントする

削除パスワード

No.5332

Re:CADを使った描画について
投稿者---Blue(2006/01/23 23:23:21)


scanfは標準入力から入力するもの(?)で、普通はWindowsアプリケーションでは使いません。
ファイルから読み込む場合は、fscanfやfgetsを使います。

ファイル読み込みは一度でよいので、WM_CREATEで処理するのかな。

それとソースを載せる時は、HTML変換ツールを使ってください。

また、CADで〜ということでないならば、新しくツリー(スレッド)をつくったほうが良いかも

# 編集機能がほしいですな。


この投稿にコメントする

削除パスワード

No.5333

Re:CADを使った描画について
投稿者---RiSK(2006/01/24 00:02:42)


>scanfは標準入力から入力するもの(?)で、普通はWindowsアプリケーションでは使いません。
>ファイルから読み込む場合は、fscanfやfgetsを使います。

ですね。
どうしてもscanf(っていうか標準入出力)を使いたいのであれば,
コンソールアプリケーションとしてプロジェクトを作り,
さらにCreateWindowなどでウインドウを作るって手もあります。


この投稿にコメントする

削除パスワード

No.5335

Re:CADを使った描画について
投稿者---taku(2006/01/24 00:33:56)


ありがとうございます。

>どうしてもscanf(っていうか標準入出力)を使いたいのであれば,
>コンソールアプリケーションとしてプロジェクトを作り,
>さらにCreateWindowなどでウインドウを作るって手もあります。
windowsアプリケーションとしてではなく、コンソールアプリケーションとしてコンパイルするということですか?その場合ウィンドウを作成する処理も同じプログラムの中に組み込むことができるのですか?

いまいち理解できていないので、質問のポイントがずれていたら申し訳ありません。



この投稿にコメントする

削除パスワード

No.5336

Re:CADを使った描画について
投稿者---RiSK(2006/01/24 08:13:45)


>windowsアプリケーションとしてではなく、コンソールアプリケーションとしてコンパイルするということですか?その場合ウィンドウを作成する処理も同じプログラムの中に組み込むことができるのですか?

…。やってみたのでしょうか…。
残念なレスです。

>いまいち理解できていないので、質問のポイントがずれていたら申し訳ありません。

やっていないから「いまいち」なのですか?
質問者が「いまいち」を使わないでください。
あなたの質問のポイントがずれているかどうか
いまいち分かりません。


この投稿にコメントする

削除パスワード

No.5340

Re:CADを使った描画について
投稿者---taku(2006/01/24 19:38:26)


申し訳ありません。まず試してから具体的に質問するべきでした。
もし宜しければ質問を続けさせてください。

実験的に以下のように記述してみました。座標(x,y)を標準入出力関数を使って読み取り、ウィンドウを開いて直線を記述しようとというつもりで作りました。borland c++ builderをBCC Developerに取り込んでコンパイルをしているんですが、プロジェクト設定をコンソールアプリケーション(-WC)に設定してコンパイルしました。
実行した結果、コマンドプロンプトの画面は表示され標準入出力は使えるんですが、描画ウィンドウが表示されません。どこに問題点があるのでしょうか?

#include <windows.h>
#include <stdio.h>

#define WINDOW_WIDTH  (400)
#define WINDOW_HEIGHT (300)
#define WINDOW_X ((GetSystemMetrics( SM_CXSCREEN ) - WINDOW_WIDTH ) / 2)
#define WINDOW_Y ((GetSystemMetrics( SM_CYSCREEN ) - WINDOW_HEIGHT ) / 2)

HWND Create(HINSTANCE hInst);
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);

int x,y;

int main(){
   printf("x=");
   scanf("%d",&x);
   printf("y=");
   scanf("%d",&y);
   return 0;
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
   HWND hWnd;
   MSG msg;

   hWnd = Create( hInst );
   if( hWnd == NULL )
   {
      MessageBox( NULL, "ウィンドウの作成に失敗しました", "エラー", MB_OK );
      return 1;
   }

   ShowWindow( hWnd, SW_SHOW );
   UpdateWindow( hWnd );

   while( 1 )
   {
      if( GetMessage( &msg, NULL, 0, 0 ) == 0 )
      {
         break;
      }
      else
      {
         TranslateMessage( &msg );
         DispatchMessage( &msg );
      }
   }

   return 0;
}

HWND Create(HINSTANCE hInst)
{
   WNDCLASSEX wc;

   wc.cbSize = sizeof(wc);      
   wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; 
   wc.lpfnWndProc = WndProc;    
   wc.cbClsExtra = 0;      
   wc.cbWndExtra = 0;          
   wc.hInstance = hInst;             
   wc.hIcon = (HICON)LoadImage(    
      NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON,
      0, 0, LR_DEFAULTSIZE | LR_SHARED
   );
   wc.hIconSm = wc.hIcon;  
   wc.hCursor = (HCURSOR)LoadImage(
      NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR,
      0, 0, LR_DEFAULTSIZE | LR_SHARED
   );
   wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
   wc.lpszMenuName = NULL;
   wc.lpszClassName = "Default Class Name";

   if( RegisterClassEx( &wc ) == 0 ){ return NULL; }

   return CreateWindow(
      wc.lpszClassName, 
      "Sample Program", 
      WS_OVERLAPPEDWINDOW,
      WINDOW_X,
      WINDOW_Y,
      WINDOW_WIDTH,
      WINDOW_HEIGHT,
      NULL,
      NULL,
      hInst,
      NULL
   );
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
   HDC hDC;
   PAINTSTRUCT ps;

   switch( msg )
   {
   case WM_PAINT:
      hDC = BeginPaint( hWnd, &ps );
      MoveToEx( hDC, 100, 100, NULL );
      LineTo( hDC, x, y );//標準入力の値を利用 
      EndPaint( hWnd, &ps );
      break;

      case WM_DESTROY:
      PostQuitMessage( 0 );
      break;
   }

   return DefWindowProc( hWnd, msg, wp, lp );
}





この投稿にコメントする

削除パスワード

No.5342

Re:CADを使った描画について
投稿者---taku(2006/01/24 20:11:02)


すいません。ちょっと長すぎました。
余計なところを除いてもう一回書き込みます。

#include <windows.h>
#include <stdio.h>

#define WINDOW_WIDTH  (400)
#define WINDOW_HEIGHT (300)
#define WINDOW_X ((GetSystemMetrics( SM_CXSCREEN ) - WINDOW_WIDTH ) / 2)
#define WINDOW_Y ((GetSystemMetrics( SM_CYSCREEN ) - WINDOW_HEIGHT ) / 2)

HWND Create(HINSTANCE hInst);
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);

int x,y;

int main(){
   printf("x=");
   scanf("%d",&x);
   printf("y=");
   scanf("%d",&y);
   return 0;
}


<中略>

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
   HDC hDC;
   PAINTSTRUCT ps;

   switch( msg )
   {
   case WM_PAINT:
      hDC = BeginPaint( hWnd, &ps );
      MoveToEx( hDC, 100, 100, NULL );
      LineTo( hDC, x, y );//標準入力の値を利用 
      EndPaint( hWnd, &ps );
      break;

      case WM_DESTROY:
      PostQuitMessage( 0 );
      break;
   }

   return DefWindowProc( hWnd, msg, wp, lp );
}





この投稿にコメントする

削除パスワード

No.5343

Re:CADを使った描画について
投稿者---RiSK(2006/01/24 20:56:06)


>実行した結果、コマンドプロンプトの画面は表示され標準入出力は使えるんですが、描画ウィンドウが表示されません。
>どこに問題点があるのでしょうか?

コンソールアプリにおけるエントリーポイントはmainです。
WinMainは呼ばれません。WinMainを明示的に呼ぶか,
中身をmainに移動する必要があります。


この投稿にコメントする

削除パスワード

No.5344

Re:CADを使った描画について
投稿者---taku(2006/01/25 22:51:34)


>コンソールアプリにおけるエントリーポイントはmainです。
>WinMainは呼ばれません。WinMainを明示的に呼ぶか,
>中身をmainに移動する必要があります。
なるほど、勉強になります。

まだエラーがでるんですが、タイトルとかなり脱線していますので、これ以上ここで質問するのは控えさせて頂きます。
しばらく自分で試してみます。本当にありがとうございました。


この投稿にコメントする

削除パスワード

No.5334

Re:CADを使った描画について
投稿者---taku(2006/01/24 00:27:43)


>ファイル読み込みは一度でよいので、WM_CREATEで処理するのかな。
読み込みは一度だけです。WM_CREATEで処理するとはどういう事でしょうか?
>それとソースを載せる時は、HTML変換ツールを使ってください。
失礼しました。以後気をつけます。

>また、CADで〜ということでないならば、新しくツリー(スレッド)をつくったほうが良いかも
そうですね。これ以上長引きそうなら新しくつくります。ご指摘有難うございます。


この投稿にコメントする

削除パスワード

No.5339

Re:CADを使った描画について
投稿者---Blue(2006/01/24 17:10:40)


>読み込みは一度だけです。WM_CREATEで処理するとはどういう事でしょうか?

具体的にはこんな感じ。
// ウィンドウプロシージャ
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp )
{
    static POINT start, end;    // static変数であることに注目
    
    HDC hDC;
    PAINTSTRUCT ps;

    switch( msg )
    {
    case WM_CREATE: // ウィンドウ作成時に1度だけ呼ばれる
        // 実際はファイルを読み込むが、
        // ここでは簡単にするため代入のみ
        start.x = 100; start.y = 100;
        end.x   = 300;   end.y = 100;
        break;
    case WM_PAINT:
        hDC = BeginPaint( hWnd, &ps );
        MoveToEx( hDC, start.x, start.y, NULL ); 
        LineTo( hDC, end.x, end.y );
        EndPaint( hWnd, &ps );
        break;
    case WM_DESTROY: 
        PostQuitMessage( 0 );
        break;
    default:
        return DefWindowProc( hWnd, msg, wp, lp );
    }
    return 0L;
}




この投稿にコメントする

削除パスワード

No.5341

Re:CADを使った描画について
投稿者---taku(2006/01/24 19:46:26)


大変細かく教えていただきましてありがとうございます。
教えて頂いた方法でファイル読み込みもうまくできました。
とりあえずファイル名の指定などはプログラムに直接書き込んで作ってみようと思います。
質問の仕方に至らない部分が多々あり申し訳ありません。
大変お世話になりました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity