منبع فارسی مکس اسکریپت _MaxScript

Elton John

Member
بسم الله

با سلام

توضیحات کدهای مکس اسکریپت

منبع فعلا مکس 2010
ترتیبش بر اساس هلپ مکس اسکریپت و هر بخش در هلپ مکس اسکریپت

روش کار:
توضیح مختصری از کد
و مثال براش
 

amir.nemati63

کاربر VIP
من خیلی علاقه دارم مکس اسکریپت رو یاد بگیرم.
لازم میدونم عرض کنم این علاقه ی من بعد از دیدن لینک ریگ خودرو در امضای شما پیش اومد.
مطمئنا" آموزشهاتون میتونه خیلی مفید واقع بشه.
با تشکر از شما.
موفق باشید
 

Elton John

Member
گرامر و تعریف کد ها در مکس اسکریپت

gramer.jpg

مکس اسکریپت برای تعریف و توضیح شکل کد ها از استاندارد EBNF فرم استفاده میکنه
برای تعریف کد ها از کاراکتر های خاصی استفاده میشه که شکل کلی و توضیحا ت به این صورته:

کد:
[LEFT][LEFT][SIZE=2][FONT=Courier New][...] -- items inside the brackets are optional[/FONT][/SIZE][/LEFT]
[/LEFT]
  [LEFT][LEFT][SIZE=2][FONT=Courier New](...|...|...) -- choose one of the items separated by the bars[/FONT][/SIZE][/LEFT]
[/LEFT]
  [LEFT][LEFT][SIZE=2][FONT=Courier New]{...} -- you can specify the braced item ZERO or more times[/FONT][/SIZE][/LEFT]
[/LEFT]
  [LEFT][LEFT][SIZE=2][FONT=Courier New]{...}+ -- you can specify the braced item ONE or more times[/FONT][/SIZE][/LEFT]
[/LEFT]
  [LEFT][LEFT][SIZE=2][FONT=Courier New]::=  -- define a name for a syntax rule[/FONT][/SIZE][/LEFT]
[/LEFT]
  [LEFT][LEFT][SIZE=2][FONT=Courier New]<rule> -- you can insert what is defined by the named  rule[/FONT][/SIZE][/LEFT]
[/LEFT]
  [LEFT][LEFT][B][SIZE=2][FONT=Courier New][B]bold_characters[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New] -- characters or  token as written[/FONT][/SIZE][/LEFT]
[/LEFT]
به ترتیب:

[...]--آیتم های داخل براکت ها قابل تنظیم هستند

(...|...|...)--شما میتونید یکی از آیتم هایی که توسط bars از هم جدا شدند انتخاب کنید

{...}--شما میتونید 0 آیتم یا آیتم های بیشتری در braced ها معین کنید

{...}+ --شما میتونید 1 آیتم یا آیتم های بیشتری در braced ها معین کنید

::= --شما میتونید یک اسم (متغیر ) برای ترکیب دستوری تعریف کنید (ذخیره کردن در یک متغیر)

<rule> --شما میتونید چیزی که تعریف شده توسط دستورات نامگذاری شده در این قسمت وارد کنید

bold_characters--کاراکتر هایی که قبلا علامت گذاری شدن به همان صورت که نوشته شدند باید وارد بشن


یک مثال از شکل و فرم استاندارد EBNF:

کد:
[LEFT][LEFT][SIZE=2][FONT=Verdana]An  example of an EBNF form is:[/FONT][/SIZE][/LEFT]
[/LEFT]
 [LEFT][LEFT][SIZE=2][FONT=Courier New][[/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]-[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New]]{<digit>}[[/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B].[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New]{<digit>}][([/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]e[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New] | [/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]E[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New])[[/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]+  [/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New]|[/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]  -[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New]]{<digit>}+][/FONT][/SIZE][/LEFT]
[/LEFT]
توضیح این مثال به این صورته:
نکته: طبق اشکال کلی که در بالا گفته شد کدهای کلی مثال زده شده رو توضیح میدیم

کد:
[LEFT][LEFT][SIZE=2][FONT=Verdana][[/FONT][/SIZE][B][SIZE=2][FONT=Verdana][B]-[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Verdana]]{<digit>}[/FONT][/SIZE][/LEFT]
[/LEFT]
شما میتونید این عدد رو منفی کنید ولی میتونید مثبت هم کنید پس قابل تنظیم هست بین - +
digit یعنی رقم یا عدد ولی شما میتونید از ارقام استفاده نکنید و یا بینهایت رقم وارد کنید

کد:
[LEFT][LEFT][SIZE=2][FONT=Verdana][[/FONT][/SIZE][B][SIZE=2][FONT=Verdana][B].[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Verdana]{<digit>}][/FONT][/SIZE][/LEFT]
[/LEFT]
درمورد براکت [] شما میتونید داخل اونو با یه آیتم دیگه جایگزین کنید که فعلا ارقام در نظر گرفته شده digit
brace{} شما میتونید از ارقام استفاده کنید یا نکنید


کد:
[(e  | E)[+  |  -]{<digit>}+]


در مورد [] براکت شما میتونید آیتم ها رو جایگزین کنید پس قابل تنظیمند
در داخل پرانتز ها که آیتم های ما توسط یک بارز | از هم جدا شدند شما میتونید e یا E رو انتخاب کنید

شما میتونید داخل براکت هارو جایگزین کنید ولی باید + یا - رو فقط انتخاب کنید در غیر این صورت باید یه آیتم دیگر رو انتخاب کنید (ادامه کد رو تحت تاثیر میزاره)

شما میتونید یک رقم و یا رقم های بیشتری استفاده کنید ولی نمیتونید هیچ رقمی انتخاب نکنید

یک مثال دیگه :

کد:
[LEFT][LEFT][SIZE=2][FONT=Courier New]<if_expr> ::= [/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]if[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New] <expr> [/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]then[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New] <expr> [ [/FONT][/SIZE][B][SIZE=2][FONT=Courier New][B]else[/B][/FONT][/SIZE][/B][SIZE=2][FONT=Courier New] <expr> ][/FONT][/SIZE][/LEFT][/LEFT]

کد:
<if_expr>  ::=

اینجا میتونید یک اسم به عنوان متغیر استفاده کنید تا مقادر مربوطه در آن ذخیره شوند



if دستوری ذخیره شده در مکس اسکریپت هست
expr اینجا عبارت خود رو برای مقایسه وارد میکنیم

کد:
[ else <expr> ]


فسمت آخر قابل تنظیم هست که ممکن هست استفاده شود و یا نشود بستگی به اسکریپت ما دارد

=============================

بسیاری از دستورات دیگه هستند که با کار کردن میتونید اونا رو فرا گرفته و استفاده کنید که باید تجربه بشه
که انشا الله اگه مبحث ادامه پیدا کنه کد ها رو توضیح خواهیم داد

این پست باز هم آپدیت میشود...
 
آخرین ویرایش:

پرواز

Member
با تشکر فراوان از Young Animator --http://forum.majidonline.com/member.php?u=233302(elton john)

و خوشحالم از اینکه این بحث بالاخره شروع شد و امیدوارم ادامه پیدا کنه :rose::rose::rose:
اموزش اول هم (گرامر و کدخوانی) نیاز اصلی برای شروع اسکریپت خوانی است که بجا و به موقع بوده و در اپدیت جدید مطمئنا کاملتر و روانتر میشود . اگه این قسمت باز شود در ادامه کار راهگشا خواهد بود و هلپ مکس اسکریپت برای تازه کار ها (خود بنده) دیگه مبهم و سنگین نخواهد بود

دوستان توجه کنند که دنیای max script دنیای فراتر از امکانات معمول مکس اما نه جدا از مکس بود و فراگیری ان بینهایت در استفاده بهتر و حرفه ای تر از مکس به کاربر کمک میکند
منابع فارسی ان در دنیای مجازی فوق العاده کم است و کمتر کسی حاضر میشود تا اطلاعات خود را در اختیار دیگران قرار دهد
پس علاوه بر اینکه بر طبق منوال و ترتیب اموزشها با این تاپیک همکاری میکنیم از پستهای انحرافی و سئوالات خارج از روال وترتیب اموزش هم پرهیز کنیم .جهت تائید ارسال یا تشکر از اموزش دهنده یا دیگر دوستانی که ارسال اموزشی دارند بهترین گزینه دکمه تشکر است تا تاپیک بسرعت به اسکرول نرود و دسترسی سریع به اموزشها کند نشود
:rose::rose::rose:



 
آخرین ویرایش:

Elton John

Member
Variable یا متغیر

میشه گفت یکی از پر کاربردترین ها در حین اسکریپت نویسی استفاده از variable ها یا متغیرها هست

حالا متغیر ها یا variable ها چی هستند


variable ها در واقع اسامی هستند که مقادیر(از هر نوعی) را در خود ذخیره میکنند تا بتوانبم آنها رو فراخوانی کرده تا از مقادیر درون آنها استفاده شود
علتی که به آنها متغیر گفته میشه اینه که مقدار درون آنها در هر لحظه میتونه تغییر کنه چه این تغییر توسط ما انجام بشه و چه به صورت خود کار

فرضا

a = 10

در واقع ما مقدار 10 رو از نوع عددی رو در متغیر a ذخیره کردیم

هر وقت شما تایپ کنید a و اینتر کنید مکس اسکریپت مقدار درون اونو به صورت خروجی نمایش میده

اگه بنویسیم :

a -5

چون a مقدار درونش 10 هست پس جواب عبارت بالا میشه 5

حالا اگر به این صورت بنویسیم:

a = a+5

خوب جواب عبارت بالا 15 هست چون مقدار قبلی a عدد 10 میباشد و با مقدار 5 جمع شده پس 15 در جواب خواهیم داشت

ولی چون متغیر a رو ما برابر این عبارت کردیم مقدار درون a از 10 به 15 تغییر میکند

و هر وقت a رو اجرا کنیم در جواب 15 خواهیم داشت
 

Elton John

Member
مکس اسکریپت دارای چند نوع پنجره برای بکار گیری و اجرای اسکریپتها میباشد

مهمترین اونها maxscript Listener که بیشترین کاربرد این پنجره زمانی است که مخواهید یک اسکریپت یا برنامه را شروع به نوشتن کنید

listerner.jpg

با استفاده از این پنجره میتوانید یک کد را یا خطی از کدهارااجرا کنید و همزمان جواب اونو دریافت کنید خوب اگر کد دارای ترکیب درستی باشد مکس اسکریپت یک جواب با خط آبی به آن میدهد

در غیر این صورت جوابی به رنگ قرمز به کدتان میدهد یعنی در کد مشکلی است که باید رفع بشه وکد را اجرا نمیکند یا ناقص اجرا خواهد شد

هر زمانی که یک اسکریپت اجرا میشود نتیجه کار را در این پنجره خواهید دید

معمولیترین روش اجرا دستورات در پنجره maxscript Listener این است که بعد نوشتن کد در محلی که مکان نما در جلوی کد قرار دارد enter را بزنید

maxscript Listener دارای دوقسمت است پنجره صورتی رنگ و سفید رنگ
اگر کد را در پنجره صورتی رنگ بنویسید و اجرا کنید جواب کد را در قسمت سفید رنگ خواهد داد
اگر کدر را در قسمت سفید رنگ بنویسید و اجرا کنید جواب آن را در همان پنجره سفید رنگ خواهد داد ,یعنی یک خط کد و یک خط جواب

این پنجره را میتوانید از منوی مکس اسکریپت باز کنید
-------


پنجره دیگر new script هستش که میتوان از منوی فایل maxscript Listener یا خود منوی Maxscript اونو باز کرد

3.jpg

با استفاده از این پنجره میتوانید کدهای خود را باهم بنویسید و یک جا اجرا کنید
برای اجرای کدها از منوی Tools در پنجره new script گزینه Evaluate All را بزنید ولی جواب کدها یا خروجی را در پنجره maxscript Listener بخش سفید رنگ خواهید دید

اگر در یک مجموعه خط کد بخاید بعضی از خط کد ها فقط اجرا بشه کافیه کد ها رو با موس انتخاب کنید و گزینه
Evaluate Line/Selection رو انتخاب کنید یا اگه مکان نما در جلوی خط کد قرار داشته باشد نیز این گزینه باید استفاده کرد تا خط کد مورد نظر اجرا بشه
------

با استفاده از گزینه open script میتوان اسکریپتی را که قبلا ذخیره شده باز کرد را بدون اجرا باز کرد

با استفاده از گزینه run script میتوان اسکریپتی را که قبلا ذخیره شده اجرا کرد این گزینه را میتوان در منوی فایل maxscript Listener یا منوی اصلی Maxscript مشاهده کرد
 

Elton John

Member
میخام بعضی از قوانین یادگیری maxscript رو بگم ,البته برای اونایی که جدی میخان دنبال کنند.

.. یادگیری کتابهای ریاضی راهنمایی و دبیرستان
.. در عین حال بکار گیری اونا در maxscript

.. مختصات xy...حتما توی کتابهای ریاضی مدرسه یه نگاهی بهش بندازید وگرنه تو maxscript کم میارید

.. هر چیزی تو maxscript یاد میگیرید حتما روی کاغذ اونو برای خود توضیح دهید اینجوری تو ذهنتون بهتر میمونه

-------------------------------



maxscript برای محاسبه یک معادله اتکا زیادی به پرانتزها داره ( maxscript) , پس باید در استفاده از پرانتزها
وحتی در استفاده نکردن از آنها کاملا مسلط باشید. خیلی خیلی مهم "به کتابهای درسی ریاضی مراجعه شود"

MS مثل یک ماشین حساب میمونه

پرانتزها مثل یک مرز محاسباتی میمونند


اگر در یک محاسبه پرانتزی یا مرزی مشخص نکرده باشیم به این صورت محاسبه میشود
... ابتدا توان محاسبه میشود ^
... سپس تقسیم محاسبه میشود /
... سپس ضرب محاسبه میشود *
... سپس جمع و تفریق محاسبه میشود + - "که در این مورد آخر ترتیب محاسباتی لازم نیست"

همچنین اگر هر کدام از این عملگراها نباشد دیگری برای محاسبه مقدم خواهد شد , یعنی مثلا در یک محاسبه توان نباشد پس تقسیم مقدمتر است .

کد:
[FONT=Tahoma][SIZE=1][COLOR=#0000ff]2.0 ^ 5.0 - 6.0 * 4.0 + 7.0 / 8.0[/COLOR][/SIZE][/FONT]
ابتدا 2 به توان 5محاسبه مشود
سپس 7 تقسیم بر 8محاسبه میشود

سپس6ضرب در 4 محاسبه میشود
در آخر سر جمع وتفریق میکنیم

جواب
8.875


==================================================================================================================

فرض کنیم می خواهیم در یک معادله ابتدا جمع انجام گیرد سپس ضرب وبعد بقیه معادله , در اینجاست که از پرانتزها استفاده میکنیم, یعنی یک مرز محاسباتی تعیین میکنیم.

کد:
[FONT=Tahoma][FONT=times new roman][SIZE=2]2 ^ ( (5+6) * 2 ) [COLOR=#0000ff]
[/COLOR][/SIZE][/FONT][/FONT] 
[FONT=Tahoma][FONT=times new roman][SIZE=2][COLOR=#0000ff]4194304[/COLOR][/SIZE][/FONT][/FONT]
کد:
5+6=11
2*11=22
2^22=
  [COLOR=Blue]
4194304[/COLOR]
 
آخرین ویرایش:

Elton John

Member
توضیح گوشه ای از سیستم خواندن دستورات در مکس اسکریپت

خواندن کدها در MS دارای شرایطی است , که دانستن این مطلب بسیار مهم است

... Ms شروع بخواندن کد از خط اول می کند و هر حرف را می خواند تا خط تمام شود
سپس بررسی میکند آیا این خط دارای یک عبارت منطقی بوده تا جواب آن را بدهد

... اگر MS عبارتهای منطقی خود را در آن خط پیدا نکند (به هر دلیلی) به خطهای بعدی خواهد رفت. (در بعضی شرایط خطهای قبلی را نیزخواهد خواند) تا عبارت منطقی خود را پیدا کند تا جواب مناسب را بدهد, جواب درست یا error

... این شرایط برای خطهای بعدی نیز تکرار خواهد شد

... MS دارای سرعت فوق العاده بالایی در خواندن کدها میباشد
برای مثال: شما می خواهیدیک فضای بزرگ از ستارگان درخشان بسازید و نیاز به 4000 کره دارید با سایزهای گوناگون و قرار گرفتن آنها در مکانهای تصادفی,تاحالا فکر کردید به صورت دستی چقدر طول میکشه؟؟؟

اما این کار برای MS فقط چند لحظه است

برای درک بیشتر مطالب, بعضی توضیحات را با مثال می گم

مثال1

کد:

کد:
[FONT=Tahoma]  [SIZE=2][FONT=Times New Roman]a=10[/FONT]
 [FONT=Times New Roman]a*5[/FONT][/SIZE][/FONT]


ابتدا متغیر a را برابر 10 قرار میدهد( پس خواندن خط اول تمام شد) جواب خط اول 10 است
سپس a را که همان مقدار 10 است در 5 ضرب کرده (پس خواندن خط دوم تمام شد) جواب خط دوم 50 است
10
50

مثال2

کد:

کد:
[FONT=Tahoma]  [SIZE=2][FONT=Times New Roman]b*2[/FONT]
 [FONT=Times New Roman]b=15[/FONT][/SIZE][/FONT]

ابتدا میخواهد b را در 2 ضرب کند مشکل اینجاست ک حرف b برای MS بی معنی است و عدد 2 در یک حرف مجهول قابل ضرب نیست( پس خواندن خط اول تمام شد) جواب خط اول یک خطا است -- No ""*"" function for undefine

متغیر b را برابر 15 قرار میدهد (پس خواندن خط دوم تمام شد) جواب خط دوم 15 است

بیایید مثال دوم را برای بار دوم اجرا کنیم , چه اتفاقی می افته ؟


کد:

کد:
[FONT=Tahoma]b*2 
b=15[/FONT]
کد بدون مشکل برای بار دوم اجرا خواهد شد, چرا؟؟
جواب خط اول 30
جواب خط دوم 15
ok
علت این است که زمانی که کد را برای بار اول اجرا کردیم خط اول با خطا مواجه شد اما در خط دوم مقدار b تعیین شد, این مقدار تا زمانی که برنامه 3dsmax فعال باشد در حافظه موقت ذخیره خواهد شد

زمانی که همین کد را برای بار دوم اجرا میکنیم چون مقدار b قبلا در اجرای بار اول تعیین شده در خط اول قرار خواهد گرفت و 15 در 2 ضرب میشود و جواب خط اول 30 است
------------------------------------------
پس می بینیم که هر کد باید در مکان مناسب خودش بکار برده شود تا نتیجه ای که میخواهیم را بما بدهد

برای آشنایی با سرعت وقدرت MS این کد را اجراکنید


از منوی maxscript گزینه newscript را انتخاب کنید,
کد را در پنجره باز شده کپی کنید
از منوی tools پنجره بازشده evaluate all را بزنید

سپس در آخر سر play کنید


کد:
for i = 1 to 500 do
(
s=sphere()
s.radius=random 5 14
s.segs = 16
s.pos=random [-400,-400,0] [400,400,0]
s.slice = on
s.sliceFrom =random 246 340
s.dir=random [50,0,70] [400,200,170]
animate on (
at time 0 s.pos.z=0
at time 30 s.pos.z = random 10 100
)

)
 
آخرین ویرایش:

Elton John

Member
ریاضیات در مکس اسکریپت_1

ریاضیات در مکس اسکریپت_1

اینجا یکسری ریاضیات پر کاربرد رو بررسی میکنیم تا کم کم این مقدمات تموم بشه بریم سروقت کد ها و کاربر عملی

--------------------------------------------------
اعداد مجهول :
حتما این فرمول یادتون هست :

a = x +1

اگر a برابر 5 باشه x چنده
خوب ما این فرمولو اینجوری حل میکردیم :

x = a -1
x=9

یا با عمل گر های متفاوت

در مکس اسکریپت این فرمولو اینجوری مینویسن

x -=1
که اگر x=10 باشه از یک کم میشه میشه 9
سپس عدد 9 دوباره در x ذخیره میشه (به صورت اتومات x یک متغیره) و اگر همین کد رو دوباره اجرا کنیم عدد 8 رو به ما میده و تا بینهایت به سوی منفی ها میل میکنه

مثال :
کدهای زیر رو اجرا کنید (طبق آموزش های قبل)

کد:
x = 10  
x-=1
x-=1
x-=1
x-=1
x-=1
خروجی رو میتونید در maxscript Listener ببینید

دستورات مشابه دیگر به این صورتند:

کد:
[LEFT][LEFT][COLOR=Sienna][B][SIZE=2][FONT=Courier New]<destination> += <expr> -- add <expr> to  destination[/FONT][/SIZE][/B][/COLOR][/LEFT]
[/LEFT]
 [LEFT][LEFT][COLOR=Sienna][B][SIZE=2][FONT=Courier New]<destination> -= <expr> -- subtract <expr> from  destination[/FONT][/SIZE][/B][/COLOR][/LEFT]
[/LEFT]
 [LEFT][LEFT][COLOR=Sienna][B][SIZE=2][FONT=Courier New]<destination> *= <expr> -- multiply destination by  <expr>[/FONT][/SIZE][/B][/COLOR][/LEFT]
[/LEFT]
 [LEFT][LEFT][COLOR=Sienna][B][SIZE=2][FONT=Courier New]<destination> /= <expr> -- divide destination by  <expr>[/FONT][/SIZE][/B][/COLOR][/LEFT]
[/LEFT]
 
آخرین ویرایش:

Elton John

Member
اعداد اعشاری یا Float
اعداد صحیح یا Integer

=======================================================================================================

اعداد در مکس اسکریپت به دو گروه یا کلاس تقسیم میشن

اعداد صحیح که مکس اسکریپت اونو به عنوان integer میشناسه
مانند :
کد:
1,2,3,4,5.....

45212135
456
25
52136
اعداد اعشاری که مکس اسکریپت اونو به عنوان Float میشناسه
مانند:
کد:
1.2
2.564485656
0.26541586
2.0
5.0
45.0
45.235
مکس اسکریپت بین این دو تمایز قائل میشه و میتونه به صورت جدا از هم اونها رو بکار ببره

بعضی از مقادیر در مکس اسکریپت فقط عدد صحیح یا integer می باشند:
مثلا تعداد سگمنتهای یک box رو وقتی تعیین میکنیم میگیم
1 سگمنت
2 سگمنت
35 سگمنت
ولی ما مثلا 2.5 سگمت نداریم


بعضی از مقادیر در مکس اسکریپت عدد اعشاری یا float می باشند:
مثلا شعاع یک کره و میگیم
شعاع 45.0
شعاع 2.5
شعاع 100.2546
=======================================================
مکس اسکریپت اعداد integer و float رو به سه صورت محاسبه میکنه:

1.----------------------------
اگر در عبارتی شما هیچ عدد اعشاری وارد نکنید یعنی تمام اعداد integer باشند مکس اسکریپت در جواب و خروجی اون عبارت اعداد و یا عدد integer را خواهد داد
مثال :

کد:
2*5*356/785-23
جواب ما یک عدد integer میباشد
19-
و یا

کد:
1/2
جواب 0

2.------------------------------------------
اگر در عبارتی شما هیچ عدد اعشاری وارد نکنید یعنی تمام اعداد float باشند مکس اسکریپت در جواب و خروجی اون عبارت اعداد و یا عدد float را خواهد داد
مثال :

CODE]2.0*5.0*356.0/785.0-23.0[/CODE]

جواب ما یک عدد float میباشد
18.465-

و یا

کد:
2.5/45.256
جواب 0.0552413

3.------------------------------
اگر اعداد integer و float در یک عبارت باهم بکار برده باشند عبارت بر اساس سیستم float محاسبه میگردد
یعنی float ارجحیت دارد

مثال:

کد:
1.0 / 2
جواب 0.5
==========================================================
توضحات و نکات:

مثال:
1 متساوی است با 1.0

مثال:
1
عدد صحیح است
1.0
عدد اعشاری است

--------------------------------------------
شما میتونید اعدادی که اعشار آنها صفر مطلق هستند به این صورت خلاصش کنید(یک dot بعد از عدد قرار دهید و بنویسید
مثال :

2.0 همون .2
5.00000 همون .5
452136.00 همون .452136

مثال:

1.0 / 2.0
یا
.1/ .2
جواب هر دو 0.5

-----------------------------------------------------

اعداد اعشاری دارای دو بخش میباشند:

بخش صحیح
بخش اعشار

مثال:

2.5
بخش صحیح این عدد اعشاری 2 میباشد

بخش اعشار این عدد اعشاری 0.5 میباشد

---------------------------------------
اگر در عبارتی چند عدد صحیح بکار برده باشد و چند عدد اعشاری بکار برده باشد هر بخش به صورت جداگانه عمل میکند ولی در نهایت جواب اعشاری خواهد بود

مثلا این عبارت رو ببینید

کد:
2/6*2/56*9-123.
این عبارت دارای دو بخش میباشد

بخش اولش این اعداد هستند که اعداد صحیح میباشند :

کد:
2/6*2/56*9
و بخش دومش که یک عدد اعشاری موجود داریم

کد:
.123-
محاسبه به این صورته که بخش اول به صورت سیستم integer محاسبه میشه و جوابش یک عدد صحیح میباشد
جواب 0

و بخش دوم جوابش عدد .123- میباشد یک عدد اعشاری

و در نهایت مکس اسکریپت این محاسبه رو میکنه:

کد:
0-123.
جواب نهایی:

کد:
-123.0
پس اگر ما یکی دیگر از اعداد رو اعشاری کنیم مثلا عدد 2 جواب کلا فرق میکنه

جواب

کد:
-122.893
این نکات بسار مهمند و در استفاده از اونها باید دقت کنید
=============================
 
آخرین ویرایش:

Elton John

Member
نکات و توضیحات مختلف_1
=================================================================

ما کلا دو نوع سیستم مقدار دهی داریم برای TRANSFORM (حرکت چرخش اسکیل ) و یا مقادیر مختلف

absolute

در این نوع سیستم مقدار دهی از یک منبع مختصات بخصوص صورت میگیره
این سیستم در مکس به صورت پیشفرض منبع مختصات تمام موضوعات رو وسط grid تعیین میکنه که در اصطلاع World نامیده میشه و مختصاتش xyz رو 0و0و0 تعیین میکنه

مثلا جسمی در مختصات world از مرکز مختصات در محور x مقدارش 10 هست
پس این جسم از مرکز مختصات world در محور x مقدار 10 واحد فاصله دارد

حالا اگه ما مقدار 15 رو به محور x بدیم جسم ما 5 واحد به سمت مثبت ها حرکت کرده تا به فاصله 15 برسه
ولی اگه ما عدد 15 رو دوباره وارد کنیم تغییری حاصل نمیشه چون جسم ما از محور x مقدار 15 رو فاصله دارد

و اگر ما مقدار 10 رو دوباره وارد کنیم جسم ما 5 واحد به عقب بر میگردد و دوباره در مختصات 10 قرار میگیرد

پس مقادیر وارده بر اساس absolute یعنی اینکه جسم ما از مرکز مختصات در چه مقداری قرار دارد


relative

در این سیستم جسم از نظر مکانی که در آن قرار دارد Transform میکند

مثلا ما به یه جسم میگیم 10 واحد در محور x جلو برو و اگر ما مقدار 10 رو وارد کنیم این مقدار به مکانی که جسم در اون قرار دارد اضافه میشه یعنی 10 واحد دیگه جلو میره

فرض کنیم جسمی در مختصات صفر قرار دارد
اگر ما به محور x اون 10 واحد اضافه کنیم پس جسم 10 واحد جلو میره
اگر ما دو باره مقدار 10 رو وارد کنیم جسم ما 10 واحد دیگر به مکان قبلیش اضافه میشه و میره جلو

پس جسم ما مختصات ایکس اون 20 میباشد از مرکز مختصات
 

پرواز

Member
سلام و خسته نباشیدبه استاد عزیز:rose::rose::rose:
تشکرازاینکه وقت گذاشته و اموزش مکس اسکریپت رو پیش میبرید
انصافا مواردی رو که تا حالا گفتید برای خود من خیلی عالی و مهم بودند الا لخصوص بحث ترانسفورمها که تازه شروع شدند

اگر من یا دیگر دوستان ارسالی نداریم و فقط از دکمه تشکر استفاده میکنیم فقط برای اینه که بحث به انحراف نره
قول میدم همین که به تحلیل و نوشتن اسکریپت برسیم سئوالات ما هم شروع میشه

راستی ما که نفهمیدیم چرا نام کاربری عوض کردی ولی در کل یه اسم راحتتر و جدا از نام کاربری به ما بگو تا راحتتر ارتباط برقرار کنیم
...منتظر ادامه هستیم:rose::rose::rose:
 

Elton John

Member
با سلام

البته دوستان من هیچ محدودیتی برای اظهار نظر و یا سوال پرسیدن توی تاپیک نزاشتم تاپیک خودتونه :green:

در مورد منحرف شدن مبحث یا چیزه دیگه ای مشکلی نیست چون قراره تو پست سوم یک فهرست از پست هامو قرار بدم
که پیدا کردن مطالب راحت باشه و هر وقت خواستید تو تاپیک سوال مطرح کنید یا هر مبحث مرتبطی هیچ مشکلی نیست

در ضمن من تا جایی که بتونم تجربیاتمو در اختیار دوستان در مورد مکس اسکریپت میزارم و در حد توانم پاسخگوی دوستان خواهم بود
ولی چون دست تنهام و مبحث هم فوق العاده سنگینه تاپیک دیر به دیر آپدیت میشه

اسم کاربری که را حتر شده همون التون جان بگید راحتیم مشکلی نیست:green:

با تشکر
 
آخرین ویرایش:

Elton John

Member
جستجو برای فرمول های ریاضی در اینترنت و .... و بکار گیری آنها مکس اسکریپت
==================================================================


شما برای بکارگیری فرمول های ریاضی میتونید به منابع مختلفی مراجعه کنید مثل کتب ریاضی و یا اینترنت و غیره

کافیه بدونید کار این فرمول چیه و تو مکس اسکریپت استفادش کنید

مثلا این فرمول برای پیدان کردن مرکز مثلث بکار میره که من تو اینترنت بهش برخوردم و تو مکس اسکریپت به این صورت نوشتمش :
فرض کنید سه راس مثلث هر راس دارای position زیر باشند در نتیجه:
کد:
( [x1,y1,z1] + [x2,y2,z2] + [x3,y3,z3] )  /  3
شما دوستان علاقمند هم اگه به فرمول بدرد بخوری برخوردید اینجا بزارید

شما میتونید کاربرد عملی این فرمول رو در ویدئو زیر مشاهده کنید :
cen-triangle.mp4 - 993 KB

 
آخرین ویرایش:

Elton John

Member
Properties -- دسترسی به تنظیمات یک node
==============================================================

بریم سر کار عملی تر

کد زیر رو اجرا کنید

کد:
mybox = box()

حالا اگه تو ویوپورت نگاه کنید میبینید یک box ایجاد شده
خب شاید این سوال پیش بیاد که این باکس که چرا با این اندازه ایجاد شده وقتی شما کد مورد نظر رو اجرا میکنید و هیچ تنظیمی براش وارد نکنید مکس اسکریپت از تنظیمات پیش فرض برای طول عرض و .... استفاده میکنید

خب سوال mybox چیه ؟
mybox اینجا یک متغیره که کلیه تنظیمات box و خودbox رو در خود ذخیره کرده
پس نیازی نیست که این تنظیمات روی هر وقت لازم داشتیم دوباره ایجاد کنیم کافیه mybox رو صدا بزنیم
شما میتونید هر اسمی رو دوست داشتید (در چهار جوب قوانین مکس اسکریپت) استفاده کنید

خب حالا بریم سراغ تنظیمات باکس مورد نظر وتغییراتی توش ایجاد کنیم
ولی من میخام بدونم که در باکس من چه تنظیماتی وجود دارد تا بتونم ازش استفاده کنم

من قبلش از یک دستور خاص استفاده میکنم تا بدونم چه تنظیماتی برای این باکس وجود دارد
پس مینویسم:

کد:
showproperties mybox

جواب و خروجی بالا به این صورت به نمایش در میاد:

کد:
  .height : float
  .length : float
  .lengthsegs : integer
  .width : float
  .widthsegs : integer
  .mapcoords : boolean
  .heightsegs : integer
  .realWorldMapSize : boolean
false


حالا من قصد دارم ارتفاع box رو تغییر بدم و 50 بزارم
و سگمنت های عرضی رو به 4 عدد تغییر بدم

پس من تو properties های بالا این دو تا رو که لازم دارم پیدا کرم یعنی:

کد:
  .height : float
 .widthsegs : integer

هر properties دارای دو بخش هست

بخش اول دستور مورد نظر برای انجام عمل مورد هدف مثلا height.

بخش دوم به معنی "ابن دستور این مقدار رو قبول میکند"_"قراردادن مقدار مورد نظر برای ایت دستور" مثلا :
float

بریم سر وقت تغییرات:

کد:
mybox.height = 50
mybox.widthsegs = 4

اگه تنظیمات باکس رو نگاه کنید تغییرات رو میبینید
در واقع mybox همون باکس ماست که تنظیمات خاص خود را در خود دارد
 

Elton John

Member
Properties --توضیحات بیشتر
=========================================================
اگر توجه کرده باشید من در بعضی کدها بعد از موضوع یک نقطه قرار میدم و سپس یک کد دیگه
مثل

کد:
[FONT=Tahoma][SIZE=2]$sphere01.radius = 5[/SIZE] 
[SIZE=2][SIZE=2]$box01.position  [/SIZE][/SIZE][/FONT]
به این کدهای کوچک در مکس اسکریپت Property میگن یا تنظیم کننده


مثال: ما یک کره داریم در یک کره تنظیماتی چون radius تعداد segment ها,slice وغیره داریم به اینها میگن property ی کره ما

ما یک باکس داریم در یک باکس ما تنظیماتی چون طول عرض ارتفاع تعداد segmentهای طول عرض ارتفاع و غیره داریم به اینها میگن property های بکس ما

ما یک موضوع داریم که به editable polygon تبدیل شده ما تنظیماتی چون vertexها polygonها extrode وغیره داریم به اینها میگن propertyهای موضوع من


برای دسترسی به propertyی یک موضوع بعد از آن نقطه یا dot قرار میدهیم سپس property ی موضوع را تایپ میکنیم




property ها یا تنظیم کننده ها اصولا دو تا کار در موضوعات اصلی انجام میدهند

1* با عث تغییر در تنضیمات موضوع میشوند

اگر property ی یک موضوع را بنویسیم سپس مساوی جلوی آن قرار دهیم و مقداری را بعد از مساوی قرار دهیم و اجرا کنیم ما باعث تغییر propertyی آن موضوع شدیم


مثال:

کد:
$sphere01.radius = 5
5
 
$box01.width =50
50
 
$Camera01.fov = 62
62
2* باعث اطلاع از مقدار تنظیمها میشوند

اگر property ی یک موضوع را بنویسیم و تغییری در آن ندهیم با اجرای آن فقط information ی از مقدار آن property در آن موضوع به ما میدهد


مثال:

کد:
[FONT=Tahoma] [/FONT]$Teapot01.radius
14.6962
 
$Omni01.castShadows
true
 
$Cylinder01.capsegs
1
---------------------------


اصولا propertyها سه دسته اند

propertyهای مختص به یک موضوع
propertyهای سرتاسری یا Global
propertyهای مختص به یک کلاس یا دسته
--------------------

propertyهای مختص به یک موضوع
مثلا موضوعی مانند کره دارای radius یا شعاع هست اما نمیتوان اونو به یک باکس نسبت داد چون باکس دارای طول و عرض هستند و برعکس

propertyهای سرتاسری یا Global
مانند position _rotation_direction_scale و غیره

مثلا بیشتر موضوعات در مکس قابلیت اینو دارن که مختصات اونهار تغییر داد
بیشتر موضوعات در مکس قابلیت چرخش یا rotation دارن

کد:
[FONT=Tahoma][SIZE=2][SIZE=2][/SIZE][/SIZE][/FONT]$sphere01.position=[10,5,0]
[10,5,0]
 
$camera01.position=[0,0,0]
[0,0,0]
propertyهای مختص به یک کلاس یا دسته

فرض کنیم ما نمیتوانیم یک دوربین را به یک موضوع editatble poly تبدیل کنیم اما یک موضوع هندسی یا geometry مانند سیلندر بکس کره وغیره قابل تبدیل هستند پس در دوربینها نمیتوان property ی editatble poly
پس این مخصوص geometryها هستند
 
آخرین ویرایش:

Elton John

Member
Properties --توضیحات بیشتر
=========================================================


بعد از توضیحات قبلی در مورد properties الان مشکل این جاست چطور بفهمیم که یک موضوع دارای چه propertyهای هست و نوع مقدارهایی که این propertyها قبول میکنه چیه


=========================================

سه نمونه از بیشترین مقدارهایی که در مکس اسکریپت کاربرد دارد شامل

*integer یا عددهای صحیح مثل 1 _ 2 _3 455_ 800 _10 _0 _1020

*float یا اعشاری مثل 2.5 _ 80.50 _ 13.0 _ 0.0 _ 1.0

*boolean یا درست و نادرست مثل true _false _on _off

........
بیشتر property ها این سه مقدارها را قبول میکند

مثال:

فرضا در propertyهای یک box هر سه این مقدارها مورد استفاده هستند

طول و عرض box مقدارهای Float را میپذیرند مثل 25.0 4.1 10.2
اگر یک مقدار عدد صحیح وارد شود به عنوان عدد اعشاری شناخته میشود

تعداد segmentهای یک box عددهای integer را میپذیرند مثل 5 10 15
ما نمیتوانیم تعداد segmentih ها را 2.5 کنیم اگر این عدد وارد شود به عنوان 2 آن رامیشناسد

روشن و خاموش کرد property ی realWorldMapSize در تنظیمات box توسط مقدارهای boolen یعنی true و false یا on ,off انجام میشود

============================================

برای اینکه بفهمیم در هر موضوع چه نو propertyهایی وجود داره باید از تابع



کد:
showproperties <Object>
استفاده کنیم. طریقه استفاده در این مثال بیان شده

مثال:


کد:
showproperties $box01
 
.height : float
.length : float
.lengthsegs : integer
.width : float
.widthsegs : integer
.mapcoords : boolean
.heightsegs : integer
.realWorldMapSize : boolean
false
================================
جواب این تابع همیشه از دو بخش تشکیل شده است



کد:
.height : float
*اسم propertyهایی که در این موضوع قابل استفاده است

*مقداری که هر property میتواند آن را بپذیرد مثل integer,float,boolean,.....
 
آخرین ویرایش:

Elton John

Member
برای اینکه مبحث از یکم جذابتر بشه :

این اسکریپت رو در یک پنجره new script کپی و پیست کنید
از منوی tools گزینه evulate all رو انتخاب کنید

نتیجه طبق عکس:

کد:
mysp = sphere radius: 37 segs:32
converttomesh mysp

for i = 1 to (getnumverts mysp) do 
(
     rad  = random 1.5 2
     rad1=random 2 20
    --rad2 = (random (random 0 200) (random 0 200))-30
    seed rad
    seed rad1
    radco = random (color 176 26 26) (color 224 198 87)
    mypos = getvert mysp i
    
    cr_tipot = teapot radius: rad wirecolor: radco pos:mypos 
    in coordsys cr_tipot cr_tipot.dir = -mysp.pos
    in coordsys local (scale cr_tipot [1, 1 ,(rad1+2)])
    
)

delete mysp
2012-04-06_020040.jpg
 

جدیدترین ارسال ها

بالا