Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

[درس] سكربت Link to Vertex بعض أساسيات عمل نافذة سكربت

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [درس] سكربت Link to Vertex بعض أساسيات عمل نافذة سكربت

    بسم الله الرحمن الرحيم
    أقدم لكم هذا السكربت المتواضع الذي سنتعلم من خلاله بعض أساسيات الـ MAXScript


    وظيفة هذا السكربت الخفيف كما رأيتم في الفيديو هو ربط جسمين من نوع Poly بالشكل:
    * Pivot الجسم الأول مع نقطة محددة من الجسم الأب.
    و الآن إلى التفاصيل:

    الملاحظة الهامة جدا جدا: أنا مبتدأ ماكس و لست من محترفيه بأي مقياس و كذلك الأمر بالنسبة للـ MAXScript لكن للفائدة العامة أردت أن أشارككم بما تعلمته من خلال التجارب و الوقوع في الخطأ لعلنا بمشيئة الرحمن نتعلم ما ينفعنا.

    ما هو الـ MAXScript ؟
    حسب أوتوديسك:
    MAXScript is the built-in scripting language of Autodesk® 3ds Max® and Autodesk® 3ds Max® Design
    هو لغة سكربت مدمجة مع الماكس و الماكس ديزاين. - لن أدخل في التفاصيل لأننا في مثال صغير فقط
    سنبدأ إنشاء هذا السكربت خطوة خطة مع شرح على الخفيف في البداية الصورة تشرح نفسها



    و بما أننا نقوم نعمل سكربت جديد فنحتاج الخيار New Script فيظهر لنا هذا المحرر البسيط


    و هنا بيت القصيد هنا سنكتب كل الشيفرات البرمجية إذا صح التعبير و سنبدأها بالتعليمة الأولى و نرى نتيجتها و هي

    NewRolloutFloater
    يقوم هذا الأمر بعنل نافذة مرئية للسكربت الخاص بك حيث ستضع عليه أدوات التحكم المطلوبة من أزرار و ما شابه من أدوات
    ملاحظة ليس من الضروري أن يكون للسكربت واجهة مرئية حيث يمكنك كتابة الأوامر التي تريد تنفيذها و عمل run script فحسب ليقوم ماكس بتنفيذها, لكن في مثالنا هذا سنعتمد طريقة الـ GUI إذا صح التعبير Graphical User Interface أي واجهة المستخدم الصورية و هو تعبير خاطئ هنا لأن تعبير GUI يستخدم في لغات البرمجة و ليس في السكربتات حيث يستخدم تعبير CUI و بصرحة لا أعرف إن كان هذا صحيحا أم لا و السطور السابقة هي مجرد كلام أكاديمي نصف ثقافي غير مرتبط نوويا مع الشحنة الكهرومغناطيسية لذرة الكربون المرتبطة بنواة هيدروجين معلب مع دجاج ساديا !!
    الشكل العام للأمر هو
    newRolloutFloater <title_string> <width_integer> <height_integer> [<top_integer> <left_integer>]


    حيث:


    string = محارف نصية
    integer = رقم


    المثل التالي سيقوم بإنشاء نافذة كما في التالي:
    نكتب السطر التالي في محرر السكربت الذي فتحناه سابقا
    MainFloater = NewRolloutFloater "Link To Vertex"‎ ‎250 450
    ثم نختار tools --> Evalutae All


    النتيجة هي


    سيتم إنشاء نافذة جديدة بالأبعاد التي اخترناها و بالعنوان الذي كتبناه
    الآن سنضيف أول عنصر و هو من نوع Rollout يقوم هذا الأمر بإضافة الكائن من نوع Rollout إلى النافذة المنشأة سابقا
    الشكل العام للسكربت
    MainFloater = NewRolloutFloater "Link To Vertex" 250 450
    Rollout new_roll "new rollout"
    (
    )
    addRollout new_roll MainFloater


    و هذه هي النتيجة:



    لاحظو أن اسم النافذة بالنسبة للسكربت هو MainFloater و اسم الرول بالنسبة للسكربت هو new_roll
    و الأمر addRollout يضيف العنصر الذي كتبناه و هو new_roll ضمن السكربت إلى النافذة التي اسمها MainFloater
    حيث الأمر هو: addRollout new_roll MainFloater
    الآن سننشأ العناصر الرئيسية للسكربت كالتالي:

    MainFloater = NewRolloutFloater "Link To Vertex" 180 450
    Rollout Vert_Linker "Vertex Linker" (
    group "Pick Vert" (
    Button GetVert_Button "Get Selected Vert" enabledff
    Label vertnumL "Vertex No is: "
    )
    group "Pick Child" (
    PickButton GetChild_PB "Get Child" enabledff
    Label getChildL "Current Child is:"
    Label getChildn ""
    )
    group "Pick Parent" (
    PickButton GetPrent_PB "Get Parent"
    Label getParentL "Current Parent is:"
    Label getParentn ""
    )
    group "Link ME Plz!" (
    Button LinkME_Button "Link ME!" enabledff
    Label gettest ""
    )
    -----------------------------------------------------------------------------
    )
    addRollout Vert_Linker MainFloater
    Rollout Vert_info "About Scripet" (
    Label info "MaxForums.net"
    )
    addRollout Vert_info MainFloater


    تعتبر الشحطة المزدوجة (--) فاصل ملاحظات يتجاهلها السكربت يمكنك كتابة ما ترغب فيه على يمينها من ملاحظات قد تفيدك في قراءة السكربت
    النتيجة هي نافذة مليئة بالأزرار و العناصر الغير فعالة و التي ليس لها وظيفة بعد



    بعض الشرح للسطور
    group: اي مجموعة حيث يمكنك تجميع مجموعة من الأزرار و اليبلات و ما شابه من عناصر التحكم ضمن مجموعة
    Button الزر القياسي
    Label ليبل و هو عنصر يظهر نصوص.
    Button GetVert_Button "Get Selected Vert" enabledff
    معنى هذا السطر أنه سيتم إنشاء عنصر زر باسم GetVert_Button و بعنوان ظاهر هو Get Selected Vert و بخاصية enabled غير مفعلة.
    Label vertnumL "Vertex No is: "
    معنى هذا السطر أنه سيتم إنشاء عنصر ليبل باسم vertnumL يحتوي النص الظاهر Vertex No is:
    الآن إلى بعض التطبيق يعني هون بلش الجد نوعا ما !!!!
    الفكرة هي كالتالي كما أشرت في بداة الشرح أن العمل سيطبق على جسمين من نوع poly أرجو أن لا تنسو ذلك
    الشكل العام لنافذة السكربت مؤلف من أزرار مفعلة و اخرى غير مفعلى لغرض مخصص و بعض الليبلات التي تشير إلى وضع العملية الحالية:
    أول زر فعال هو Get Parent و تحته عدد 2 ليبل الأول ظاهر عبارة عن عنوان فقط و الثاني سيتم إضافة قيمة النص له عند حدث معين (أهم شي بعالم البرمجة و السكربتات هو الحدث).
    وظيفة الزر هي اختيار العنصر الأب الذي سنختار منه لاحقا نقطة vertex أساسية للارتباط ما نريده هو عند اتمام اختيار العنصر الأب عن طريق هذا الزر أن يطلق مجموعة من الأحداث هي:
    تغيير الليبل الذي يقع تحته ليشير إلى اسم العنصر المحددو أيضا تحديد العنصر ليتم فتح العنصر لاحقا على مستوى الـ vertex كما سنرى و من ثم تفعيل الزر المسمى Get Child الغير مفعل حاليا.
    الزر Get Child كما نرى هو في حالة غير مفعل سيتم تفعيلة كما أشرنا سابقا وظيفة هذا الزر هي اختيار العنصر الإبن الذي سنربطه بالعنصر الأب عند اتمام وظيفة هذا الزر سيطلق الأحداث التالية
    ستغير الليبل الذي تحته ليشير الى اسم العنصر الإبن المختار - سيتم تفعيل الزر Get Vertex الذي سنستخدمه بعد أن ندخل إلى مستوى vertex الفرعي من العنصر الأب و اختيار الـ vertex التي نريدها أن تكون أساس الارتباط.
    أول امر سنعمله هو التالي:
    on GetPrent_PB picked obj do (
    global Parent_Obj = obj
    ParentPicked = true
    getParentn.text = Parent_Obj.name as string
    if ParentPicked == true do GetVert_Button.enabled = on
    if ParentPicked == true do GetChild_PB.enabled = on
    if ParentPicked == true do select Parent_Obj
    )

    ما معنى هذا الكلام؟
    الحدث الأول هو النقر على الزر نفسه on GetPrent_PB picked obj do بعدها ستتم الأحداث التالية
    سيتم الإعلان عن متغير عام من نوع global اسمه Parent_Obj و سييعبر هذا المتغير عن العنصر الأب المختار
    الحدث هو global Parent_Obj = obj
    اعلان فرعي مساعد ParentPicked = true يعلمنا أن عملية الختيار تمت و سنستعمله لإجراء الأحداث التالية.
    تغيير قيمة النص لليبل كما ذكرنا سابقا إلى اسم العنصر المختار getParentn.text = Parent_Obj.name as string
    أحداث تفعيل الأزرار بشكل شرطي
    if ParentPicked == true do GetVert_Button.enabled = on
    if ParentPicked == true do GetChild_PB.enabled = on
    يمكن تحديد كلمة if و الضغط على مفتاح F1 للحصول على كافة المعلومات حولها و كيفية بناء الشرط.
    حدث تحديد العنصر if ParentPicked == true do select Parent_Obj
    وهكذا أكون قد أتممت شرح طريقة كتابة هذا السكربت بشكل مبسط جدا أرجو من الله أن تعم الفائدة
    و السلام عليكم و رحمة الله و بركاته.

    ملاحظة الموضوع عرضة للتعديل لأنني أنهيت الموضوع و انا نصف نائم !!!!



    العمل ب ماكس 2011
    التعديل الأخير تم بواسطة ojail; 24 / 08 / 2010, 02:59 PM.
    - مثال عن كيفية عمل سكربت خفيف بنافذة GUI
    أخوكم محمد عجيل

  • #2
    على فكرة انا شرحت العمليات التي تتم على النافذة المرئية فقط دون الدخول في الأوامر التي تخص التعامل مع عناصر الماكس نفسها.

    ملاحظة هامة جدا:
    السكربت المكتوب ضمن اقتباس يبدو أنه يظهر بشكل غير صحيح
    و ذلك بسبب مشكلتين
    الـ Text Direction و مشكلة الـ Text Alignment في محررات المنابر
    التي سبق و ذكرتها في منبر شكاوى و اقتراحات
    لذلك أعتذر من الأخوة و يمكنكم استخدام الملف المرفق كبديل عن بعض النصوص المكتوبة في الموضوع مباشرة

    الآن كيف قمنا بعملية الربط
    تفضلو السطور تشرح نفسها

    on LinkME_button pressed do (
    Child_Obj.position = polyop.getvert Parent_Obj vertnum;
    )
    أي انه عند الضغط على زر LinkME_button قم بالتالي:
    انتقل إلى خاصية الـ Position للعنصر Child_Obj و اجعلها مساوية لما يلي
    polyop.getvert Parent_Obj vertnum حيث يمثل هذا السطر أمر الحصول عن معلومات عن vertex محدد بالمتغير vertnum لجسم من نوع Poly
    ما هو vertnum ؟
    من قام بفتح الملف المرفق يلاحظ أننا قمنا بالإعلان عن متغير عام اسمه vertnum و قمنا بتعريفه كالتالي:
    global vertnum = ((polyOp.getVertSelection $) as array)[1]
    سيقوم هذا المتغير بارجاع رقم الـ vertex المحددة فرعيا من العنصر الأب.
    و السلام عليكم و رحمة الله و بركاته
    التعديل الأخير تم بواسطة ojail; 24 / 08 / 2010, 01:34 PM.
    - مثال عن كيفية عمل سكربت خفيف بنافذة GUI
    أخوكم محمد عجيل

    تعليق


    • #3
      عمل رائع فعلاً

      بارك الله فيك على مجهودك الرائع ...........

      ارجو ان تضع المزيد من شروحات السكريبت الموجودة في help maxscript

      تعليق


      • #4
        بصراحة رائع جدا يا ابن بلدي
        عنجد شكرا لهذا الموضوع
        معلومات إستفدت منها كتيييير
        إنتبه :
        (إن شاء الله) وليس ( إنشاء الله)
        .....................................................................
        شكوت إلى وكيع سوء حفظي... فأرشدني إلى ترك المعاصي
        وأعلمني أن علم الله نورَ......... ونور الله لايهدى لعاصي

        تعليق


        • #5
          المشاركة الأصلية بواسطة omarzonex مشاهدة المشاركة
          عمل رائع فعلاً

          بارك الله فيك على مجهودك الرائع ...........

          ارجو ان تضع المزيد من شروحات السكريبت الموجودة في help maxscript
          بإذن الله سأترجم بعضها قريبا

          المشاركة الأصلية بواسطة mhg ghost مشاهدة المشاركة
          بصراحة رائع جدا يا ابن بلدي
          عنجد شكرا لهذا الموضوع
          معلومات إستفدت منها كتيييير
          مية هلا و على راسي

          شباب قمت بتعديل الرد رقم 2 و أضفت فيه شرح عملية الربط عن طريق السكربت
          - مثال عن كيفية عمل سكربت خفيف بنافذة GUI
          أخوكم محمد عجيل

          تعليق


          • #6
            متابعك إن شاء الله
            إنتبه :
            (إن شاء الله) وليس ( إنشاء الله)
            .....................................................................
            شكوت إلى وكيع سوء حفظي... فأرشدني إلى ترك المعاصي
            وأعلمني أن علم الله نورَ......... ونور الله لايهدى لعاصي

            تعليق


            • #7
              سؤال :
              هل هناك شرح مختلف بالفيديو عن النص لأن ومثل ما تعرف اليوتيوب لايعمل عنا ؟
              ومحسوبك يعمل على أنترنت بطيئ
              إنتبه :
              (إن شاء الله) وليس ( إنشاء الله)
              .....................................................................
              شكوت إلى وكيع سوء حفظي... فأرشدني إلى ترك المعاصي
              وأعلمني أن علم الله نورَ......... ونور الله لايهدى لعاصي

              تعليق


              • #8
                المشاركة الأصلية بواسطة mhg ghost مشاهدة المشاركة
                سؤال :
                هل هناك شرح مختلف بالفيديو عن النص لأن ومثل ما تعرف اليوتيوب لايعمل عنا ؟
                ومحسوبك يعمل على أنترنت بطيئ
                و الله صحيح نسيت موضوع اليوتيوب بسوريا
                يا سيدي الفيديو في بداية الموضوع يشرح عمل السكربت نفسه أي عندما نعمل Run Script ماذا يعمل
                وليس شرح لنصوص السكربت
                من الممكن أن أقوم بعمل فيديو لكن هذا ليس وعدا !!
                - مثال عن كيفية عمل سكربت خفيف بنافذة GUI
                أخوكم محمد عجيل

                تعليق


                • #9
                  المشاركة الأصلية بواسطة ojail مشاهدة المشاركة
                  و الله صحيح نسيت موضوع اليوتيوب بسوريا
                  يا سيدي الفيديو في بداية الموضوع يشرح عمل السكربت نفسه أي عندما نعمل Run Script ماذا يعمل
                  وليس شرح لنصوص السكربت
                  من الممكن أن أقوم بعمل فيديو لكن هذا ليس وعدا !!
                  شكرا لك أخي على كل حال
                  رح طبق اليوم إن شاء الله
                  شكرا
                  إنتبه :
                  (إن شاء الله) وليس ( إنشاء الله)
                  .....................................................................
                  شكوت إلى وكيع سوء حفظي... فأرشدني إلى ترك المعاصي
                  وأعلمني أن علم الله نورَ......... ونور الله لايهدى لعاصي

                  تعليق


                  • #10
                    السكريبت يوجد فيه أشياء في غاية الأتقان والجمال الجرافيك المميز .....

                    لو أتبعنا أسلوب برمجة ادوات الماكس سكريبت بكون قد حققنا المعجزات

                    وقد نكون ايضاً ننافس الفيراي بأدواته والمنتريال راي بأدواته .......

                    وقد يكون حققنا انجازات عظيمة في مجال الأدوات الماكس السكريبت والماكرو ايضاً .........

                    بأذن الله سوف نصنع الأدوات الجبارة من هنا وبس .......

                    تعليق


                    • #11
                      هل تعلم ان ادوات الماكس الأحترافية مصنوعة من هذا برمجة السكريبت

                      كل اداة تستعملها في الماكس مصنوعة منه ........

                      روووووووووووووووووعة .............

                      لو اتبعناها خطوة نبتكر المستحيل لصنع الأفضل دائما والأسرع في عالم الماكس الأحترافي .........

                      تعليق


                      • #12
                        المشاركة الأصلية بواسطة omarzonex مشاهدة المشاركة
                        هل تعلم ان ادوات الماكس الأحترافية مصنوعة من هذا برمجة السكريبت

                        كل اداة تستعملها في الماكس مصنوعة منه ........

                        روووووووووووووووووعة .............

                        لو اتبعناها خطوة نبتكر المستحيل لصنع الأفضل دائما والأسرع في عالم الماكس الأحترافي .........
                        نعم اخ عمر كلامك 100% صحيح
                        يمكنك عمل الـ plugins و عمل الـ stand alone scripts لن أسمي كل نوع الآن
                        لكن كلامك صحيح.
                        شكرا لمرورك إذا عجبك الموضوع ممكن أن انتقل إلى شرح أداة Visual Script أداة جميلة و مساعدة لرؤية عملك أثناء التصميم
                        ما رأيكم أن تضيفو تقييم للموضوع؟

                        - مثال عن كيفية عمل سكربت خفيف بنافذة GUI
                        أخوكم محمد عجيل

                        تعليق


                        • #13
                          مجهود رائع تشكر عليه ^_^
                          ((رحلة الأف ميل تبدأ بخطوة))
                          ____

                          " النت هو المنابر "
                          أخوكم:فارس الفايز

                          تعليق


                          • #14
                            المشاركة الأصلية بواسطة مهندس ماكس مشاهدة المشاركة
                            مجهود رائع تشكر عليه ^_^
                            مشكور على مرورك الكريم و على ردك الطيب
                            - مثال عن كيفية عمل سكربت خفيف بنافذة GUI
                            أخوكم محمد عجيل

                            تعليق


                            • #15
                              للعلم :
                              الماكس سكريبت مبنية على ++c
                              وفيه المقابس القوية مثل الفيري والمنتال راي مبرمجة كمان على ++c ولا يمكن صنع مثلها على الماكس سكريبت
                              أغلب أدوات الماكس مبرمجة على الماكس سكريبت وليس كلها
                              إنتبه :
                              (إن شاء الله) وليس ( إنشاء الله)
                              .....................................................................
                              شكوت إلى وكيع سوء حفظي... فأرشدني إلى ترك المعاصي
                              وأعلمني أن علم الله نورَ......... ونور الله لايهدى لعاصي

                              تعليق

                              يعمل...
                              X