عرضه نرم افزار Autodesk AutoCAD Land Desktop 2008 در سایت ژیزمان

ژيزمان » آموزش » برنامه ن?يسي در محيط ات?كد به كمك VBA – درس د?م

برنامه ن?يسي در محيط ات?كد به كمك VBA – درس د?م

توسط: samaee در 24 آبان 1386

بخش: آموزش

برنامه ن?يسي در محيط ات?كد به كمك VBA – درس د?م


در قسمت قبل ترسيم يك نقطه در مختصات دلخ?اه را آم?زش دادم. قرار شد اين جلسه نح?ه ترسيم مجم?عه اي از نقاط كه در?ن يك فايل متني قرار دارند آم?زش داده ش?د. در ?اقع اينكار بيشتر مرب?ط به VB است تا ات?كد.

خ?ب هم?ن كد قبلي ر? ببينيم :

Sub Example_AddPoint()    

  Dim pointObj As AcadPoint
  Dim location(0 To 2) As Double
    
  location(0) = 5
  location(1) = 5
  location(2) = 0
    
  Set pointObj = ThisDrawing.ModelSpace.AddPoint(location)

End Sub


فرض كنيم فايل ما در مسير C:\Points.txt قرار دارد ? فرمت فايل عبارتست از شماره نقطه ? X ?Y ? Z كه با Comma از هم جدا شده اند.خ?ب برنامه ر? به ص?رت زيرتغييرميدهيم :

Sub Example_AddPoint()

  Dim pointObj As AcadPoint
  Dim location(0 To 2) As Double
  Dim pointname As String
    
  Open "c:\points.txt" For Input As #1
  While Not EOF(1)
    Input #1, n, x, y, z  
    
    location(0) = Val(x)
    location(1) = Val(y)
    location(2) = Val(z)
    
    Set pointObj = ThisDrawing.ModelSpace.AddPoint(location)
  Wend
    
  Close #1
End Sub


در خط 3 آبجكتي بنام PointObj با خص?صيت نقطه ايجاد ميش?د. اين خط به ات?كد ميفهماند كه از اين به بعد با PointObj به عن?ان يك نقطه برخ?رد كند. خط 4 آرايه اي بنام Location تعريف ميكند كه بت?انيم مشخصات نقطه را در?ن آن بريزيم. در خط 5 متغيري بنام pointname معرفي ميكنيم تا اسم نقطه را در?ن آن بريزيم. در خط 7 فايل را براي خ?اندن باز ميكنيم . مثل كتاب خ?اندن ،‌ يعني تا كتاب باز نش?د كه نميت?انيم محت?ياتش را بخ?انيم. در ?اقع open فايل را باز ميكند. For input به ات?كد ميفهماند كه فايل براي خ?اندن باز شده است. اگر قرار ب?د چيزي در فايل بن?يسيم فايل را For output باز ميكرديم. As #1 شماره اي به فايل ميدهد يعني از حالا به بعد برنامه فايل را نه با اسمش كه با شماره اش ميشناسد. دقت كنيد در انتهاي برنامه با دست?ر Close #1 فايل را ميبنديم. در خط 8 بعد از باز شدن فايل بايد خط به خط فايل را بخ?انيم براي اينكار از حلقه while …..wend استفاده ميكنيم ? فرمانها را در?ن اين حلقه مين?يسيم. While not eof يعني اينكه تا زمانيكه فايل به انتها نرسيده دست?رات را اجرا كن. خط 9 يك خط از فايل را ميخ?اند ? اسم نقطه را در?ن n ? ط?ل را در?ن X ? عرض را در?ن Y ? ارتفاع را در?ن Z ميريزد.در خط?ط 11 تا 13 مختصات نقطه در?ن آرايه Location ريخته ميش?د. فرمان val قبل از X ?Y ? Z به برنامه ميگ?يد كه X ?Y ? Z را ا?ل به عدد تبديل كن بعد در?ن آرايه بريز. چ?ن ?قتي ما از فايل مختصات نقاط را ميخ?انيم به ص?رت متن ميخ?انيم ? بايد تبديل به عدد ش?د.خط 15 به ات?كد فرمان ترسيم نقطه را ميدهد.خط 16 حلقه را ميبندد. خط 18 هم فايل را ميبندد. يك نكته اينجا مهم است. مطمئن ش?يد فايل نقاط تا آخرين سطرش حا?ي مختصات باشد. چ?ن اگر مثلا يك خط هم space باشد به ظاهر چيزي ندارد ?لي برنامه به عن?ان يك خط آنرا ميشناسد ? چ?ن نميت?اند مختصات را بخ?اند ايراد ميگيرد. حالا F5 را بزنيد تا برنامه اجرا ش?د ? نقاط را برايتان ترسيم كند. به همين سادگي.

ممكنه اين س?ال پيش بياد كه نرم افزارهاي مختلفي مثل LAND هستند كه نقاط را در?ن ات?كد ترسيم ميكنند. چه نيازي به برنامه ن?يسي است؟ خيلي م?اقع نياز است كه شما مجم?عه اي امكانات بدردبخ?ر ? شايد ك?چك را يكجا داشته باشيد. مثلا برنامه اي كه كارت?گرافهاي ما استفاده ميكنن پس از ترسيم نقطه ارتفاع آنرا به شكلي قرار ميدهد كه نقطه ?سط ارتفاع باشد . نكته مهم براي ما دراينجا اينه كه مثلا ارتفاع 1230.78 به شكلي ن?شته ش?د كه ا?لا بد?ن مميز باشد چ?ن قرار است نقطه نقش مميز را ايفا كند ? ثانيا نقطه بين 1230 ? 78 ?اقع ش?د. همچنين چ?ن نقاط برداشتي ما داراي كد هستند برنامه با خ?اندن هر خط فايل با ت?جه به كد نقطه بل?ك مرب?ط به آن نقطه را هم ترسيم ميكند مثلا بل?ك درخت ،‌تير برق ? ... . بعضي م?اقع هم هست كه ميخ?اهيد فقط نقاط يه محد?ده خاص را ترسيم كنيد. همچنين نقاط هر ايستگاه داخل لايه همان ايستگاه ترسيم ميش?ند ? غيره.

عكس محيط برنامه ر? ميبينيد :

برنامه ن?يسي در محيط ات?كد به كمك VBA – درس د?م


در درس بعدي پس از ترسيم نقاط نح?ه ن?شتن ارتفاع ? يا اسم نقطه در كنار نقطه آم?زش داده ميش?د ? همچنين نقاط را در لايه دلخ?اه ترسيم ميكنيم.

س?الات خ?دت?ن را در كامنتها مطرح كنيد تا همه ببينند ? اگه اينجا نن?شتيد به m.samaee[at]gmail.com ايميل بزنيد.

 ( امتياز دهنده: 14)

مطالب مرتبط

#1 توسط: پيمان

1 آذر 1386 11:46

جالبه بي صبرانه منتظر قسمتهاي بعد هستم
بازهم ممن?ن
تاريخ عضويت :-- --
   

#2 توسط: nazari

6 آذر 1386 13:16

متشکرم
تاريخ عضويت :-- --
   

#3 توسط: babak

8 آذر 1386 03:00

با تشکر از مطالب جالبت?ن .
در م?رد این برنامه که نقطه ر? به جای ممیز قرار میده میشه ت?ضیح بدین . آیا جایی هست که بشه دانل?دش کرد؟
تاريخ عضويت :-- --
   

#4 توسط: samaee

8 آذر 1386 14:58

بابك جان
مثلا به جاي 23.57 مين?يسه 57 23 در حاليكه نقطه دقيقا جاي مميزه. چ?ن ا?ن فضاي خالي بين 23 ? 57 هميشه مشخص نيست پيدا كردن ?سط ا?ن فاصله خالي مهمه.

متاسفانه نرم افزار عم?مي نيست.
تاريخ عضويت :19.06.1386 --
   

#5 توسط: babak

8 آذر 1386 21:42

از این که ج?اب دادین ممن?ن
فکرنمیکنم برنامه ن?یسیش کار خیلی سختی باشه
اگه ما عددی که داریم مثلاً 23.75 ر? به د? قسمت صحیح ? اعشاری تقسیم کنیم ? با justify کردن راست قسمت صحیح ? به همین ص?رت چپ برای قست اعشار ? بعد د? فرمان dt ?po کار تم?مه ، البته فکر کنم !!!
تاريخ عضويت :-- --
   

#6 توسط: samaee

10 آذر 1386 12:53

بابك جان
ا?ن?قت شما بجاي يك عدد د?عدد خ?اهيد داشت. يه 23 ? يه 75. ?لي اينجا 75 23 يك Object ته.

ضمن اينكه فاصله اي كه با دست?ر justify بين نقطه ? عدد ب?ج?د مياد براي اعداد مختلف فرق ميكنه ?اسه همين دقيقا ?سط نميفته.

درسته براي كسي كه مسلط باشه اصلا سخت نيست كه هيچ ?اقعا هم راحته.
تاريخ عضويت :19.06.1386 --
   

#7 توسط: se5966

7 بهمن 1386 16:53

با تشکر از شما
اگر بخ?اهیم این نقاط را با خط به هم ?صل کنیم چه باید بکنیم
تاريخ عضويت :7.09.1386 --
   

#8 توسط: samaee

7 بهمن 1386 17:33

se5966,

براي اينكار بايد Object خط را معرفي كنيد ? سپس با اين نقاط خط م?رد نظر را رسم كنيد. مثال خ?د ات?كد به شكل زير است :

Sub Example_AddLine()
' This example adds a line in model space

Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double

' Define the start and end points for the line
startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0#
endPoint(0) = 5#: endPoint(1) = 5#: endPoint(2) = 0#

' Create the line in model space
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
ZoomAll

End Sub
تاريخ عضويت :19.06.1386 --
   

#9 توسط: se5966

8 بهمن 1386 20:04

با تشکر از بذل ت?جه شما
اگر ما د? تا فایل متنی داشته باشیم که یکی مختصات باشد ? دیگری ترتیب همبندی اینها چگ?نه باید این خط?ط را به هم ?صل کرد
تاريخ عضويت :7.09.1386 --
   

#10 توسط: samaee

9 بهمن 1386 12:22

se5966,

اينجا اص?ل فرق نميكند. در اين مرحله بازي با ا?ن د?تا فايل است كه در ?اقع ترتيب را مشخص ميكند ? شكل كشيدن خط همان است كه ب?د. اگر نياز است به ايميل من بفرستيد تا ببينم فرمت فايلها چط?ريه.
تاريخ عضويت :19.06.1386 --
   

اطلاعات

اگر شما عضو باشيد، فقط مي توانيد نظر ارسال کنيد

جستجو

 

فيدخوان

فيدخوان

ورود به سيستم

نام كاربري:
رمز عبور:
 
رمز عبور خود را فراموش کرده اید؟

برترین مطالب

فیدبرنر

آدرس e-mail خود را وارد کنید:

Delivered by FeedBurner

 Subscribe in a reader

اطلاعات سایت

بازدید های امروز : 201 مرتبه
بازدید های دیروز : 1084 مرتبه
مجموع بازدید ها : 1637611 مرتبه
کاربران حاضر : 6 نفر
بیشترین بازدید همزمان : 9 نفر

برترین نویسندگان:
  1    admin 190
  2    samaee 23
  3    khosravi 15
  4    zaman 13
  5    Gabriel 10
  6    nasab 8
  7    mahdinet 7
  8    marahimi 4
  9    snekooei 4
  10    sadegh98 3

مطالب سایت:
  امروز: 0
  این ماه: 0
  در کل: 288

کاربران:
  عضویت های امروز: 0
  این ماه: 0
  کل کاربران: 1600

پیشنهاد ما

FireFox