صفحة 1 من 2 12 أخيرأخير
النتائج المعروضة من 1 الى 20 من مجموع 27

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

ردود: 27 | زيارات: 6982
  1. #1

    [درس] سكربت 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


  2. #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

  3. #3

  4. #4
    عضو فعال
    صور رمزية mhg ghost
    تاريخ التسجيل
    Mar 2009
    المنطقة
    سورية - الشام
    ردود
    216
    بصراحة رائع جدا يا ابن بلدي
    عنجد شكرا لهذا الموضوع
    معلومات إستفدت منها كتيييير
    إنتبه :
    (إن شاء الله) وليس ( إنشاء الله)
    .....................................................................
    شكوت إلى وكيع سوء حفظي... فأرشدني إلى ترك المعاصي
    وأعلمني أن علم الله نورَ......... ونور الله لايهدى لعاصي

  5. #5
    اقتباس الموضوع الأصلي كتب بواسطة omarzonex معاينة الرد
    عمل رائع فعلاً

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

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

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

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

  6. #6
    عضو فعال
    صور رمزية mhg ghost
    تاريخ التسجيل
    Mar 2009
    المنطقة
    سورية - الشام
    ردود
    216
    متابعك إن شاء الله
    إنتبه :
    (إن شاء الله) وليس ( إنشاء الله)
    .....................................................................
    شكوت إلى وكيع سوء حفظي... فأرشدني إلى ترك المعاصي
    وأعلمني أن علم الله نورَ......... ونور الله لايهدى لعاصي

  7. #7
    عضو فعال
    صور رمزية mhg ghost
    تاريخ التسجيل
    Mar 2009
    المنطقة
    سورية - الشام
    ردود
    216
    سؤال :
    هل هناك شرح مختلف بالفيديو عن النص لأن ومثل ما تعرف اليوتيوب لايعمل عنا ؟
    ومحسوبك يعمل على أنترنت بطيئ
    إنتبه :
    (إن شاء الله) وليس ( إنشاء الله)
    .....................................................................
    شكوت إلى وكيع سوء حفظي... فأرشدني إلى ترك المعاصي
    وأعلمني أن علم الله نورَ......... ونور الله لايهدى لعاصي

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

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

  10. #10
    عضو متميز
    صور رمزية omarzonex
    تاريخ التسجيل
    Jan 2009
    المنطقة
    نبض قلبي- فلسطين
    ردود
    6,681
    السكريبت يوجد فيه أشياء في غاية الأتقان والجمال الجرافيك المميز .....

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

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

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

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


  11. #11
    عضو متميز
    صور رمزية omarzonex
    تاريخ التسجيل
    Jan 2009
    المنطقة
    نبض قلبي- فلسطين
    ردود
    6,681
    هل تعلم ان ادوات الماكس الأحترافية مصنوعة من هذا برمجة السكريبت

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

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

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

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

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

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

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


  13. #13
    عضو متميز
    صور رمزية مهندس ماكس
    تاريخ التسجيل
    May 2009
    المنطقة
    السعودية
    ردود
    2,008
    مجهود رائع تشكر عليه ^_^
    ((رحلة الأف ميل تبدأ بخطوة))
    ______________________________

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

  14. #14
    اقتباس الموضوع الأصلي كتب بواسطة مهندس ماكس معاينة الرد
    مجهود رائع تشكر عليه ^_^
    مشكور على مرورك الكريم و على ردك الطيب

  15. #15
    عضو فعال
    صور رمزية mhg ghost
    تاريخ التسجيل
    Mar 2009
    المنطقة
    سورية - الشام
    ردود
    216
    للعلم :
    الماكس سكريبت مبنية على ++c
    وفيه المقابس القوية مثل الفيري والمنتال راي مبرمجة كمان على ++c ولا يمكن صنع مثلها على الماكس سكريبت
    أغلب أدوات الماكس مبرمجة على الماكس سكريبت وليس كلها
    إنتبه :
    (إن شاء الله) وليس ( إنشاء الله)
    .....................................................................
    شكوت إلى وكيع سوء حفظي... فأرشدني إلى ترك المعاصي
    وأعلمني أن علم الله نورَ......... ونور الله لايهدى لعاصي

  16. #16
    عضو فعال
    صور رمزية mhg ghost
    تاريخ التسجيل
    Mar 2009
    المنطقة
    سورية - الشام
    ردود
    216

    Wink

    اقتباس الموضوع الأصلي كتب بواسطة ojail معاينة الرد
    [B][SIZE=3][COLOR=yellow]
    شكرا لمرورك إذا عجبك الموضوع ممكن أن انتقل إلى شرح أداة Visual Script أداة جميلة و مساعدة لرؤية عملك أثناء التصميم
    ما رأيكم أن تضيفو تقييم للموضوع؟
    متاابعك إن شاء الله
    إنتبه :
    (إن شاء الله) وليس ( إنشاء الله)
    .....................................................................
    شكوت إلى وكيع سوء حفظي... فأرشدني إلى ترك المعاصي
    وأعلمني أن علم الله نورَ......... ونور الله لايهدى لعاصي

  17. #17
    اقتباس الموضوع الأصلي كتب بواسطة mhg ghost معاينة الرد
    للعلم :
    الماكس سكريبت مبنية على ++c
    وفيه المقابس القوية مثل الفيري والمنتال راي مبرمجة كمان على ++c
    صحيح

    اقتباس الموضوع الأصلي كتب بواسطة mhg ghost معاينة الرد
    للعلم :
    ولا يمكن صنع مثلها على الماكس سكريبت
    أغلب أدوات الماكس مبرمجة على الماكس سكريبت وليس كلها
    غير صحيح ! جزئيا فلست مجبرا على استخدام لغة الماكس سكربت لبرمجة أي شيء

    الـ MAXScript ليست مجرد مطوع أوتوماتيكي مساعد, ادخل إلى مساعدة ماكس سكربت و ستجد أنه بإمكانك عمل Plugin متقدم جدا لكن نحن العرب صبرنا قليل !

    شباب تم إضافة الجزء الثاني من الدرس
    من هنا
    Visual MAXScript Editor
    .
    أخر تعديل بواسطة ojail في 25 / 08 / 2010 الساعة 10:43 PM

  18. #18
    الغريب بالموضوع أن عدد الزيارات للموضوع فاق الـ 170 زيارة و فقط 3 زملاء هم المتفاعلون معه !!!!

    الآن الدرس متوفر على شكل ملف pdf
    من هنا:
    http://www.4shared.com/document/mDv1..._a_Vertex.html

    .
    .
    أخر تعديل بواسطة ojail في 04 / 09 / 2010 الساعة 01:44 PM

  19. #19
    عضو
    صور رمزية anas al
    تاريخ التسجيل
    Jul 2010
    المنطقة
    حلب - سوريا
    ردود
    85
    ممتاز جداً على قولة mhg ghost ابن بلدي ولكن المهمة الصدق في المساعدة واللي أنت عبتقوم فيه

  20. #20
    اقتباس الموضوع الأصلي كتب بواسطة anas al معاينة الرد
    ممتاز جداً على قولة mhg ghost ابن بلدي ولكن المهمة الصدق في المساعدة واللي أنت عبتقوم فيه
    يا سيدي عن جد ما فهمت عليك !

Bookmarks

قوانين الموضوعات

  • لا يمكنك اضافة موضوع جديد
  • لا يمكنك اضافة ردود
  • لا يمكنك اضافة مرفقات
  • لا يمكنك تعديل مشاركاتك
  •  
  • كود BB مفعّل
  • رموز الحالة مفعّل
  • كود [IMG] مفعّل
  • [VIDEO] code is مفعّل
  • كود HTML معطل