Python ile 3d çizim

Python ile 3d bir obje çizip bir veri kutucuğuna verdiğim değerler ile bu objeye rotasyon vermek istiyorum. CNC makina implamantasyonunda kullanacağım.

Belirli bir referans noktası atayıp B ve A eksenlerinde hareket sağlamak istiyorum. bu açılı hareketleri ise çizimin üst düzleminden 3 ayrı Z eksen den alınan farklı Z değerlerine göre yapmak istiyorum. Bunun için nasıl bir yol izlemem gerekir.

Şurada paylaştığım vpython isimli modüle bakar mısınız:

CNC makineleriyle çalışır mı bilmem ama 3 boyutlu grafiklerle alakalı bir modüldü.

1 Beğeni

Dwg-dxf’ leri g code çeviren bir python uygulaması var ve onun dışında python ile yapılmış Cam programı da mevcut. Bence bunları inceleyerek başlayabilirsin.

implamantasyon demek istediğin interpolasyon mudur?
parça işlerken küçük adımlarla yaklaşarak eğriyi tutturmayı mı kast ettiniz.

cam programı

dxf to gcode

şu konuya da göz atmalısın

Cizimi nasil yapmak istiyorsun? CSG mi, mesh mi, parametrik mi? Yoksa disaridan mi alinacak? Burada istedigin cizimi yapmani saglayan basit bir 3D kutuphanesi yetecektir.

3 boyutta tek Z ekseni var. “3 ayri Z ekseni” diyince boyut sayisi 5’e cikiyor, demek istedigini anlamadim.

Herhangi bir cisimin herhangi bir (a, b) koordinatindaki tepe z noktasini almak icin (a, b, -∞)'dan (a, b, +∞)'a giden ışınla kesistirmen yeter. Kesisen her yuzeyin/primitifin kesisme noktasina bakip z’si en kucuk (veya en buyuk) olani alman yetecektir.

Buradaki eksenler şöyle oluyor, yanılıyorsam arkadaşım düzeltir.
3 eksen iş parçasının bağlı olduğu nokta sıfır noktası kabul edilerek alınır ve diğer eksen iş parçasının herhangi bir yerinde olur ki bu açılı bir şekilde de yerleştirilmiş olabilir.

öncelikle birinci soruna cevap vereyim : z ekseni bir tane var 3 ayrı noktaya temas ettirilecek.
fotoğrafla açıklayayım.

Benim amacım bir formül yapıp 3 noktadaki z değerlerinin hepsini 0 yapmak istiyorum. Bu işin formül kısmı . 2.resimde gördüğünüz gibi olacak.

formül ü yazdığımızı düşünün. Gelelim 3d çizim kısmına. 3d çizimi bu formüle uygun olarak simule etmek istiyorum.

Detay ;
öncelikle verileri topluyorum. Verileri formüller için oluşturnuş olduğum inputlara yazıyorum.
Formül 2,3 adımdan oluşacak ve buna göre 3d datayı simule etmek istiyorum.

Hah tamam, X, Y ve Z disinda A ve B eksenleri var. CNC 5 boyutlu. Okey.

α, noktanin yuksekligiyle donme merkezine olan mesafesinin arktanjanti. Izdusum duzlemleri X/Y/Z eksenlerine dik olduguna gore dogrudan X ve Z koordinatlarini kullanabiliriz.

β icin de ayni hesabin y=0 duzlemine dusenini yapmak lazim; orada da Y ve Z koordinatlarini kullanabiliriz gibi geliyor.

Tabi yanlis anlamadiysam. Yoksa n1-n2-n3 duzlemini z=0 duzlemine paralel mi yapmak istiyorsunuz?
Evet, pardon, oyle galiba.

O zaman ucgenin normalini kullanacagiz (nu = (n2 - n1) ⨯ (n3 - n1)). Bunu h = (0, 0, 1)'e paralel yapmak istiyoruz. nu’nun A ve B donme duzlemlerine izdusumu alinirsa, h’nin bu duzlemlerdeki izdusumuyle arasindaki aci, dogrudan α ve β’yi verecektir… sanirim.

Veriler nedir peki? Noktalarin koordinatlari, A/B donme eksenleri/vektorleri ve merkez noktalari gibi, formule girdi olacak veriler mi?

Formul “2,3” adimdan nasil olusuyor? Adimlar neler?

3D datayi simulasyondan kasit verilen datalara gore videodaki gibi bir objenin cizilmesi, sonra bunun dogrultulmasinin animasyonu mu?

Zannediyorum ki basit 3D kutuphanelerinin tamami isi gorecektir. Formul kismi icin ise numpy’e bile gerek yok, trigonometri + vektor dort islemi (bunlari yazmak lazim) yetecektir.

Yöntemimi izah edeyim öncelik ardından verilenleri söyleyeceğim.

B ekseni göz kararı sıfırlıyorum. ardından b eksene taşlanmış bir parça bağlıyorum. Mastar da diyebiliriz. Fotoğrafta dikkat ettiyseniz dent armada yazan iş parçasının yerine mastar koyacağız. Bunu ölçüm almak için yapıyorum. Bir adet de avometre kullanacağız. Spindel ucuna bir şaft bağlıyoruz ve avometre nin artı yada eksi yönünü bu şafta bağlıyoruz. Diğer ucunu da taşlanmış parçaya bağlıyoruz. Bu elektrik iletkenliğini kullanarak temas edip etmediğimizi hassas bir şekilde farketmek için. Bu üç noktadan aldığım Z değerleri bana ne kadar bozukluk olduğunu gösterecek. ve bu sapmayı B ve A enkoder pozisyonlarını değiştirerek düzeltmek istiyorum.

eksenler

Verilenler ;

Resimde göstermiş olduğum 3 ayrı Z değeri.

ayrıca ; 2020+b2= 8080

           400+b2=6400
           kökb = 77,45966692414834
           tanα = 20/77,459666
            tanα = 0,258
            α = 14.466 
            oluyor. yani burada tanα üzerinden de bir input um var.

z1 ve z2 değerlerini bulup uzaklığını toplayıp ikiye böldüğümüz zaman b yi sıfırlamış oluyoruz. teorik olarak. ardından da z3 ile diğer değer bizim A eksenini sıfırlamamız gereken değeri veriyor. Bu şekilde kompratör kullanmadan bir program yazıp bu şekilde hesaplama yapmak istiyorum. Bunu da similasyonunu basit olarak yapmak istiyorum. Similasyon 2 boyutlu da olabilir aslında. 3d yapmayı python bilgimi arttırmak için yapmak istiyorum.

amacım Z ekseninden 3 noktaya dokunduğumda da aynı değeri almak

yani A ve B eksenlerini sıfırlamak .

n1 n2 n3 düzlemlerinden kastınız nedir ?

Hmm, bu yontem (z2-z1) X eksenine paralel degilse calismaz gibi geliyor.

Neyse, simulasyonu bu yuzden yapiyoruz zaten. 2 boyutlu nasil olabilir anlamadim?
3 boyut icin oncelikle objeyi cizerek baslamak lazim. Soyle adimlandiralim:

  1. Herhangi bir 3D sahne cizmek
  2. Objeye benzer bir dikdortgenler prizmasi cizmek
  3. Objeyi cizmek (kodla veya bir model yukleyerek olabilir)
    3.5) Objenin uzerindeki noktalari belirleyici bir seyler cizmek. Texture olur, z1/z2/z3 noktalarinda kure olur, kup olur)
  4. Koordinat sistemini oturtmak (X/Y/Z eksenleri dogru yerde, z1/z2/z3 noktalari olculen yerlerde)

vpython tavsiye edilmis. Ben de vispy tavsiye ediyorum.

1 Beğeni

vpython bu konu altında mı tavsiye edildi ben göremedim ? Vispy i deneyeceğim. teşekkürler

  1. anaconda kullanılıyorum vispy ayrıca yüklemem gerekecek mi ?
  2. Objeye benzer dikdörtgenler prizmasını neden çiziyoruz , zaten örneğin bir cam programında çizim yapmayacak mıyız?
  3. objenin 3D datasını solidworks de çizip pythona aktarabiliyorsak bu daha kolay olurdu. Böyle bir imkanımız var mı ?
    3.1 Texture yada küre küp birşeyler çizeriz.
    4.Koordinat sistemini muhetemelen düzlem oluşturmak için söylüyorsunuz. Ok .

Anladığım kadarıyla ;
Öncelikle bir xyz koordinatı oluşturmalıyız.
Ardından z1,z2,z3 noktalarının bulunduğu bir düzlem oluşturmak için yine koordinat oluşturmamız gerekiyor. Bu koordinat oluşturmayı da matrisler yardımıyla mı yapacağız.

Sorunun altindaki ilk cevapta var :​)

Anaconda’nin icinde paket yoneticisi varmis. Orada yok mu?

Cunku kup cizmek cogu kutuphanede tek satir, ve sonuclari hemen goruluyor. Onu uc eksende scale edip dikdortgenler prizmasi haline getirmek bir satir daha. Muzik enstrumani ogrenirken once ses cikartmaya calisiyoruz, koncerto calmaya degil; onun gibi.

CAM modeli cizmenin onlarca adimi var. Calismadi diyelim, sunlarin hepsini tek tek test edecek misin? :

  • CAM programindan export esnasinda hata olustu
  • CAM programi export etti ama tam olarak beklenen formatta degil
  • Texture’lar export edilmemis
  • Cizim kutuphanesi texture’lari import edememis
  • Etmis ama texture kullaninca isiklandirmayi aciyor, sahnede isik yok
  • Ucgenler ters yonde belirtilmis
  • Dortgen mesh’i var ve kutuphane bunu desteklemiyor
  • Modelin koordinat sistemi bozuk, orijin cok uzaklarda
  • Sahnenin veya modelin koordinat sistemi bozuk, modelin icinde oldugun icin goremiyorsun
  • Sahnenin veya modelin koordinat sistemi bozuk, modelin uzaginda oldugun icin goremiyorsun
  • Sahnede kamera yanlis yere konuslandirilmis
  • Sahnede kamera yanlis yere bakiyor

Solidworks’un cikti olarak verdigi formatlar ile kullandigin kutuphanenin/yazdigin kodun girdi olarak alabildigi formatlar arasinda kesisim olmasi lazim. Mutlaka vardir.

Ama once kup dene. Kubun alti tane yuzeyi var ve normalleri her kardinal yone bakiyor; back-face culling’den gorunmez cikmasi cok zor. (Ve boyutlarini olcmek kolay ve quad vertexleri coplanar ve ve ve…)

Koordinat sistemi zaten ekran kartinin, OpenGL’in, ara kutuphanelerin icinde var. Oturtmaktan kastim, programda sahnedeki sistemin yukaridaki resimlerle ve/veya CAD/CAM cizimleriyle tutmasi. z2 z1’in 47 mm sagindaysa senin sahnende de 47 birim +X yonunde olmasi lazim.

Peki hocam solidworks çizimimi nasıl import edeceğim Python a . Baya araştırdım bu konu hakkında birşey bulamadım

Python’a degil cunku, Python’da kullandigin sahne kutuphanesine import edeceksin.

Kesisimi bul, oradan devam edelim istersen.

bunlar cam programları yanlış anlamadıysam python ile yazılabileceğini düşünüyorum

CAD olacaktı.

C veya C++ daha iyi bir tercih olur.