الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أول مشاركة أرجو المساعدة من الشمري و من اي خبير

مغلق
بدأه مخالف_38 في 2 أغسطس 2005 · 3 رد · 873 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم هذي اول مشاركة لي ارجو مساعدتي ....مالخطأ في هذا الكود...

المطلوب من الكود::

عند الضغط بالماوس يرسم نقطة و هكذا و بعد رسم النقاط نفتح منيو و نختار درو فترسم من كل نقطة خط مستقيم للنقاط الاخري.

الكود ماشي معايا و لكن لما اضغط درو ما يرسم الخطوط ...ارجو المساعده بسرعه

  #include <GL/glut.h>

   GLsizei winWidth = 400, winHeight = 300;   // Initial display-window size.
GLenum drowMode=GL_TRIANGLE_FAN;

   void init (void)
   {
      glClearColor (0.0, 0.0, 1.0, 1.0);  // Set display-window color to blue.

      glMatrixMode (GL_PROJECTION);
      gluOrtho2D (0.0, 200.0, 0.0, 150.0);
   }

void drowOption(GLint selectedOption)
{switch (selectedOption) {
	case 1: drowMode= GL_TRIANGLE_FAN;  break;}
glutPostRedisplay ();
}

   void displayFcn (void)
   {
      glClear (GL_COLOR_BUFFER_BIT);     //  Clear display window.

      glColor3f (1.0, 0.0, 0.0);         //  Set point color to red.
      glPointSize (5.0);                 //  Set point size to 3.0.
   }

   void winReshapeFcn (GLint newWidth, GLint newHeight)
   {
      /*  Reset viewport and projection parameters  */
      glViewport (0, 0, newWidth, newHeight);
      glMatrixMode (GL_PROJECTION);
      glLoadIdentity ( );
      gluOrtho2D (0.0,  (newWidth), 0.0,  (newHeight));

      /*  Reset display-window size parameters.  */
      winWidth = newWidth;
      winHeight = newHeight;
   }

   void plotPoint (GLint x, GLint y)
   {
      glBegin (GL_POINTS);
         glVertex2i (x, y);
      glEnd ( );
   }

   void mousePtPlot (GLint button, GLint action, GLint xMouse, GLint yMouse)
   {
      if (button == GLUT_LEFT_BUTTON && action == GLUT_DOWN)
         plotPoint (xMouse, winHeight - yMouse);

      glFlush ( );
    }




    void main (int argc, char** argv)
    {
       glutInit (&argc, argv);
       glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
       glutInitWindowPosition (100, 100);
       glutInitWindowSize (winWidth, winHeight);
       glutCreateWindow ("Mouse Plot Points");

       init ( );
       glutDisplayFunc (displayFcn);
       glutReshapeFunc (winReshapeFcn);
       glutMouseFunc (mousePtPlot);
    glutCreateMenu (drowOption);
    glutAddMenuEntry (" drow lines",1);
    glutAttachMenu (GLUT_RIGHT_BUTTON);
       glutMainLoop ( );
  }
#2

انتو بتدخلو و تخرجو من غير ماتكتبولي ليش ؟؟؟؟؟ منتو عارفين ولا منتو فاهمين قصدي؟؟؟

#3

هلا يا دلوعة الماما .. هذا اسمك مالي دخل ... 28d31cc269.gif

ليش معصب ... الموضوع لسا منزله ... اصبر شوي

هنا المشكلة

انت لما تظهر القائمة .. فان كل شيء على الشاشة سيمسح

ولن يبقى الا الموجود في دخل الدالة

      glutDisplayFunc (displayFcn);

يعني

displayFcn();

وذلك لان القائمة تعيد رسم النافة يعني تستدعي glutPostRedisplay (); اوتوماتيكيا >>> جلست ساعة وانا احاول اكتبها :)

الحل :

الحل التحايل ......46d1acd995.gif

يعني تسوي مثل كذا

 bool enable = false;

 void drowOption(GLint selectedOption)
{
	switch (selectedOption)
	{
  case 1:  
    enable = true;
    break;
	}
}

انشئ دالة رسم افضل .. للتنظيم 

void DrawLine(float x, float y)
{
	glPushMatrix();

   glLoadIdentity();
  glTranslatef(x,y,0);

  glBegin(GL_LINES);
  glVertex2i(0,0);
  glVertex2i(1,0);
  glEnd();

  glPopMatrix();

}

انتقل لدالة ارسم اللي عندك وهي

  void displayFcn (void)
  {
     glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);     //  Clear display window.
     glColor3f (1.0, 0.0, 0.0);         //  Set point color to red.
	if(enable == true )   
	{
  DrawLine(0,0);
	}

   glFlush(); 
   glutSwapBuffers();                  // Call this to swap buffers (swap frames).

  }

الامر واضح ..

اذا نقر على القائمة

اجعل قيمة enable صحيحة .

وبالتالي سيتحق الشرط ..

 	 if(enable == true )   
	{
  DrawLine(0,0);
	}

ويرسم الخط..

القائمة عند ظهرورها ستمسح كل شيء ولن تبقي الا على الموجد داخل الدالة displayFcn

على العموم ستجد المثال بالمرفقات واضفت له كم من اضافة مثلا

static int xDown , yDown ,xUP , yUP;

     void plotLine ()
  {
     glBegin (GL_LINES);
        glVertex2i (xDown, yDown);
        glVertex2i (xUP, yUP);

     glEnd ( );
  }

 void mousePtPlot (GLint button, GLint action, GLint xMouse, GLint yMouse)
  {
     if (button == GLUT_LEFT_BUTTON && action == GLUT_DOWN)
  {
        plotPoint (xMouse, winHeight - yMouse);
  }
     else if (button == GLUT_RIGHT_BUTTON && action == GLUT_DOWN)
  {
   xDown=xMouse;
   yDown=winHeight -yMouse;
       glPointSize (1.0);                 //  Set point size to 3.0.
          plotPoint (xMouse, winHeight - yMouse);
  }

     else if (button == GLUT_RIGHT_BUTTON && action == GLUT_UP)
  {
   xUP=xMouse;
  yUP=winHeight - yMouse;
  plotLine();
  }

      glFlush ( );
   }

ترسم الخط ... بالزر اليمن .. ولاترفع الماوس .. تسحب الى النقطة الاخرى التي تريدها .. ترفع صبعك عن الزر الايمن .. يرسم الخط يالاحداثيات التي تريدها انت ..

:)

لكن

لاحظ ان الرسم اللي ترسمه بالماوس رح يمسح .. لانك لا ترسم داخل الدالة

displayFcn

وعشان تظهر النافذة اضغط الزر الوسطي للماوس....

****************

للمعلومية يا اخ ,,,,

انت افدتني بحاجة كنت ناسيها من زماااان .... جزاك الله الجنة .. وهو ما يتعلق بالاحداثيات

وهذا دليل على ان اي واحد يقدر يفيد مهما كان مستواه ..

نتمنى تتفاعل معنا .. لمصلحتك ولافادتك اخوانك ايضا

لاني مليت من الاعضاء اللي يشاركون مشاركتين فيها كم سؤال وبعدين ماعاد نشوفهم ..

:)

شوف المرفقات ...

dal.zip

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#4

شكرا لك يا شمر ي و جزاك الله الف خير بس انت شكلك فهمتني خطأ ..انت الي عملتة انه انت بنفسك ترسم الخطوط و لكن المطلوب مني انه بعد تحديد النقاط نضغط علي الزر اليمين فتطلع قائمة فيها drow line نختارة يقوم البرنامج اتوماتيكيا يرسم خطوط من كل نقطة الي النقاط الاخري و ذلك باستخدام GL_TRIANGLE_FAN ....مشكلتي هي اني ماني عارفة كيف اخلي ال GL_TRIANGLE FAN تشتغل داخل المنيو يعني كيف اربطها بالمنيو ....يريتك تساعد اختك في الله و لك جزيل الشكر...

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…