رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران
بهنام صباغی

معرفی و آموزش کتابخانه VTK

پست های پیشنهاد شده

کتابخانه VTK یک کتابخانه مجسم سازی سه بعدی اطلاعات و پردازش تصویر است. این شامل یک کتابخانه کلاس C++ و چندین لایه رابط تفسیری از جمله Tcl / Tk، Java و Python است. VTK یک کتابخانه کراس پلتفرم است که از سیستم‌عامل‌های لینوکس ، یونیکس ، مک و ویندوز پشتیبانی می‌کند. این ابزار پشتیبانی از پردازش موازی و ادغام با پایگاه های داده های مختلف در ابزارهای GUI مانند Qt و Tk را داراست.

در سایت رسمی این کتابخانه به آدرس VTK - The Visualization Toolkit می‌توانید منابع آموزشی متعددی برای یادگیری این کتابخانه پیدا کنید.

برای استفاده از این کتابخانه نیاز به کامپایل سورس این کتابخانه داریم . برای دریافت سورس میتوانید از صفحه دانلود سایت رسمی VTK استفاده کنید.

بعد از دریافت این کتابخانه میتوانید با توجه به سیستم‌عامل خود از صفحه wiki سایت رسمی VTK برای تنظیم و کامپایل این کتابخانه استفاده کنید.

دقت نمایید اگر نیاز دارید که از فریمورک Qt در برنامه خود استفاده کنید و صفحات گرافیکی VTK را در پنجره‌های Qt نمایش دهید باید به این مرحله پیکربندی با Cmake که مرتبط به کیوت 5 می‌باشد دقت کنید.

بعد از کامپال و نصب کتابخانه میتوانید پروژه مثال استفاده از VTK و Qt در گیتهاب را اجرا کرده و صحیح بودن پیکربندی و ساخت کتابخانه را آزمایش کنید.

برای یادگیری این کتابخانه میتوانید از کتاب یا ویدئو های موجود استفاده کنید ولی روش شخصی بنده برای یادگیری و استفاده از این کتابخانه در پروژه مشاهده و تحلیل مثال‌های کتابخانه VTK بود. این مثال ها جزء به جزء برای هر قابلیت پیاده سازی شده‌اند.

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

  • پسندیدن 2

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در این پست قصد دارم به توضیح کد بخش VTK در مثال استفاده از VTK با Qt در گیتهاب بپردازم.

از فایل VTKmain.h شروع میکنم :

#include "qobject.h"
#include "vtkCubeSource.h"
#include "vtkOrientationMarkerWidget.h"
#include <QVTKWidget.h>
#include <vtkActor.h>
#include <vtkAxesActor.h>
#include <vtkDataSetSurfaceFilter.h>
#include <vtkIdFilter.h>
#include <vtkOBJReader.h>
#include <vtkPLYReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>

در بخش بالا کتابخانه های مورد نیاز در پروژه اینکلود شدند . یک سری از این کتابخانه‌ها مثل #include "qobject.h"   کتابخانه‌های کیوت هستند. و یک سری کتابخانه‌ها که در اسم آن‌ها VTK به چشم می‌خورد کتابخانه‌های VTK هستند. برای اطلاعت بیشتر از هرکدام از این کتابخانه‌ها می‌توانید نام آن را جستجو کنید و به داکیومنت VTK برای آن کتابخانه و همچنین سورس آن کتابخانه دست یابید.

بخش دوم کد :

class VTKmain : public QVTKWidget {
      public:
	VTKmain(QWidget *parent = nullptr);
	~VTKmain();

	// vtk renderer
	vtkSmartPointer<vtkRenderer> renderer;
	vtkSmartPointer<vtkPolyDataMapper> mapper;
	vtkSmartPointer<vtkActor> actor;
      public slots:
};

در این بخش یک کلاس به اسم VTKmain ساخته شده است و از QVTKWidget به ارث برده که یک کتابخانه توسعه داده شده توسط توسعه‌دهندگان VTK برای تعبیه کردن صفحه سه بعدی VTK در رابط کاربری گرافیکی Qt است.

درون کلاس هم سه تعریف داریم که در فایل سورس بیشتر در مورد آنها توضیح خواهم داد.

توضیحات فایل VTKmain.cpp :

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

VTKmain::VTKmain(QWidget *parent) : QVTKWidget(parent)

در دو خط زیر پنجره را به اندازه مورد نظر ریسایز می‌کنیم و حداقل سایز پنجره را مشخص می‌کنیم :

resize(1920, 1000);
setMinimumSize(400, 200);

در خط زیر با استفاده از vtkSmartPointer یک نمونه از vtkRenderer میسازیم و در اشاره‌گر هوشمند VTK که با اسم renderer در هدر تعریف کردیم میریزیم این روند کلی ایجاد یک شی با استفاده از اسمارت پوینتر VTK است و برای بقیه کلاس‌ها هم به همین منوال عمل می‌کنیم  :

renderer = vtkSmartPointer<vtkRenderer>::New();

در خط 19 رنگ پس‌زمینه را تنظیم می‌کنیم مقادیر ورودی این تابع بین 0 و 1 هستند و نشانگر استاندارد رنگی قرمز-سبز-آبی است :

renderer->SetBackground(0, 0, 0);

در خط 20 پنجره رندر از کلاس (به ارث برده شده از QVTKWidget ) را می‌گیریم و رندرر را به آن اضافه میکنیم :

GetRenderWindow()->AddRenderer(renderer);

در خط 22 و 23 یک مکعب ایجاد می‌کنیم :

vtkSmartPointer<vtkCubeSource> cube =
vtkSmartPointer<vtkCubeSource>::New();

در خط 26 یک نمونه برای mapper ایحاد می‌کنیم :

mapper = vtkSmartPointer<vtkPolyDataMapper>::New();

در خط 27 پورت خروجی مکعب را به اتصال ورودی mapper می‌دهیم :

mapper->SetInputConnection(cube->GetOutputPort());

در خطوط 29 تا 32 یک اکتور ایجاد کرده و mapper را که در بالا ساختیم برای ان تنظیم می‌کنیم و اندازه‌ی نقاط را برای ان تنظیم می‌کنیم و در خط 32 رنگ آن را تنظیم می‌کنیم :

actor = vtkSmartPointer<vtkActor>::New();
	actor->SetMapper(mapper);
	actor->GetProperty()->SetPointSize(1000);
actor->GetProperty()->SetColor(1, 1, 0); //(R,G,B)

در خط 33 این اکتور را به رندرر اضافه می‌کنیم :

renderer->AddActor(actor);

در خطوط 35 و 36 یک نمونه از axes برای نمایش جهت در کنار صفحه به صورت سه بعدی ایجاد می‌کنیم :

vtkSmartPointer<vtkAxesActor> axes =
vtkSmartPointer<vtkAxesActor>::New();

در خطوط 38 و 39 یک ویوپورت برای نمایش این جهت‌نما درست می‌کنیم چون نمیخواهیم با جابجایی سه بعدی صحنه این جهت‌نما از گوشه پنجره نکان بخورد و حرکت انتقالی در سه بعد داشته باشد:

vtkSmartPointer<vtkOrientationMarkerWidget> axesViewPort =
vtkOrientationMarkerWidget::New();

در خطوط 41 تا 46 به ترتیب رنگ دور ویوپورت ، اکتور جهت نمایش ، اینتراکتور رندر ویندو ، اندازه و مکان دو بعدی ویو پورت در صفحه ( بین پراپرتی‌ها بین 0 و 1 هستند ) ، فعال بودن و تعاملی بودن را تنظیم می‌کنیم که این گزینه آخر در صورت فعال بودن این امکان را به کاربر می‌دهد که با موس ویوپورت ساخته شده را جابجا کند :

axesViewPort->SetOutlineColor(0.9300, 0.5700, 0.1300);
axesViewPort->SetOrientationMarker(axes);
axesViewPort->SetInteractor(GetRenderWindow()->GetInteractor());
axesViewPort->SetViewport(0.9, 0.0, 1.0, 0.1);
axesViewPort->SetEnabled(1);
axesViewPort->InteractiveOff();

در خط 48 مکان دوربین فعال را تنظیم می‌کنیم :

renderer->GetActiveCamera()->SetPosition(1000, 2500, 1000);

در خط 49 تابع رندر از رندرر را صدا زده :

renderer->GetActiveCamera()->SetPosition(1000, 2500, 1000);

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

renderer->ResetCamera();

 

  • پسندیدن 2
  • تشکر شده 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
مهمان
این موضوع برای عدم ارسال قفل گردیده است.

  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

  • مطالب مشابه

    • توسط کامبیز اسدزاده
      کیوت (به انگلیسی: Qt) مجموعه‌ای از کتابخانه‌ها و سرآیندهای نوشته‌شده به زبان سی++ است که به برنامه‌نویس امکان توسعه آسان نرم‌افزارهای کاربردی را می‌دهد. کیوت شامل چندین کلاس برای کار با واسط گرافیکی، چندرسانه، ابزارهای پایگاه‌داده، شبکه و … است. نرم‌افزارهای نوشته شده با ابزار کیوت قادرند تا با استفاده از یک کامپایلر زبان سی‌پلاس‌پلاس برای طیف وسیعی از سیستم‌عامل‌ها از جمله گنو/لینوکس (نسخه‌های رومیزی و وسیله‌های قابل حمل)، ویندوز، ویندوز CE، مک‌اواس و … همگردانی شوند. بدین ترتیب حمل نرم‌افزار نوشته شده بدون تغییر در متن کد نوشته شده امکان‌پذیر است. از کیوت در زبان‌های برنامه‌نویسی متعددی مانند سی++ و جاوا و پایتون می‌توان استفاده‌کرد.
       
      جهت مشاهده‌ی مباحث مرتبط با این کتابخانه به این بخش مراجعه کنید.
    • توسط کامبیز اسدزاده
      هدف از این آموزش ها آشنایی با امکاناتی که در Qt میتوان استفاده کرد می‌باشد، که شامل کد نویسی کمتر، خروجی و طرح های بیشتر و در نهایت استفاده در پلتفرم های مورد مختلف است. لذا جهت بهره مندی از این کتابخانه ما با در نظر گرفتن اینکه علاقه مندان با زبان ++C آشنایی لازم را دارند منتشر کرده ایم. بنابراین در صورتی که علاقه مندان اطلاعات کافی در رابطه با خود زبان ندارند پیشنهاد میکنیم ابتدا اقدام به تهیه و مطالعه آموزش های لازم در ++C نمایند که برخی از لینک های رسمی و استاندارد آن را در زیر اعلام نموده ایم.
      عنوان این آموزش "برنامه نویسی ++C همراه با کتابخانه های Qt 5.7.x  (سطح مقدماتی ویرایش ۳) می‌باشد که به صورت زیر فهرست بندی شده است:
      فصل اول مقدمه کتابخانه Qt  قابلیت ها در طراحی    فناوری Qt Quick و QML    نسخه های کیوت    مجوز های موجود در این کتابخانه    محیط های توسعه کیوت    ویژگی های کیوت    پشتیبانی از انواع سیستم عامل ها    نصب و پیکربندی Qt    فصل دوم انواه پروژه و ایجاد آن    انواع پروژه ها    ایجاد پروژه    فصل سوم ساده ترین برنامه    معرفی و کار با Signal و Slot ها و Event ها    معرفی و کار با نمایش Windows    معرفی و کار با لایه ها زبانه ها و بدنه های در طراحی    معرفی و کار با قابلیت های HTML و CSS در طراحی    فصل چهارم معرفی و کار با لایه های افقی و عمودی    معرفی و کار با لایه های Grid در طراحی فرم    معرفی و کار با جدا کننده ها Splitter  فصل پنجم معرفی و کار با دایرکتوری ها    معرفی و کار با فایل ها / خواندن و نوشتن در آن ها    فصل ششم معرفی و کار با برچسب ها Label    معرفی و کار با دکمه ها Button    معرفی و کار با کنترل ورودی LineEdit    معرفی و کار با چک باکس CheckBox    معرفی و کار با RadioButton    معرفی و کار با Combobox    معرفی و کار با لیست ها / ListWidget    معرفی و کار با لیست های درختی / TreeWidget    معرفی و کار با Action ها    معرفی و کار با Slider و Progress ها    معرفی و کار با Statusbar در فرم    فصل هفتم معرفی و کار با MessageBox    معرفی و کار با Timer    معرفی و کار با Thread ها    فصل هشتم معرفی و کار با Map    معرفی و کار با Hash    معرفی و کار با QStringList لیست رشته ای    فصل نهم معرفی و کار با الگوریتم های     معرفی و کار شبکه / دانلود فایل بر اساس پروتکل های HTTP و FTP    معرفی و کار با باینری و سریالیز کردن آبجکت ها    معرفی و کار با TextStream ها    فصل دهم مقایسه انواع حالت های کامپایل در Qt    نحوه افزودن دیگر کتابخانه های C++‎‎ در محیط Qt Creator و استفاده همراه با کتابخانه Qt    نحوه خروجی گرفتن / گسترش (Deployment) در Qt     مقایسه و پیکربندی دو موتور قدرتمند OpenGL و ANGLE در پروژه    مقایسه حجمی بین پروژه های ساخته تحت کتابخانه های Qt در ++C و .NET Framewok در #C    درایور دیتابیس هایی که تحت این کتابخانه پشتیبانی می‌شوند    حق نشر کتاب و اهداف در نسخه ی بعدی کتاب    توجه : در داشتن هر گونه انتقاد و پیشنهاد در رابطه با این کتاب با آدرس شخصی نویسنده (kambiz.ceo@gmail.com) مکاتبه نمایید. نکته : این کتاب در روز‌های خاص ممکن است شامل تخفیف قرار بگیرد. نکته دوم : کسانی که این کتاب را یک بار خریداری می‌کنند نسخه‌ی به روز رسانی شده آن را به صورت رایگان می‌توانند دریافت کنند.
    • توسط کامبیز اسدزاده
      سلام و درود با طعم کیوت 🤗
      همانطور که می‌دانید توسعه نرم‌افزار‌ها و اپلیکیشن‌های کاربردی در هر پلتفرمی نیازمند ابزار‌ها و کنترل‌های مهمی هستند که این امر موجب سرعت بخشیدن به زمان طراحی می‌شود. در صنایع مختلف برنامه‌نویسی مخصوصاً سمت وِب کیت‌های بسیاری جهت تولید و توسعه سریع همراه با کامپوننت‌های بسیار خوبی ارائه شده است که برخی از آن‌ها عبارتند از Bootstrap، UIkit و غیره...
      ما در نظر داریم کیتی را همانند کیت بوت استرپ برای کیوت کوئیک توسعه دهیم. بنابراین هر کامپوننت یا ماژولی که احساس نیاز از آن می‌شود را برای ما مطرح کنید. ابتدا ما ویژگی‌های بوت استرپ را شبیه سازی خواهیم کرد و سپس کیت‌های مورد نیاز شما را که در تاپیک‌های دیگر اعلان می‌شوند با این کیت ادغام خواهیم کرد.
       
      با توجه به اینکه من شخصاً کیتی را از قبل برای توسعه در نظر گرفته ام نام این پروژه Jupiter انتخاب شده است همان کیت را برای برنامه ریزی در این بخش عنوان می‌کنم تا برای ادامه نیز با همکاری همدیگر توسعه داده شود.
       
      کامپوننت‌ها
      Alerts Ads ActionButton ActivityIndicator Accordion Badges Button CircleButton Card CardInfo CardBox CircleImage CircleProgressBar Dropdown DifficultySection Forms Modal Menu MessageBox Map (Based on Google Map) Marker Navs Navbar Notification Profile Pagination Popovers Progress ProgressCircle Space Share SocialFeed Tooltips Header Footer FontSystem Slider InputBox Rate (Vote) WinButton پیشنهادات شما می‌تواند در این لیست اضافه شود...
      بسیاری از کنترل‌ها در هر زمینه‌ای که نیاز باشد در این لیست اضافه خواهند شد.
      نکته :‌ تمامی کنترل‌ها باید واکنش گرا باشند. این کیت تحت فونت آیکونیک‌های حرفه‌ای fontawesome مجهز خواهد شد. نکته ۲‌ : تمامی کامپوننت‌ها باید تحت قالب راست به چپ و چپ به راست پشتیبانی شوند. نکته ۳ : تمامی کامپوننت‌ها باید به دو زبان فارسی و انگلیسی واکنشگرا و تحت فونت‌های ویژه پشتیبانی شوند.
×