// Probe.h: interface for the CProbe class. 
// 
////////////////////////////////////////////////////////////////////// #if !defined(AFX_PROBE_H__4F51F5A8_5065_495F_9FE0_9FB31F18B159__INCLUDED_) 
#define AFX_PROBE_H__4F51F5A8_5065_495F_9FE0_9FB31F18B159__INCLUDED_ #if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 class CVisualView; class CProbe : public CObject  

DECLARE_SERIAL(CProbe); 
public: 
virtual void Serialize(CArchive& ar); 
void DrawProbeSelf(); CVisualView* m_pView; double ProbeX;  double ProbeY;  double ProbeZ; 
// double BMl;  double BMw;  double BMh; 
// double BMRX; double BMRY; double BMRZ; 
// float BMCR;  float BMCG;  float BMCB; 
// int BMeshX;  int BMeshY;  int BMeshZ; 
// int BM_Sigma; int BM_Epsilon; 
// int BMColor; CString Probe_name; CString Probe_alias; CProbe(); 
CProbe(double m_ProbeX,  double m_ProbeY,  double m_ProbeZ, 
  CString m_Probe_name, CString m_Probe_alias); virtual ~CProbe(); }; #endif // !defined(AFX_PROBE_H__4F51F5A8_5065_495F_9FE0_9FB31F18B159__INCLUDED_) 
// Probe.cpp: implementation of the CProbe class. 
// 
////////////////////////////////////////////////////////////////////// #include "stdafx.h" 
#include "Visual.h" 
#include "VisualDoc.h" 
#include "VisualView.h" 
#include "Probe.h" #ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif ////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
IMPLEMENT_SERIAL(CProbe,CObject,1) CProbe::CProbe() 
{ } CProbe::CProbe(double m_ProbeX,  double m_ProbeY,  double m_ProbeZ, 
  CString m_Probe_name, CString m_Probe_alias) 

ProbeX=m_ProbeX;   ProbeY=m_ProbeY; ProbeZ=m_ProbeZ; 
Probe_name=m_Probe_name; Probe_alias=m_Probe_alias; } CProbe::~CProbe() 
{ } void CProbe::DrawProbeSelf() 

glPushMatrix(); 
glColor3d(ProbeX,ProbeY,ProbeZ); 
glTranslated(ProbeX,ProbeY,ProbeZ); 
glRotated(ProbeX,1,0,0); 
glRotated(ProbeY,0,1,0); 
glRotated(ProbeZ,0,0,1); 
m_pView->DrawCube(-ProbeX,-ProbeY,-ProbeZ); 
glPopMatrix(); 
} void CProbe::Serialize(CArchive& ar) 

CObject::Serialize(ar); 
if(ar.IsStoring()) 

ar < <ProbeX; ar < <ProbeY; ar < <ProbeZ; 
ar < <Probe_name; ar < <Probe_alias; 

else 

ar>>ProbeX; ar>>ProbeY; ar>>ProbeZ; 
ar>>Probe_name; ar>>Probe_alias; 

} 上面是我自己定义的类,其中用到m_pView->DrawCube();调用视类下绘图函数,可是这个类可以使用,包括在文档中定义这个类的模板类都已经测试成功,就是视图上无法显示所绘制的图形,不知道什么原因,是不是视类指针获取问题?还是其他问题,请各位大虾支招!!!谢谢先。 

解决方案 »

  1.   

    m_pView->DrawCube 这个里面的代码,可否贴出来?
      

  2.   

    应该是m_pView->DrawCube(); 函数的问题,你贴的代码不能分析你的问题
      

  3.   

    如果是主视图指针,可以这样
    CMainFrame *pFrame=(CMainFrame *)AfxGetApp()->GetMainWnd();   
        CVisualView*pView=(CVisualView*)pFrame->GetActiveView();  你的定义的m_pView应该是没赋值~
      

  4.   

    void CVisualView::DrawCube(double L, double W, double H) //绘制长方体
    {
    double dPoint1[]={0,-W/2,0};
    double dPoint2[]={0,-W/2,-H};
    double dPoint3[]={0,-W/2,-H};
    double dNormal[3]; glPushMatrix(); ///////前面
    ControlNormal(dPoint1,dPoint2,dPoint3,dNormal);
    glBegin(GL_POLYGON);
    glNormal3dv(dNormal);
    glVertex3d(0,-W/2,0);//1
    glVertex3d(0,-W/2,-H);//3
    glVertex3d(0,W/2,-H);//5
    glVertex3d(0,W/2,0);//7
    glEnd(); ////////后面
    dPoint1[0]=-L; dPoint1[1]=-W/2; dPoint1[2]=0;
    dPoint2[0]=-L; dPoint2[1]=W/2;  dPoint2[2]=0;
    dPoint3[0]=-L; dPoint3[1]=W/2;  dPoint3[2]=-H;
    ControlNormal(dPoint1,dPoint2,dPoint3,dNormal);
    glBegin(GL_POLYGON);
    glNormal3dv(dNormal);
    glVertex3d(-L,-W/2,0);//2
    glVertex3d(-L,W/2,0);//8
    glVertex3d(-L,W/2,-H);//6
    glVertex3d(-L,-W/2,-H);//4
    glEnd(); //////左面
    dPoint1[0]=0;  dPoint1[1]=-W/2; dPoint1[2]=0;
    dPoint2[0]=-L; dPoint2[1]=-W/2; dPoint2[2]=0;
    dPoint3[0]=-L; dPoint3[1]=-W/2; dPoint3[3]=-H;
    ControlNormal(dPoint1,dPoint2,dPoint3,dNormal);
    glBegin(GL_POLYGON);
    glNormal3dv(dNormal);
    glVertex3d(0,-W/2,0);//1
    glVertex3d(-L,-W/2,0);//2
    glVertex3d(-L,-W/2,-H);//4
    glVertex3d(0,-W/2,-H);//3
    glEnd(); ///////右面
    dPoint1[0]=0;  dPoint1[1]=W/2; dPoint1[2]=-H;
    dPoint2[0]=-L; dPoint2[1]=W/2; dPoint2[2]=-H;
    dPoint3[0]=-L; dPoint3[1]=W/2; dPoint3[2]=0;
    ControlNormal(dPoint1,dPoint2,dPoint3,dNormal);
    glBegin(GL_POLYGON);
    glNormal3dv(dNormal);
    glVertex3d(0,W/2,-H);//5
    glVertex3d(-L,W/2,-H);//6
    glVertex3d(-L,W/2,0);//8
    glVertex3d(0,W/2,0);//7
    glEnd();

    ///////上面
    dPoint1[0]=0;  dPoint1[1]=-W/2; dPoint1[2]=0;
    dPoint2[0]=0;  dPoint2[1]=W/2;  dPoint2[2]=0;
    dPoint3[0]=-L; dPoint3[1]=W/2;  dPoint3[3]=0;
    ControlNormal(dPoint1,dPoint2,dPoint3,dNormal);
    glBegin(GL_POLYGON);
    glNormal3dv(dNormal);
    glVertex3d(0,-W/2,0);//1
    glVertex3d(0,W/2,0);//7
    glVertex3d(-L,W/2,0);//8
    glVertex3d(-L,-W/2,0);//2
    glEnd();

    ////////底面
    dPoint1[0]=0;  dPoint1[1]=-W/2;  dPoint1[2]=-H;
    dPoint2[0]=-L; dPoint2[1]=-W/2;  dPoint2[2]=-H;
    dPoint3[0]=-L; dPoint3[1]=W/2;   dPoint3[3]=-H;
    ControlNormal(dPoint1,dPoint2,dPoint3,dNormal);
    glBegin(GL_POLYGON);
    glNormal3dv(dNormal);
    glVertex3d(0,-W/2,-H);//3
    glVertex3d(-L,-W/2,-H);//4
    glVertex3d(-L,W/2,-H);//6
    glVertex3d(0,W/2,-H);//5
    glEnd(); glPopMatrix();
    }
    谢谢各位解答,但是问题还在,上述为DrawCube代码。已经在其他类中调用成功。可以绘制,唯独这个自己定义的类不行,很奇怪。是不是自己增加类时有问题?
      

  5.   

    谢谢 Tr0j4n, 问题解决了; 
    还有一点问题是 我的绘制函数 忘记更新了。 
    OnDraw()里的问题。呵呵自己太粗心了。 Tr0j4n 的建议很好,真是高手!置顶!!!!!