-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfreecad-scripting-02-python-komut-dosyasi-olusturmak.html
269 lines (241 loc) · 32.1 KB
/
freecad-scripting-02-python-komut-dosyasi-olusturmak.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
<!DOCTYPE html>
<html lang="en" prefix="og: http://ogp.me/ns#">
<head>
<link href="http://gmpg.org/xfn/11" rel="profile">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<!-- Metadata -->
<meta name="description" content="3D Modelleme, Animasyon, Render, Vektör - Raster Grafik İşleme ve Python ile Programlama konularına meraklı Açık Kaynak Hayranı bir Makine Mühendisi">
<meta property="og:description" content="3D Modelleme, Animasyon, Render, Vektör - Raster Grafik İşleme ve Python ile Programlama konularına meraklı Açık Kaynak Hayranı bir Makine Mühendisi">
<meta property="og:title" content="FreeCAD - Scripting 02 - Python Komut Dosyası Oluşturmak" />
<meta property="og:type" content="article" />
<meta property="og:url" content="/freecad-scripting-02-python-komut-dosyasi-olusturmak.html" />
<meta property="og:image" content="/images/avatar.png" />
<!-- Enable responsiveness on mobile devices-->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title>mhalil - Programlama ve 3D</title>
<!-- CSS -->
<link href="//fonts.googleapis.com/" rel="dns-prefetch">
<link href="//fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic|Abril+Fatface|PT+Sans:400,400italic,700&subset=latin,latin-ext" rel="stylesheet">
<link rel="stylesheet" href="/theme/css/poole.css" />
<link rel="stylesheet" href="/theme/css/hyde.css" />
<link rel="stylesheet" href="/theme/css/syntax.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/fork-awesome.min.css" crossorigin="anonymous">
<!-- Feeds -->
<!-- Analytics -->
</head>
<body class="theme-base-0c">
<div class="sidebar">
<div class="container sidebar-sticky">
<div class="sidebar-about">
<h1>
<a href="/">
<img class="profile-picture" src="/images/avatar.png">
mhalil
</a>
</h1>
<p class="lead"></p>
<p class="lead">3D Modelleme, Animasyon, Render, Vektör - Raster Grafik İşleme ve Python ile Programlama konularına meraklı Açık Kaynak Hayranı bir Makine Mühendisi </p>
<p></p>
</div>
<ul class="sidebar-nav">
<li><a href="/archives.html">Arşiv</a></li>
<li><a href="/categories.html">Kategoriler</a></li>
<li><a href="/tags.html">Etiketler</a></li>
<li><a href="/pages/blender.html">Blender</a></li>
<li><a href="/pages/freecad.html">FreeCAD</a></li>
<li><a href="/pages/librecad.html">LibreCAD</a></li>
<li><a href="/pages/python.html">Python</a></li>
<li><a href="/pages/solvespace.html">Solvespace</a></li>
</ul>
<nav class="sidebar-social">
<a class="sidebar-social-item" href="https://twitter.com/AcikKaynakci" target="_blank">
<i class="fa fa-twitter"></i>
</a>
<a class="sidebar-social-item" href="https://www.artstation.com/mustafahalil" target="_blank">
<i class="fa fa-artstation"></i>
</a>
<a class="sidebar-social-item" href="https://github.com/mhalil" target="_blank">
<i class="fa fa-github"></i>
</a>
<a class="sidebar-social-item" href="/">
<i class="fa fa-rss"></i>
</a>
</nav>
<p class="sidebar-footer">İlmin zekatı %100'dür. Bildiklerizi paylaşın.</p>
</div>
</div> <div class="content container">
<div class="post">
<h1 class="post-title">FreeCAD - Scripting 02 - Python Komut Dosyası Oluşturmak</h1>
<span class="post-date">Sal 15 Şubat 2022</span>
<h1>Python Komut Dosyası Oluşturma (Scripting) Eğitimi</h1>
<p><a href="http://en.wikipedia.org/wiki/Python_%28programming_language%29">Python</a> kullanımı ve öğrenilmesi çok kolay bir programlama dilidir. Açık kaynak kodlu, çok platformlu ve basit kabuk komut dosyalarının programlanmasından, çok karmaşık programlara kadar pek çok şey için tek başına kullanılabilir. Ancak en yaygın kullanım yönteminden biri, diğer uygulamalara gömülerek kullanılmasıdır. FreeCAD içinde tam olarak böyle kullanılır. Python konsolundan veya özel komut dosyalarınızdan FreeCAD'e kılavuzluk yapabilir ve grafik kullanıcı arabirimi aracı olmayan çok karmaşık eylemler gerçekleştirmesini sağlayabilirsiniz.
Örneğin, bir python betiğinden (script) şunları yapabilirsiniz:</p>
<ul>
<li>Yeni nesneler oluşturabilirsiniz,</li>
<li>Mevcut nesneleri değiştirebilirsiniz,</li>
<li>Nesnelerin 3B görünümünü değiştirebilirsiniz,</li>
<li>FreeCAD arayüzünü değiştirebilirsiniz.</li>
</ul>
<p>FreeCAD'de Python'u kullanmanın birkaç farklı yolu vardır:</p>
<ul>
<li><strong>Komut satırı</strong> tarzı bir arayüzde komutlar verebileceğiniz <strong>FreeCAD'in Python Yorumlayıcısından</strong>.</li>
<li>Eksik bir aracı FreeCAD arayüzüne hızlı bir şekilde eklemenin uygun bir yolu olan <strong>makrolardan</strong>.</li>
<li>Oldukça karmaşık çözümler oluşturmak için kullanılabilen <strong>harici komut dosyalarından</strong>, hatta tüm <strong>Çalışma Tezgahlarından</strong> (WorkBench'lerden).</li>
</ul>
<p>Bu eğitimde, başlamanıza yardımcı olacak birkaç temel örnek üzerinde çalışacağız, ancak orijinal Wiki sayfasında <a href="https://wiki.freecadweb.org/Power_users_hub">Python komut dosyası oluşturma</a> hakkında çok daha fazla belge / bilgi bulunmaktadır. Python'da tamamen yeniyseniz ve Python'un nasıl çalıştığını anlamak istiyorsanız, temel <a href="freecad-01-pythona-giris.html">Python'a Giriş</a> eğitimimiz de var.</p>
<p>Python komut dosyası oluşturmaya devam etmeden önce <code>Düzenle → Seçenekler → Genel → Çıktı penceresi</code>ne gidin ve aşağıda açıklaması bulunan iki seçeneği işaretleyin / aktifleştirin :</p>
<ul>
<li><strong>Dahili Python çıktısını rapor görünümüne yönlendirin. (Redirect internal Python output to report view.)</strong></li>
<li><strong>Dahili Python hatalarını rapor görünümüne yönlendirin. (Redirect internal Python errors to report view.)</strong></li>
</ul>
<p>Ardından <code>Görünüm → Paneller</code>'e gidin ve şunları kontrol edin:</p>
<ul>
<li><strong>Rapor görünümü (Report view)</strong></li>
</ul>
<h2>Python kodu yazma</h2>
<p>FreeCAD'de Python kodu yazmanın iki yolu vardır. <strong>Python konsolunda</strong> (menüden <code>Görünüm → Paneller → Python konsolu</code>'nu seçin) veya <strong>Makro düzenleyicide</strong> (menüden <code>Makro → Makrolar...</code>'ı seçin). Konsolda Python komutlarını birer birer yazar, <code>Enter</code>'a
basarak çalıştırırsınız (yürütürsünüz), makrolar ise yalnızca makro çalıştırıldığında yürütülen birkaç satırdan oluşan daha karmaşık kodlar içerebilir.</p>
<p><img alt="Python konsolu" src="https://mhalil.github.io/images/freecad/01_freecad_python_konsol.png"></p>
<p><em>FreeCAD Python konsolu</em></p>
<p>Her iki yöntemi de kullanabilirsiniz. Her satırı kopyalayıp Python konsoluna yapıştırır ve ardından <code>Enter</code> tuşuna basabilir veya kodun tamamını yeni bir <strong>Makro penceresine</strong> kopyalayıp yapıştırabilirsiniz.</p>
<h2>FreeCAD'i Keşfetmek</h2>
<p>Yeni boş bir belge oluşturarak kod yazmaya başlayalım:</p>
<div class="highlight"><pre><span></span><code><span class="n">doc</span> <span class="o">=</span> <span class="n">FreeCAD</span><span class="o">.</span><span class="n">newDocument</span><span class="p">()</span>
</code></pre></div>
<p>FreeCAD Python konsoluna <code>FreeCAD.</code> yazdığınız anda FreeCAD bunu fark edecektir. Satırın (kodun) geri kalanını hızlı bir şekilde otomatik tamamlamanıza izin veren bir pencere açılır. Daha da iyisi, otomatik tamamlama listesindeki her girişin ne yaptığını
açıklayan bir ipucu vardır. Bu, mevcut işlevselliği keşfetmeyi kolaylaştırır. <code>newDocument</code>'ı seçmeden önce diğer seçeneklere bir göz atın.</p>
<p><img alt="kod_tamamlama" src="https://mhalil.github.io/images/freecad/02_freecad.newdocument.png"></p>
<p><em>FreeCAD Python konsolunun otomatik tamamlama mekanizması</em></p>
<p>Şimdi (bu kodu yazdıktan sonra) yeni belgemiz FreeCAD tarafından oluşturulacak. Bu, araç çubuğundaki <code>Std New (Yeni)</code> düğmesine basmaya benzer. Aslında FreeCAD'deki çoğu düğme, bir veya daha fazla Python kodu satırını çalıştırmaktan başka bir şey yapmaz.
Daha da iyisi, python konsolunda betik (script) dosyası komutlarını göstermek için <code>Düzenle → Seçenekler → Genel → Makro</code> bölümünden <code>Betik komutlarını python konsolunda göster</code> seçeneği ile ayarlayabilirsiniz. Bu, düğmelere bastığınızda çalıştırılan tüm Python kodunu, konsolda yazdıracaktır. Bu yöntem, Python'da eylemlerin nasıl üretileceğini öğrenmek için çok kullanışlıdır.</p>
<p>Şimdi belgemize geri dönelim ve onunla neler yapabileceğimize bakalım:</p>
<p><strong>doc.</strong> Mevcut seçenekleri keşfedin. Genellikle <strong>büyük harfle başlayan</strong> isimler niteliklerdir, bir değer içerirler, <strong>küçük harfle başlayan</strong> isimler ise fonksiyondur (yöntem olarak da adlandırılır), "bir şey yaparlar". <strong>Alt çizgi ile başlayan</strong> isimler genellikle modülün dahili çalışması için vardır ve bunları önemsememelisiniz. Belgemize yeni bir nesne eklemek için yöntemlerden
birini kullanalım:</p>
<div class="highlight"><pre><span></span><code><span class="n">box</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">addObject</span><span class="p">(</span><span class="s2">"Part::Box"</span><span class="p">,</span> <span class="s2">"myBox"</span><span class="p">)</span>
</code></pre></div>
<p>Kod yazılıp <code>Enter</code> tuşuna basılmasına rağmen hiçbir şey olmadığını göreceksiniz. Bunun sebebini açıklamak gerekirse; FreeCAD birbirine bağlı yüzlerce karmaşık nesneyle çalışabilir, bir yerde küçük bir değişiklik yapmak büyük bir etki oluşturabilir; bu da, uzun zaman alabilecek tüm belgeyi yeniden hesaplamanız anlamına gelir. Bu nedenle neredeyse hiçbir komut sahneyi otomatik olarak güncellemez. Güncellemeyi
el ile (komut yazarak) yapmak gerekir:</p>
<div class="highlight"><pre><span></span><code><span class="n">doc</span><span class="o">.</span><span class="n">recompute</span><span class="p">()</span>
</code></pre></div>
<p>Şimdi (güncelleme komutunu çalıştırınca), sahneye eklediğimiz kutu görünür hale geldi. FreeCAD'de sahneye nesne ekleyen düğmelerin çoğu aslında iki şey yapar: nesneyi ekler ve yeniden hesaplar. Yukarıda bahsedildiği gibi <strong>Betik komutlarını python konsolunda göster (Show script commands in python console)</strong> seçeneğini açtıysanız, GUI düğmesiyle (araç çubuğunda bulunan düğmesini kullanara) sahneye bir küre eklemeyi deneyin; Python kodunun iki satırının birbiri ardına çalıştırıldığını göreceksiniz.</p>
<p><img alt="ekle_guncelle" src="https://mhalil.github.io/images/freecad/03_ekle_guncelle.png"> </p>
<p><em>Nesne eklendi ve yeniden hesaplandı (Güncellendi)</em></p>
<p>Şimdi kutumuzun içeriğini inceleyelim:</p>
<div class="highlight"><pre><span></span><code><span class="n">box</span><span class="o">.</span>
</code></pre></div>
<p>Hemen aşağıdakiler gibi birkaç ilginç şey göreceksiniz:</p>
<div class="highlight"><pre><span></span><code><span class="n">box</span><span class="o">.</span><span class="n">Height</span>
</code></pre></div>
<p>Bu, kutumuzun mevcut yüksekliğini yazdıracaktır. Şimdi bunu değiştirmeye çalışalım:</p>
<div class="highlight"><pre><span></span><code><span class="n">box</span><span class="o">.</span><span class="n">Height</span> <span class="o">=</span> <span class="mi">5</span>
</code></pre></div>
<p>Kutunuzu fare ile seçerseniz, <code>Özellik Düzenleyici</code>de, <code>Veri (Data)</code> sekmesinde <code>Yükseklik (Height)</code> özelliğimizin göründüğünü göreceksiniz (ayrıca <code>Görünüm (View)</code> sekmesindeki özelliklerle alakalı, daha sonra bilgi verilecektir). Orada görünen bir FreeCAD nesnesinin tüm özelliklerine, <em>Veri (Data)</em> <code>Height</code> özelliğinde yaptığımız gibi, adlarıyla Python ile de doğrudan erişilebilir. Kutunun diğer boyutlarını değiştirmeyi deneyin.</p>
<p><img alt="veri_ozellikleri" src="https://mhalil.github.io/images/freecad/04_veri_ozellikleri.png"></p>
<h2>Vektörler ve yerleşimler</h2>
<p><a href="https://tr.wikipedia.org/wiki/Vekt%C3%B6r">Vektör</a>,
herhangi bir 3B (3D) uygulamada çok temel bir kavramdır. Bir vektör, 3B uzayında bir noktayı veya konumu tanımlayan 3 sayıdan (x, y ve z) oluşan bir listedir. Vektörlerle toplamalar, çıkarmalar, projeksiyonlar ve <a href="https://tr.wikipedia.org/wiki/Vekt%C3%B6r_uzay%C4%B1">çok daha fazlası</a> birçok şey yapılabilir. FreeCAD'de vektörler şu şekilde çalışır:</p>
<div class="highlight"><pre><span></span><code><span class="n">myvec</span> <span class="o">=</span> <span class="n">FreeCAD</span><span class="o">.</span><span class="n">Vector</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">myvec</span><span class="o">.</span><span class="n">x</span>
<span class="n">myvec</span><span class="o">.</span><span class="n">y</span>
<span class="n">othervec</span> <span class="o">=</span> <span class="n">FreeCAD</span><span class="o">.</span><span class="n">Vector</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sumvec</span> <span class="o">=</span> <span class="n">myvec</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">othervec</span><span class="p">)</span>
</code></pre></div>
<p>FreeCAD nesnelerinin diğer bir ortak özelliği de <a href="https://wiki.freecadweb.org/Placement">yerleşimleridir (placement)</a>. Her nesnenin, bir <em>Data</em> <code>Base</code> <em>(Konum - position)</em> ve <em>Data</em> <code>Rotation</code> <em>(Oryantasyon, dönüş açısı)</em> bilgilerini içeren bir <em>Data</em> <code>Placement</code> <em>(Veri Yerleşim)</em> özelliği vardır.</p>
<p><img alt="data_base" src="https://mhalil.github.io/images/freecad/05_data_base.png"></p>
<p><code>Placement</code> (<em>Yerleşim</em>) özelliğini kullanarak nesnemizi hareket ettirmek kolaydır:</p>
<div class="highlight"><pre><span></span><code><span class="n">box</span><span class="o">.</span><span class="n">Placement</span> <span class="c1"># Kutunun Konum ve Oryantasyon bilgilerini verir</span>
<span class="n">box</span><span class="o">.</span><span class="n">Placement</span><span class="o">.</span><span class="n">Base</span> <span class="c1"># Kutunun Vektörel Konum Bilgisini verir</span>
<span class="n">box</span><span class="o">.</span><span class="n">Placement</span><span class="o">.</span><span class="n">Base</span> <span class="o">=</span> <span class="n">sumvec</span> <span class="c1"># Kutunun Vektörel Konum Bilgisini, sumvec vektörü ile değiştirir</span>
<span class="n">otherpla</span> <span class="o">=</span> <span class="n">FreeCAD</span><span class="o">.</span><span class="n">Placement</span><span class="p">()</span> <span class="c1"># FreeCAD orijin bilgisini “otherpla”a ata</span>
<span class="n">box</span><span class="o">.</span><span class="n">Placement</span> <span class="o">=</span> <span class="n">otherpla</span> <span class="c1"># Kutunun konum/açı bilgilerini, FreeCAD orijin bilgileri ile eşle/ata</span>
</code></pre></div>
<p>Şimdi daha ileri gitmeden önce birkaç önemli kavramı anlamalıyız.</p>
<h2>Uygulama ve Grafiksel Kullanıcı Arayüzü (App and Gui)</h2>
<p>FreeCAD, bir komut satırı uygulaması olarak kullanıcı arayüzü olmadan da kullanılabilecek şekilde tasarlanmıştır. Bu nedenle FreeCAD'deki hemen hemen her nesne iki bölümden oluşur: Nesnenin "<strong>geometri</strong>" bileşeni ifade eden <code>Object</code> (<em>Nesne</em>), ve "<strong>görsel</strong>" bileşeni ifede eden <code>ViewObject</code> (<em>NesneGörünümü</em>). FreeCAD'i, komut satırı modunda çalıştığınızda, geometri kısmı mevcuttur, ancak görsel kısım devre dışı bırakılır.</p>
<p>Konsepti açıklamak için <strong>küp (box)</strong> nesnemize bakalım. Küpün boyutları, konumu ,... vb. geometrik özellikleri <em>Nesne'de</em> (<code>Object</code>) saklanır. Rengi, çizgi kalınlığı ,... vb. görsel özellikleri ise <strong>NesneGörünümü</strong>’nde (<code>ViewObject</code>)'de saklanır. Bu, Özellik düzenleyicisindeki <code>Veri (Data)</code> ve <code>Görünüm (View)</code> sekmelerine karşılık gelir. Bir unsurun görünüm nesnesine şu şekilde erişilir:</p>
<div class="highlight"><pre><span></span><code><span class="n">vo</span> <span class="o">=</span> <span class="n">box</span><span class="o">.</span><span class="n">ViewObject</span>
</code></pre></div>
<p>Artık Görünüm sekmesindeki özellikleri de değiştirebilirsiniz:</p>
<div class="highlight"><pre><span></span><code><span class="n">vo</span><span class="o">.</span><span class="n">Transparency</span> <span class="o">=</span> <span class="mi">80</span>
<span class="n">vo</span><span class="o">.</span><span class="n">hide</span><span class="p">()</span>
<span class="n">vo</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</code></pre></div>
<p>FreeCAD'i başlattığınızda, Python konsolu zaten iki temel modül yükler: <strong>FreeCAD</strong> ve <strong>FreeCADGui</strong> (<code>App</code> ve <code>Gui</code> kısayolları ile de erişilebilir). Bu modüller belgeler ve nesnelerle çalışmak için her türlü genel işlevi içerir. Konseptimizi göstermek
için, hem <strong>FreeCAD</strong> hem de <strong>FreeCADGui</strong>'nin şu anda açık olan belge bir <code>ActiveDocument</code> özniteliği içerdiğine bakın. Ancak <code>FreeCAD.ActiveDocument</code> ve <code>FreeCADGui.ActiveDocument</code> aynı nesne değildir. Bunlar bir FreeCAD belgesinin iki bileşenidir ve farklı nitelikler ve yöntemler içerirler. Örneğin, <code>FreeCADGui.ActiveDocument</code>, şu anda açık olan 3B görünüm olan <code>ActiveView</code>'i içerir.</p>
<h2>Modüller</h2>
<p>FreeCAD'in gerçek gücü, ilgili çalışma tezgahlarıyla birlikte sadık modüllerinde yatmaktadır. FreeCAD temel uygulaması aşağı yukarı boş bir kaptır/kutudur. Modülleri olmadan yeni, boş belgeler oluşturmaktan biraz daha fazlasını yapabilir. Her modül, arayüze yalnızca yeni çalışma tezgahları eklemekle kalmaz, aynı zamanda yeni Python komutları ve yeni nesne türleri de ekler. Sonuç olarak, birkaç farklı ve hatta tamamen
uyumsuz nesne türleri aynı belgede bir arada bulunabilir. Bu eğitimde inceleyeceğimiz FreeCAD'deki en önemli modüller şunlardır: <a href="https://wiki.freecadweb.org/Part_Module">Part</a>, <a href="https://wiki.freecadweb.org/Mesh_Workbench">Mesh</a>, <a href="https://wiki.freecadweb.org/Sketcher_Workbench">Sketcher</a> ve <a href="https://wiki.freecadweb.org/Draft_Workbench">Draft</a>.</p>
<p><a href="https://wiki.freecadweb.org/Sketcher_Workbench">Sketcher</a> ve <a href="https://wiki.freecadweb.org/Draft_Workbench">Draft</a> geometrilerini oluşturmak ve işlemek için <a href="https://wiki.freecadweb.org/Part_Module">Part</a> modülünü kullanır. <a href="https://wiki.freecadweb.org/Mesh_Workbench">Mesh</a> tamamen bağımsızdır ve kendi nesnelerini yönetir. Aşağıda bununla ilgili daha fazla bilgi var.</p>
<p>Geçerli belge için mevcut tüm temel nesne türlerini aşağıdaki gibi kontrol edebilirsiniz:</p>
<div class="highlight"><pre><span></span><code><span class="n">doc</span><span class="o">.</span><span class="n">supportedTypes</span><span class="p">()</span>
</code></pre></div>
<p>Farklı FreeCAD modülleri, Python konsoluna otomatik olarak yüklenmez.
Bu, FreeCAD’in açılışta çok yavaş bir başlangıç yapmaktan kaçınması içindir. Modüller yalnızca ihtiyacınız olduğunda yüklenir. Örneğin, <code>Part (Parça)</code> modülünün içinde ne olduğunu keşfetmek için aşağıdaki kodu yazabilirsiniz:</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">Part</span>
<span class="n">Part</span><span class="o">.</span>
</code></pre></div>
<p>Ancak aşağıda Parça modülü hakkında daha fazla konuşacağız.</p>
<h2>Mesh (Kafes / Ağ) Modulü</h2>
<p><a href="https://en.wikipedia.org/wiki/Polygon_mesh">Mesh’ler (Kafes yapıları)</a>, örneğin <strong>Sketchup, Blender</strong> ve <strong>3D Studio Max</strong> tarafından kullanılan çok basit bir 3B nesne türüdür. 3 öğeden oluşurlar: <strong>noktalar</strong> (köşeler de denir), <strong>çizgiler</strong> (kenarlar da denir) ve <strong>yüzler</strong>.
FreeCAD dahil birçok uygulamada, yüzlerin yalnız 3 köşesi olabilir.
Elbette, birkaç eş düzlemli üçgenden oluşan daha büyük bir yüzeye sahip olmanızı hiçbir şey engelleyemez.</p>
<p>Kafesler (Mesh) basittir, ancak basit oldukları için tek bir belgede milyonlarcasına kolayca sahip olabilirsiniz. Bununla birlikte, FreeCAD'de daha az kullanımları vardır ve diğer uygulamalardan kafes (mesh) biçimlerinde (<code>.stl, .obj</code>) nesneleri içe aktarabilirsiniz. <code>Mesh</code> modülü, FreeCAD'in ömrünün ilk ayında ana test modülü olarak da yoğun bir şekilde kullanıldı.</p>
<p>Mesh nesneleri ve FreeCAD nesneleri farklı şeylerdir. FreeCAD nesnesini, Mesh nesnesi için bir kap olarak görebilirsiniz (aşağıda göreceğimiz gibi, Part (Parça) nesneleri için de bu geçerlidir). Bu yüzden FreeCAD'e bir mesh nesnesi eklemek için önce bir FreeCAD nesnesi ve bir Mesh nesnesi oluşturmalı, ardından Mesh nesnesini FreeCAD nesnesine eklemeliyiz:</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">Mesh</span>
<span class="n">mymesh</span> <span class="o">=</span> <span class="n">Mesh</span><span class="o">.</span><span class="n">createSphere</span><span class="p">()</span>
<span class="n">mymesh</span><span class="o">.</span><span class="n">Facets</span>
<span class="n">mymesh</span><span class="o">.</span><span class="n">Points</span>
<span class="n">meshobj</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">addObject</span><span class="p">(</span><span class="s2">"Mesh::Feature"</span><span class="p">,</span> <span class="s2">"MyMesh"</span><span class="p">)</span>
<span class="n">meshobj</span><span class="o">.</span><span class="n">Mesh</span> <span class="o">=</span> <span class="n">mymesh</span>
<span class="n">doc</span><span class="o">.</span><span class="n">recompute</span><span class="p">()</span>
</code></pre></div>
<p>Bu, bir küre oluşturmak için <code>createSphere()</code> yöntemini kullanan standart bir örnektir, ancak köşelerini ve yüzlerini tanımlayarak sıfırdan özel kafesler (mesh) de oluşturabilirsiniz.</p>
<p><a href="https://wiki.freecadweb.org/Mesh_Scripting">Mesh komut dosyası (script) oluşturma hakkında daha fazla bilgi edinmek için tıklayın...</a></p>
<h2>Part (Parça) Modülü</h2>
<p><code>Part (Parça)</code> modülü, FreeCAD içerisindeki en güçlü modüldür. <strong>BRep</strong> nesneleri oluşturmanıza ve değiştirmenize olanak tanır. <strong>BREP, "Sınır Temsili"</strong> anlamına gelir. Bir <strong>BREP</strong> nesnesi, bir iç hacmi çevreleyen ve tanımlayan yüzeyler tarafından tanımlanır. Meshlerin (Ağların/Kafes yapılarının) aksine, BREP nesneleri düzlemsel yüzlerden çok karmaşık <strong>NURBS</strong> yüzeylerine kadar çok çeşitli bileşenlere sahip olabilir.</p>
<p><code>Part (Parça)</code> modülü, nesneler üzerinde mantıksal (boole), yani ekleme, çıkarma, kesişim alma gibi işlemler gerçekleştirme, kenarları yuvarlama, radyus oluşturma (filleting), farklı geometriye sahip düzlemleri bir birine bağlayarak çatılama
(loft), ...vb. çok çeşitli karmaşık işlemlerin gerçekleştirilmesine izin veren güçlü <a href="https://en.wikipedia.org/wiki/Open_CASCADE_Technology">OpenCasCade</a> kitaplığına dayanmaktadır.</p>
<p><code>Part (Parça)</code> modülü, <code>Mesh (Kafes/Ağ)</code> modülüyle aynı şekilde çalışır: Bir FreeCAD nesnesi ve bir Part (Parça) nesnesi oluşturursunuz, ardından Part (Parça) nesnesini FreeCAD nesnesine eklersiniz:</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">Part</span>
<span class="n">myshape</span> <span class="o">=</span> <span class="n">Part</span><span class="o">.</span><span class="n">makeSphere</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<span class="n">myshape</span><span class="o">.</span><span class="n">Volume</span>
<span class="n">myshape</span><span class="o">.</span><span class="n">Area</span>
<span class="n">shapeobj</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">addObject</span><span class="p">(</span><span class="s2">"Part::Feature"</span><span class="p">,</span> <span class="s2">"MyShape"</span><span class="p">)</span>
<span class="n">shapeobj</span><span class="o">.</span><span class="n">Shape</span> <span class="o">=</span> <span class="n">myshape</span>
<span class="n">doc</span><span class="o">.</span><span class="n">recompute</span><span class="p">()</span>
</code></pre></div>
<p><code>Part</code> modülü (<code>Mesh</code> modülü gibi) ayrıca otomatik olarak bir FreeCAD nesnesi oluşturan ve ona bir şekil ekleyen bir kısayola sahiptir, böylece son üç satırı şu şekilde
kısaltabilirsiniz:</p>
<div class="highlight"><pre><span></span><code><span class="n">Part</span><span class="o">.</span><span class="n">show</span><span class="p">(</span><span class="n">myshape</span><span class="p">)</span>
</code></pre></div>
<p><strong>myshape</strong>'in içeriğini keşfederek, Yüzeyler, Kenarlar, Noktalar, Katılar ve Kabuklar gibi birçok ilginç alt bileşeni ve kesme/çıkarma (cut), kesişim (common) veya birleştirme (fuse) gibi çok çeşitli geometri işlemlerini fark edeceksiniz. Topolojik veri komut
dosyası oluşturma (scripting) sayfası tüm bunları ayrıntılı olarak açıklar.</p>
<h2>Draft (Taslak) Modülü</h2>
<p>FreeCAD, aynı zamanda <code>Parça (Part)</code> nesneleri oluşturan <code>Sketcher</code> ve <code>Draft</code> gibi daha birçok modüle sahiptir. Bu modüller, oluşturulan nesnelere ek parametreler ekler, hatta içlerindeki Parça geometrisini işlemek için tamamen yeni bir yol uygular. Yukarıdaki anlatımlar esnasında oluşturduğumuz <strong>kutu (box nesnesi)</strong> örneğimiz, <strong>parametrik</strong> bir nesnenin mükemmel bir örneğidir. Kutuyu tanımlamanız için gereken tek şey <strong>yükseklik, genişlik</strong> ve <strong>uzunluk</strong> parametrelerini belirtmektir. Bunlara bağlı olarak nesne, Parça şeklini otomatik olarak hesaplayacaktır. FreeCAD, <a href="https://wiki.freecadweb.org/Scripted_objects">Python ile bu tür nesneler oluşturmanıza</a> olanak tanır.</p>
<p><a href="https://wiki.freecadweb.org/Draft_Workbench">Draft (Taslak) modülü</a>, çizgiler ve daireler gibi 2B (2D) parametrik nesne türleri ekler (tümü <code>Part (Parça)</code> nesneleridir) ve ayrıca yalnız <code>Draft (Taslak)</code> nesnelerinde değil, herhangi bir <code>Parça (Part)</code> nesnesinde de çalışan bazı genel işlevler sağlar. Nelerin mevcut olduğunu keşfetmek için şunları yapmanız yeterlidir:</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">Draft</span>
<span class="n">rec</span> <span class="o">=</span> <span class="n">Draft</span><span class="o">.</span><span class="n">makeRectangle</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">mvec</span> <span class="o">=</span> <span class="n">FreeCAD</span><span class="o">.</span><span class="n">Vector</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">Draft</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">rec</span><span class="p">,</span> <span class="n">mvec</span><span class="p">)</span>
<span class="n">Draft</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">box</span><span class="p">,</span> <span class="n">mvec</span><span class="p">)</span>
</code></pre></div>
<h2>Arayüz / Arabirim</h2>
<p>FreeCAD kullanıcı arayüzü, <a href="https://wiki.freecadweb.org/3D_view">3B (3D) görünüm</a> etrafındaki tüm kontrolleri, menüleri, araç çubuklarını ve düğmeleri çizmekten ve kullanmaktan sorumlu güçlü bir grafik arayüz sistemi olan <a href="https://en.wikipedia.org/wiki/Qt_(software)">Qt</a> ile yapılmıştır. Qt, Python'un FreeCAD gibi Qt arabirimlerine erişmesine ve değiştirmesine izin veren <a href="https://wiki.freecadweb.org/PySide">PySide</a> adlı bir modül sağlar. <a href="https://en.wikipedia.org/wiki/Qt_(software)">Qt</a> arayüzü ile oynamayı deneyelim ve basit bir diyalog üretelim:</p>
<div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">PySide</span> <span class="kn">import</span> <span class="n">QtGui</span>
<span class="n">QtGui</span><span class="o">.</span><span class="n">QMessageBox</span><span class="o">.</span><span class="n">information</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="s2">"Apollo program"</span><span class="p">,</span> <span class="s2">"Houston, we have a problem"</span><span class="p">)</span>
</code></pre></div>
<p><img alt="mesaj_kutusu" src="https://mhalil.github.io/images/freecad/06_mesaj_kutusu.png"></p>
<p>Görünen iletişim kutusunun araç çubuğunda FreeCAD simgesi olduğuna dikkat edin (Linux sistemde bu simge görünmeyebilir); bu, <strong>Qt</strong>'nin, komutun, FreeCAD uygulamasının içinden verildiğini bildiği anlamına gelir. (<strong>PySide</strong> modülü ile) FreeCAD arayüzünün herhangi bir bölümünü değiştirmek mümkündür.</p>
<p><strong>Qt</strong>, çok karmaşık şeyler yapmanızı sağlayan çok güçlü bir arayüz sistemidir. Ayrıca, diyalogları grafiksel olarak tasarlayabileceğiniz ve ardından birkaç satır Python kodu ile FreeCAD arayüzüne ekleyebileceğiniz <a href="https://www.qt.io/design">Qt Designer</a> gibi bazı kullanımı kolay araçlara da sahiptir.</p>
<p><a href="https://wiki.freecadweb.org/PySide">PySide</a> hakkında daha fazla bilgiyi buradan okuyabilirsiniz...</p>
<h2>Makrolar</h2>
<p>Artık <strong>Komut dosyası (script)</strong> oluşturmanın temelleri iyi anladığınıza göre, Python betiklerimizi (script) nerede, hangi klasörde tutacağız ve bunları FreeCAD içinde nasıl başlatacağız? konularını irdelemeye sıra geldi. Bunun için <strong>Makrolar</strong> denen kolay bir mekanizma var. <strong>Makro</strong>, bir araç çubuğuna eklenebilen ve fare tıklamasıyla başlatılabilen bir Python komut dosyasıdır (betiğidir). FreeCAD, komut dosyaları
yazabileceğiniz veya yapıştırabileceğiniz basit bir metin düzenleyici (<code>Makro → Makrolar... → Oluştur</code>) sağlar. Komut dosyası tamamlandıktan sonra, bunun için araç çubuklarına eklenebilecek bir düğme tanımlamak için <code>Araçlar → Özelleştir... → Makrolar</code>'ı kullanın.</p>
<p>Artık daha derinlemesine FreeCAD komut dosyası oluşturmaya hazırsınız. O halde <a href="https://wiki.freecadweb.org/Power_users_hub">Uzman kullanıcılar merkezine (Power users hub)</a> gidin!</p>
<p>Kaynak: <a href="https://wiki.freecadweb.org/Python_scripting_tutorial">Python scripting tutorial</a></p>
<p><a href="freecad-scripting-01-pythona-giris.html">← Önceki Bölüm</a> | <a href="freecad-scripting-03-komut-dosyasi-olusturmanin-temelleri.html">Sonraki Bölüm →</a></p>
</div>
</div>
</body>
</html>