View Full Version : حرفه ای: شناسایی و انتخاب خط ترسیم شده
as987498749874
پنج شنبه 29 فروردین 1392, 22:04 عصر
سلام دوستان
برنامه من شامل مختصات اولیه و ثانویه می باشد که توسط ان یک خط ترسیم می شود
برنامه قابلیت تشخیص ابتدا و انتهای خط در هنگام حرکت موس بوسیله نمایش یک مربع کوچک مثل اتوکد را دارد
در این برنامه قصد دارم تا تمایزی بین خط انتخاب شده و انتخاب نشده بوجود اورم که این کار را با تغییر ضخامت خط انجام میدهم
هر خط دارای 12 ایتم اطلاعاتی از قبیل X1,X2,Y1,Y2 رنگ و زاویه و طول و ... هست
هدف از انتخاب خط نمایش اطلاعات مورد نظر ان است و همچنین کپی و یا انتقال خط
حال به دنبال راهی برای تشخیص خط مورد نظر هستم البته بدون استفاده از تشخیص ابتدا و انتهای خط
اصلا اب پاکی رو بریزم رو دستتون
چطور میشه با داشتن مختصات نقاط کل خطوط در حافظه ، خط ترسیم شده روی فرم را تشخیص داد؟
راحت تر از این نمی تونم بگم
mehran901
پنج شنبه 29 فروردین 1392, 22:56 عصر
دوست عزیز کار خیلی ساده ای هست .... البته ی نقطه گنگ جا گذاشتی و اونم این هست که آیا برنامه در حالت اجرا خطوط رو به صورت دینامیک میسازه یا استاتیک هست ؟
البته زیاد در روند حل سوالتون در روش من تاثیر گذار نیست
Dim k As Line
For Each k In Me.Controls
rem COdes
Next
کد ساده بالا میاد بین کل خطوط فرم سرچ میزنه و شما به راحتی میتونید مختصات خطوط رو به شکل k.y1 k.y2 k.x1 k.x2 به دست بیارین و با توجه به مختصات موستون ببینید موس روی ابتدا انتها ( یا در حالت پیشرفته تر با کمی خلاقیت) رو خط واقع شده یا نه
البته فک کنم منظورتن همین بود .... یعنی ی سری خط روی فرم هست موس روی این ها که قرار گرفت ضخامتش تغییر کنه
as987498749874
جمعه 30 فروردین 1392, 08:58 صبح
با سلام
مر 30 از جوابتون
در حقیقت من از کد زیر برای ترسیم استفاده میکنم
dim Code(0 to 500,0 to 12)as string
در چهار خانه اول مختصاتها و پنجم اندازه و... و دوازدهم ضخامت خط قرار دارد
حال با استفاده از حلقه و دستور Line در یک فرم خالی اقدام به ترسیم خطوط می شود.
ابتدا و انتها هم با استفاده از حلقه و گرفتن مختصات موس و دستور شرطی خطا انجام میشود
به علت اینکه خط ها بهم متصل هستند و در اکثر مواقع X2,y2 خط اول با x1,y1خط دوم برابر هست نمیتوان خط مورد نظر را به این وسیله انتخاب کرد(بعضی وقتا اولی انتخاب میشه و گاهی دومی و کار جالبی نیست!)
به همین دلیل در صدد راهی برای تشخیص یک خط به تنهایی امدم
یک راه استفاده از حلقه و استفاده از مختصاتها و ایجاد فرمول خط و چک کردن مختصات موس درون ان با خطای کم هست که خود مشکلاتی از قبیل عدم شناسایی شیب بینهایت در وی بی است.
حال به دنبال راهی برای این کار می گردم!؟!؟:ناراحت:
mehran901
جمعه 30 فروردین 1392, 17:59 عصر
شیب بینهایت که هیجا نداریم...! اصلا بینهایتی وجود نداره... عدد بر صفر حدی میشه بینهایت حدی !
ی جایی میرسه که شیبتون میشه عدد بر صفر و این تقسیم چون صفر ما صفر مطلقه ، ارور ویبی رو به همراه داره برای رفع این مشکل ابتدای event از دستور on error resume next و در ادامه با فضانام err شماره خطا رو چک کنین و در صورتی که مربوط به خطای تقسیم عدد بر صفر باشه ( فک کنم 6 باشه ... ی تست بزنین ) میتونید متوجه بشین که خطتون وضعیت قائم پیدا کرده !
masalan : if err.number = 6 then ....
در رابطه با تشخیص خطوط شما با استفاده از همین روش میتونید تشخیص بدین کار سختی نیست...! از ویژگی نام خط استفاده کنین درحالی که مختصات نقطه ابتدا و انتها میتونن در جهت تثبیت خط انتخابی بهتون کمک کنن
setroyd
شنبه 31 فروردین 1392, 12:08 عصر
اگه برات خیلی مهمه یه کاری کن با usercontrol برای خودت یه line طراحی کن و بهش hwnd بده که قابل شناسایی باشه و از اون برای فرمت استفاده کن که امکان خطا 0 باشه یا کامپوننت دانلود کن این یه پیشنهاد بو فقط ولی اگه بخوای هم میتونی همین رو با کد نویسی در بیاری راحته کار سختی نیست ولی اینی که گفتم حرفه ای تر هست و میدونی داشتن یه نشانی ثابت تو برنامه نویسی خیلی کمک میکنه خیلی مثل hwnd یا .......... ولی Line فاقد این هاست
as987498749874
شنبه 31 فروردین 1392, 12:29 عصر
مر 30 دوستان البته من با طراحی کامپوننت مشکل دارم و تقریبا کار سختیه چون علاوه بر خط از یکسری نمادها هم در ترسیم استفاده میشه
از اقا مهران خواهش میکنم در صورتی که مشکلی نداره یک برنامه کوچیک از چیزی که گفتن بزارن چون با دستور On error بازم خطا میگیره
مر 30
mehran901
شنبه 31 فروردین 1392, 13:02 عصر
خب ی مثال بسیار ساده که میتونه وقتی عدد بر صفر تقسیم شد به شما اطلاع بده
مثلا
:
On Error Resume Next
Dim k%
k = 5 / 0
If Err.Number <> 0 Then
MsgBox Err.Number & " " & Err.Description
End If
5/0 با ارور همراه هست ولی به خاطر on error resume next برنامه متوقف نمیشه و با استفاده از فضانام err چک میکنین اگه خطا اتفاق افتاده بود شماره خطا و توضیحاتش رو بهتون بده
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.