"CAD untuk semua orang, gratis, dan jangan biarkan siapa pun pergi ..." atau langkah pertama dalam pemrograman FreeCAD dengan Python

Mungkin Anda sudah menemukan catatan saya pada langkah pertama dalam pemrograman CAD menggunakan contoh NanoCAD.

Perlu dicatat bahwa bagi seseorang yang tidak tahu cara memprogram dan mengetahui CAD pada tingkat "culman elektronik" itu adalah petualangan yang luar biasa. Namun, NanoCAD masih merupakan produk komersial. Versi gratisnya belum diperbarui, selama sekitar enam tahun dan telah menjadi ketinggalan zaman dalam hal peluang pengembangan.

Tetapi saya benar-benar ingin, seperti dalam satu kisah yang indah: "Kebahagiaan untuk semua, sia-sia, dan jangan biarkan ada yang tersinggung!" . Oleh karena itu, diputuskan untuk mengindahkan saran dari kawan tempur DrZugrik dan menginstal FreeCAD untuk Anda sendiri.

Jadi, dalam pengejaran yang panas saya menulis materi untuk Anda, hanya dalam satu hari saya belajar bagaimana membuat perangkat lunak CAD ini berteman dengan Anaconda, menulis sebuah skrip sederhana dengan Python yang menggambar kotak kecil dengan teks dan mengujinya untuk bekerja pada Windows dan Linux. Apa yang sebenarnya saya siap untuk memberitahu Anda dalam langkah-langkah dan pertunjukan, sehingga Anda juga bisa melakukan ini.

Ingin mengenal pasangan Python dan FreeCAD yang menawan? Maka Anda dipersilakan di bawah kucing.




Konten:

Bagian I: Pendahuluan.
Bagian II: Instalasi Standar dan Sampel Pertama
Bagian III: Sekarang berteman dengan FreeCad dengan Anaconda
Bagian IV: Menulis Perpustakaan Sederhana
Bagian V: Kesimpulan

Bagian I: Pendahuluan


Anehnya, di Habré ada sangat sedikit publikasi yang ditujukan untuk FreeCAD, sebuah artikel bagus diterbitkan oleh Eddy_Em "Meet: FreeCAD" , dan beberapa karya lain di mana pahlawan artikel kita disebutkan secara sepintas.

Untuk mulai dengan, hanya dua kata tentang program ini. Saya tidak akan menduplikasi informasi dari situs resmi, tetapi hanya menjelaskan dengan garis besar mengapa saya mengalihkan perhatian saya ke CAD ini.

Jadi, FreeCAD adalah sistem desain berbantuan komputer open source, terutama berfokus pada pemodelan parametrik tiga dimensi. Pada saat penulisan, versi terbaru dari program ini adalah 0.18.3. Jangan bingung bahwa nilai nomor rilis jauh dari satu. FreeCAD sudah lama dan dikembangkan secara aktif dan saat ini cukup fungsional. Terlebih lagi, seperti yang saya pahami sejak lama, ia memiliki popularitas tertentu di antara orang-orang yang terlibat dalam pemodelan dan pencetakan 3D, terutama di antara orang-orang ideologis buatan yang tertarik pada open source / perangkat keras terbuka dan semua jenis DIY.

Tetapi jika tiba-tiba Anda tidak memahami pemodelan 3D sama sekali, maka ini bukan alasan untuk mem-bypass FreeCAD. Fungsionalitas CAD dibagi menjadi beberapa modul spesifik - Workbench, di antaranya ada juga gambar 2D biasa, termasuk workbench untuk mendekorasi frame sheet dan bahkan workbench untuk mengimplementasikan konsep BIM.

Sebenarnya, program ini memiliki "kereta dan gerobak kecil", tetapi hari ini kami akan mencoba melakukan sesuatu yang benar-benar primitif, hanya untuk "membangkitkan selera Anda".


Bagian II: Instalasi Standar dan Sampel Pertama


FreeCAD tersedia untuk ketiga sistem operasi umum, tetapi karena saya kehilangan teknik "Apple", kami hanya akan mempertimbangkan opsi untuk Windows 10 dan Linux Mint.

Cara termudah untuk memulai pemrograman untuk FreeCAD adalah dengan mengunduh paket distribusi dan menginstalnya dengan cara standar untuk sistem operasi. Dalam hal ini, kita akan memiliki juru bahasa Python yang sudah diinstal sebelumnya dengan program (pada saat penulisan artikel Python versi 3.6.6).

Untuk memulai pemrograman untuk FreeCAD, mungkin bahkan lebih mudah daripada untuk NanoCAD atau AutoCAD, cukup buka tab Lihat -> Panel -> dan nyalakan konsol Python. Sebenarnya, itu saja, Anda dapat memprogram dengan aman.

Tapi pertama-tama, mari kita coba menggambar sesuatu menggunakan cara biasa. Misalnya lingkaran.
Perhatikan output konsol

Gui.activateWorkbench("DraftWorkbench") >>> App.newDocument("") >>> App.setActiveDocument("____________________") >>> App.ActiveDocument=App.getDocument("____________________") >>> Gui.ActiveDocument=Gui.getDocument("____________________") >>> Gui.activeDocument().activeView().viewDefaultOrientation() >>> import Draft >>> pl=FreeCAD.Placement() >>> pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) >>> pl.Base=FreeCAD.Vector(-1.0610677003860474,-0.31207874417305,0.0) >>> circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None) >>> Draft.autogroup(circle 



FreeCAD tidak menyembunyikan apa pun di bawah tenda, semua operasi utama untuk menggambar lingkaran ditampilkan di konsol. Anda bahkan dapat sekarang hanya menyalin kode dan menggambar lingkaran kedua, sedikit ke kanan.
Mari kita coba memasukkan variabel dan menggambar lingkaran lain, yang kita salin output konsol dan masukkan baris demi baris membuat modifikasi kecil.

 x=-1.0610677003860474 pl=FreeCAD.Placement() pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) pl.Base=FreeCAD.Vector(x*5,-0.31207874417305,0.0) circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None) 

Seperti yang Anda lihat sekarang ada dua lingkaran, dan, seperti yang direncanakan, satu di sebelah kanan koordinat x titik dasar dari lingkaran pertama dikalikan 5.




Bagian III: Sekarang berteman dengan FreeCad dengan Anaconda


Tetapi kemampuan CAD tidak terbatas pada penggunaan standar sebagai "culman". Menggunakan API, FreeCAD dapat disematkan dalam program Anda sendiri dan digunakan dengan atau tanpa antarmuka grafis, tetapi kami akan melihat masalah ini di lain waktu.

Sementara itu, bayangkan situasi ini, katakanlah Anda menyukai pembelajaran mesin dan analisis data dalam Python dan telah menginstal kit distribusi Anaconda , maka Anda mungkin akan sangat senang mengetahui bahwa berkat orang-orang dari conda-forge Anda dapat menggabungkan semua fitur dari kit distribusi ini dan FreeCAD.

Tautan ini memberikan panduan tentang cara menginstalnya jika Anda menggunakan mini-conda, dan kami akan memasangnya di “Anaconda” lengkap melalui navigatornya.

Jadi, buka Anaconda-Navigator, buka tab Environments dan buat lingkungan baru dengan mengklik tombol Create . Nama lingkungan, Anda dapat memberikan apa pun, yang saya sebut - "freecad". Kami memilih versi yang diperlukan dari Python dan menciptakan lingkungan baru.



Tetapi ini tidak cukup, Anda perlu menambahkan saluran conda-forge, cukup ketik bidang yang muncul setelah mengklik tombol Tambah "conda-forge" dan biarkan sistem memperbarui daftar paket.



Hampir siap sekarang tetap menginstal FreeCAD sendiri

Klik LMB pada nama paket dan pilih versi yang ingin kita instal, seperti pada gambar di bawah ini (saya benar-benar sudah menginstalnya)



Setelah menunggu yang membosankan, Anda akan memiliki kit distribusi FreeCad terinstal penuh, versi yang diinginkan hanya harus diluncurkan.

Dalam kasus yang paling sederhana, tanpa parameter awal, Anda harus memulai konsol conda dengan lingkungan kami, dan mulai CAD dengan perintah FreeCAD dengan nama yang sama.



Jendela FreeCAD yang kosong akan terbuka di mana kita memilih meja kerja untuk menggambar dua dimensi.



Seperti yang Anda lihat, sekarang versi Python sama sekali tidak seperti instalasi standar.


Mari kita buat dokumen baru (Kontrol + N). Ini akan berguna untuk menguji perpustakaan mini kami.


Bagian IV: Menulis Perpustakaan Sederhana


Perpustakaan kami akan menjadi primitif. Intinya, kita akan membuat perintah yang akan menggambar kotak di mana teks sewenang-wenang yang ditentukan oleh pengguna akan dimasukkan.

Buat file (saya namakan milik saya "drawhabr.py") dan tulis kode berikut ke dalamnya:

 #Simple lib for test Python API in FreeCad #Tested on Python 3.7. and FreeCad 0.18.3 #Designed for article - https://habr.com/ru/post/464113/ import FreeCAD, FreeCADGui, Part, Draft class stamp: "This class creates a rectangle with text. Coordinates are set by entering into the console." def __init__(self): self.view = FreeCADGui.ActiveDocument.ActiveView x=float(input("set x point ")) y=float(input("set y point ")) mtext=str(input("input text ")) self.drawstamp(mtext, x , y ) FreeCAD.Console.PrintMessage("\r\n Your object was successfully created") def drawstamp(self, mtext,x=0,y=0 ): "Method for placing a figure in model space." if (mtext==""): mtext="Hello Habr!" point=FreeCAD.Placement(FreeCAD.Vector(x,y,0), FreeCAD.Rotation(0,0,0), FreeCAD.Vector(0,0,0)) text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) fontsize = 1.0 textwidth=(len(mtext)*fontsize*0.6)+0.35 textheight=fontsize+0.5 text.ViewObject.FontSize = fontsize text.ViewObject.FontName = "Courier" rec = Draft.makeRectangle(length=textwidth,height=textheight,placement=point,face=False,support=None) 

Atau Anda bisa menyalin file dari GitHub

Kode ini sangat sederhana, tetapi saya pikir ada baiknya menjelaskan beberapa poin.

 import FreeCAD, FreeCADGui, Part, Draft 

Kami mengimpor perpustakaan yang diperlukan, dan kemudian membuat kelas.
Karena saya belum belajar bagaimana menangani input mouse, kami akan memasukkan koordinat untuk objek dan teks langsung ke konsol dari keyboard. Ini diimplementasikan dengan metode Python standar. Kemudian, di dalam konstruktor kelas, kita memanggil fungsi kita (metode), yang akan menggambarkan semuanya.

Dari fitur FreeCAD di konstruktor kelas, dua perintah dapat dibedakan:

 self.view = FreeCADGui.ActiveDocument.ActiveView FreeCAD.Console.PrintMessage("\r\n Your object was successfully created") 

Yang pertama memilih ruang ruang kerja aktif untuk kita, dan yang kedua, setelah menginstal objek, menulis pesan kepada kita di bagian paling bawah jendela program (pada bilah abu-abu, jangan dikacaukan dengan konsol Python)

Kode metode juga intuitif. Tetapi saya akan menjelaskan keandalannya.

  def drawstamp(self, mtext,x=0,y=0 ): "Method for placing a figure in model space." if (mtext==""): mtext="Hello Habr!" 

Diperlukan jika pengguna memasukkan string kosong. Tanpa ini, kata Label akan dimasukkan dalam teks dan persegi panjang akan memiliki panjang yang salah.
 point=FreeCAD.Placement(FreeCAD.Vector(x,y,0), FreeCAD.Rotation(0,0,0), FreeCAD.Vector(0,0,0)) 


Tentukan koordinat titik dasar hari bingkai kita di sekitar teks.
Biarkan saya mengingatkan Anda bahwa data diambil dari input ke konsol.

Harap dicatat bahwa kami bekerja dengan koordinat tiga dimensi dari bentuk FreeCAD.Vektor (x, y, z), tetapi dalam contoh ini kita dapat mengabaikan koordinat Z. Parameter lain yang terkait dengan rotasi bingkai tidak menyentuh.

 text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) 

buat teks menggunakan perintah Draft.makeText, berikan teks yang Anda masukkan ke konsol.

Ambil koordinat dengan sedikit offset dari titik dasar frame.

Dengan cara yang baik, perlu untuk belajar bagaimana memproses frame (perbatasan) teks menggunakan parameter API, setelah itu, berdasarkan itu, menghitung lebar dan tinggi frame framing kami. Tetapi karena saya sendiri baru mengenal program ini, saya memecahkan masalah dengan metode kerja-tani. Kami akan memperbaiki tinggi font, menetapkan gaya font monospace (Kurir) dan, tergantung pada ini, menentukan panjang dan lebar bingkai yang kami gambar di sekitar teks.

  text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) fontsize = 1.0 textwidth=(len(mtext)*fontsize*0.6)+0.35 textheight=fontsize+0.5 text.ViewObject.FontSize = fontsize text.ViewObject.FontName = "Courier" 

Tetap hanya untuk menggantikan parameter kami dalam fungsi menggambar persegi panjang

 rec = Draft.makeRectangle(length=textwidth,height=textheight,placement=point,face=False,support=None) 

pada kenyataannya, itu saja.

Tetap hanya untuk menghubungkan perpustakaan kami. Untuk melakukan ini, Anda cukup menyalinnya ke folder tempat pustaka Python lainnya untuk lingkungan yang dipilih berada.

Misalnya, untuk Windows 10, jalurnya mungkin sebagai berikut (signifikan dari lokasi pemasangan Anaconda):

C: \ Users \ YourUsernameName \ Anaconda3 \ envs \ freecad \ Lib

Untuk Linux, jalurnya akan seperti ini:

/home/ourUserName/anaconda3/envs/freecad/lib/python3.7

Semua dibiarkan memuat perpustakaan kami.
Untuk melakukan ini, pertama-tama masukkan nama modul kami di konsol (tanpa ekstensi file)

 import drawhabr 

Dan kemudian memanggil konstruktor kelas

 drawhabr.stamp() 

Itu semua yang ada untuk memimpin, berfungsi parameter dan menikmati hasilnya.



Untuk jaga-jaga, berikut adalah screenshot yang mengonfirmasi bahwa semuanya berfungsi di Linux juga.




Bagian V: Kesimpulan


Hari ini, kami hanya mengambil langkah kecil di sepanjang jalan untuk memahami API FreeCAD.
Terlepas dari kenyataan bahwa menurut pendapat saya, untuk menggambar dua dimensi dan pengembangan proyek, FreeCAD tidak seakrab AutoCAD (NanoCAD) atau sistem CAD umum lainnya, tetapi jauh lebih mudah untuk memprogramnya.

Meskipun ada beberapa kekurangan dokumentasi dan perlunya memperbarui beberapa artikel dengan contoh di Wiki FreeCAD, masih untuk mengetahui API-nya dan meluncurkan program pertama ternyata merupakan orang yang tidak terlatih dengan pengetahuan minimal dalam menulis kode Python.

Dan mengingat fakta bahwa pengembang tidak serakah dan, jika perlu, bahkan memungkinkan pengembangan komersial menggunakan FreeCAD di bawah lisensi LGPL dan dikombinasikan dengan kekuatan penuh dari perpustakaan plug-in Python (misalnya, dari kit distribusi Anaconda yang sama), pengembangan program menggunakan FreeCAD terlihat menarik tugas.
Jika saya mengerti bahwa Anda tertarik dengan topik ini, saya akan mencoba membuat mini-siklus catatan dengan analogi dengan Nanocad

Source: https://habr.com/ru/post/id464113/


All Articles