ورود

View Full Version : سوال: رسم یک Polygon به عنوان یک Object در ویژوال بیسیک



MahmoodGH
یک شنبه 08 خرداد 1390, 10:33 صبح
سلام دوستان

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

بنده با کد زیر یه Polygon (چند ضلعی) می سازم :

Private Type POINTAPI
X As Long
Y As Long
End Typerivate Declare Function Polygon Lib "gdi32.dll" (ByVal hDC As Long, ByRef lpPoint As POINTAPI, ByVal nCount As Long) As Long
Private Declare Function Ellipse Lib "gdi32.dll" (ByVal hDC As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long, ByVal hDC As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
Dim Points(0 To 4) As POINTAPI
Points(0).X = 40
Points(0).Y = 250
Points(1).X = 250
Points(1).Y = 200
Points(2).X = 530
Points(2).Y = 200
Points(3).X = 200
Points(3).Y = 160
Points(4).X = 100
Points(4).Y = 200
Polygon Picture1.hDC, Points(0), 5
Picture1.Refresh
End Sub

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

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

MahmoodGH
دوشنبه 09 خرداد 1390, 20:42 عصر
دوستان یه مددی بکنن.

خدایی کارم لنگ همین قسمته.:گریه:

Mr'Jamshidy
دوشنبه 09 خرداد 1390, 22:52 عصر
من میخواستم قبلا این نظر رو بدم گفتم شاید دوستان نظر بهتری داشته باشن کار شما راه بیفته که مثل این که هیچ راهی جز این نیست

شما دو حالت داری

حالت اول اینه که وقتی شیئی رو رسم میکنی موقع جا به جا کردن یا تغییر رنگ زمینه و ... بیای و کلا همه پیکسل ها رو چل کنی و با الگوریتم خاصی که خودت مینویسی تشخیص بدی کدوم پیکسل ها ماله شیئ مورد نظره و بعد تغییرات رو اعمال کنی که اگر این کارو بتونی انجام بدی طرفی که میخواد مثلا نقشه یک جا رو بکشه شاید 10 سال باید وقت بزاره تا نقشه یک خونه 75 متری رو بکشه با این سرعت ویبی

حالت دوم اینه که شما میای اشیاء رو به صورت User Control تعریف میکنی یا همون کامپوننت خودمون و بعد زمانی که طرف بخواد از برنامه خروجی بگیره مثلا فایل GIF اونارو رندر کنی که نه سرعت میاد پایین و هم اینکه به تمام خواسته هایی که مطرح کردی میرسی

شرمنده الان اصلا وقت ندارم نمیتونم بیشتر از این توضیح بدم دوستانی که متوجه شدن راهنمایی کنن

vbhamed
سه شنبه 10 خرداد 1390, 06:33 صبح
سلام

ابتدا بايد با توجه به نقطه اي كه ماوس روي اون هست تشخيص بديد روي كدوم Polygon هستيد، براي اين كار بايد از فرمول خط (Y = ax + b) استفاده كنيد تا اين رو بفهميد
بعدش ممكنه اين نقطه مربوط به چند Polygon باشه، براي تشخيص اين نيز بايد مثل فتوشاپ و ... به صورت لايه اي كار كنيد، در هر حال از هر دو Polygon يكي رو و ديگري زير قرار گرفته كه شما بايد اول توي خطوط Polygon بالايي بگرديد و اگر پيدا نشد Polygon هاي بعدي
مختصات نقاط Polygon ها و لايه اونها رو هم بايد به صورت آرايه در برنامه ذخيره كنيد

البته اين كارها خيلي هم ساده نيست، ولي اگر جستجو كنيد نمونه پروژه هاي آماده يا اكتيوايكس براي اين كارها پيدا ميشه مثل VectorDraw كه عين اتوكد كار مي‌كنه شايدم بهتر !

Mr'Jamshidy
سه شنبه 10 خرداد 1390, 15:27 عصر
البته نیازی نیست برای لایه ها آرایه تعریف کنی چون خود ویبی از این حالت (Order) پشتیبانی میکنه و نیازی به این همه دنگ و فنگ نیست

vbhamed
سه شنبه 10 خرداد 1390, 19:32 عصر
سلام

Mr'Jamshidi عزيز

تعريف لايه به خاطر اينه كه وقتي روي يك نقطه در صفحه طراحي كليك مي كنيم كه اون نقطه مربوط به دو Polygon ميشه بتونيم Polygon بالاتر رو تشخيص بديم و اون رو انتخاب كنيم نه اينكه بخواهيم خود Polygon رو بالا و پايين كنيم
ضمنا Polygon ما با دستور رسم خط كشيده ميشه و از اشياء وي بي استفاده نمي كنه

Mr'Jamshidy
سه شنبه 10 خرداد 1390, 22:30 عصر
سلام

ابتدا بايد با توجه به نقطه اي كه ماوس روي اون هست تشخيص بديد روي كدوم Polygon هستيد، براي اين كار بايد از فرمول خط (Y = ax + b) استفاده كنيد تا اين رو بفهميد
بعدش ممكنه اين نقطه مربوط به چند Polygon باشه، براي تشخيص اين نيز بايد مثل فتوشاپ و ... به صورت لايه اي كار كنيد، در هر حال از هر دو Polygon يكي رو و ديگري زير قرار گرفته كه شما بايد اول توي خطوط Polygon بالايي بگرديد و اگر پيدا نشد Polygon هاي بعدي
مختصات نقاط Polygon ها و لايه اونها رو هم بايد به صورت آرايه در برنامه ذخيره كنيد

البته اين كارها خيلي هم ساده نيست، ولي اگر جستجو كنيد نمونه پروژه هاي آماده يا اكتيوايكس براي اين كارها پيدا ميشه مثل VectorDraw كه عين اتوكد كار مي‌كنه شايدم بهتر !


سلام

Mr'Jamshidi عزيز

تعريف لايه به خاطر اينه كه وقتي روي يك نقطه در صفحه طراحي كليك مي كنيم كه اون نقطه مربوط به دو Polygon ميشه بتونيم Polygon بالاتر رو تشخيص بديم و اون رو انتخاب كنيم نه اينكه بخواهيم خود Polygon رو بالا و پايين كنيم
ضمنا Polygon ما با دستور رسم خط كشيده ميشه و از اشياء وي بي استفاده نمي كنه

خوب پس حرف شما متین منو ببخشید فکر کردم میخواد از اشیاء استفاده کنه

موفق باشید