Kısaca
- ComponentInstance, bir ComponentDefinition nesnesine ve örneğin modeldeki konumunu belirleyen dönüşüme referans verir.
- make_unique, bir bileşen örneğine başka örneklerin paylaşmadığı yeni bir tanım oluşturur.
- DefinitionList, modeldeki bileşen tanımlarını bulma, ekleme, yükleme ve kullanılmayanları temizleme yöntemleri sunar.
- 2021.0’dan itibaren daha yeni SketchUp modelleri yüklenebilir; ancak bazı bilgiler atlanabileceği için kaynak dosyanın üzerine kaydetmemek gerekir.
SketchUp Ruby API belgeleri, modeldeki bileşen örneklerinin nasıl temsil edildiğini ve bunların bağlı olduğu tanımların nasıl yönetilebileceğini açıklıyor. ComponentInstance, modelde yerleştirilmiş bir bileşen örneğini; ComponentDefinition ise bu örneğin dayandığı bileşen tanımını temsil ediyor. Örneğin model içindeki konumu da bir dönüşüm bilgisiyle belirleniyor. Bu ayrımı bilmek, tekrar kullanılan nesnelerde ortak değişiklik yapmakla yalnızca tek bir örneği farklılaştırmayı birbirinden ayırmaya yardımcı oluyor.
Bu rehber, SketchUp Ruby API’nin ComponentInstance, DefinitionList ve Model belgelerindeki yöntemleri temel alıyor. Yöntemlerin sürüm notları aynı değil; belirli bir sürüm bilgisi verilen özelliklerde ilgili sınır ayrıca belirtiliyor.
1. Örnek ile bileşen tanımının ilişkisini anlayın
Modeldeki bileşen örneğini tanımından ayrı düşünün. Bir ComponentInstance, ComponentDefinition nesnesine referans verir ve kendi konumunu dönüşüm bilgisiyle taşır. Bu yapı, aynı tanımın birden fazla yerleştirilmiş örnek tarafından kullanılabilmesine imkân verir. Dolayısıyla bir örneği düzenlemeden önce, hangi tanıma bağlı olduğunu kontrol etmek önemlidir.
Ruby API’de Sketchup.active_model etkin modeli verir. Model nesnesinin definitions yöntemi, modeldeki ComponentDefinition nesnelerini içeren DefinitionList koleksiyonuna erişim sağlar. Bir örneğin definition yöntemi ise doğrudan o örneğin bağlı olduğu tanımı döndürür. Böylece model genelindeki tanımları incelemekle belirli bir örneğin tanımını bulmak farklı işlemler olarak ele alınabilir.
Aynı tanımı kullanan diğer örneklerin değişmesini istemiyorsanız, tekil örneği düzenlemeden önce make_unique yöntemini değerlendirin. Belgelere göre bu yöntem, o örnek için diğer örneklerin kullanmadığı yeni bir tanım oluşturur. Bu, birden çok kez kullanılan mobilya, kapı veya donatı öğelerinden yalnızca birini farklılaştırmak istendiğinde işe yarayabilecek bir ayrımdır.
2. Ruby API ile örneği inceleyip ayırın
Aşağıdaki örnek, etkin modeldeki düzenleme bağlamında bulunan ilk ComponentInstance nesnesini arar. Bir örnek bulursa bağlı olduğu tanımın adını yazdırır ve ardından make_unique çağrısıyla bu örnek için bağımsız bir tanım oluşturur. Kod, modelin tüm tanım listesini taramaz; tanım adını seçilen örneğin definition yöntemi üzerinden alır.
model = Sketchup.active_model
instance = model.active_entities.grep(Sketchup::ComponentInstance).first
if instance
puts instance.definition.name
instance.make_unique
endBu örneği kendi modelinizde çalıştırmadan önce hangi bileşenin seçildiğini veya etkin düzenleme bağlamında bulunduğunu doğrulayın. Kod, ilk ComponentInstance nesnesini alır; belirli bir bileşeni ada göre seçmez. Bu nedenle birden fazla bileşen varsa çıktıyı ve hedef örneği kontrol etmek önemlidir. make_unique çağrısı da yalnızca bilgi göstermez, modelde bağımsız bir tanım oluşturur.
Bağlı tanımı değiştirmek ile örneğin konumunu değiştirmek ayrı ihtiyaçlardır. ComponentInstance üzerinde definition= yöntemi farklı bir tanım atar ve belgelerde örneğin mevcut dönüşümünü koruduğu belirtilir. transformation ve transformation= dönüşümü okumak ya da ayarlamak için kullanılabilir. transform! bir Geom::Transformation uygular; move! ise dönüşümü benzer şekilde ayarlarken işlemi geri alma yığınına kaydetmez. Bu farkı, eklentideki düzenleme ve geri alma akışını tasarlarken göz önünde bulundurun.
3. Geometri ve tanım koleksiyonlarında dikkatli çalışın
explode yöntemi bileşen örneğini ayrı çizim öğelerine dönüştürür. Başarılı olduğunda bir öğe dizisi, başarısız olduğunda false döndürebilir. Bileşen yapısını korumak önemliyse, bu yöntemi kullanmadan önce işlemin modelde yaratacağı sonucu değerlendirin. Belgeler ayrıca intersect, outer_shell, split, subtract, trim ve union gibi geometrik işlemleri listeliyor; bunların bazıları manifold katı hacimler üzerinde çalışmak üzere tanımlanmış. Dolayısıyla her bileşen üzerinde aynı sonucu vereceklerini varsaymamak gerekir.
trim, iki manifold katı hacim arasındaki farkı tahribatsız biçimde hesaplar; subtract ise fark işlemi için listelenen diğer yöntemdir. intersect yönteminin SketchUp Make’te bulunmadığı da API belgesinde not ediliyor. ComponentInstance üzerindeki manifold? yöntemi kullanımdan kaldırılmış olarak işaretli; belgelere göre tanımın manifold durumunu kontrol etmek için ComponentDefinition#manifold? tercih edilmeli. Bu notlar, geometrik işlemlerden önce yöntem açıklamasına ve nesnenin türüne bakılması gerektiğini gösteriyor.
DefinitionList, tanımları dizin, ad veya GUID ile bulmayı; yeni tanım eklemeyi, dosyadan bileşen yüklemeyi ve kullanılmayan tanımları temizlemeyi sağlayan yöntemler içeriyor. purge_unused kullanılmayan tanımları kaldırır. Koleksiyon üzerinde each ile gezinirken aynı koleksiyondan öğe silmekten kaçının: belge, öğe sayısı ve dizinler değişebileceği için bazı tanımların atlanabileceği uyarısını yapıyor. Silme işlemi gerekiyorsa, önce koleksiyonu bir diziye kopyalayıp bu kopya üzerinde ilerlemek belgede önerilen yaklaşımdır.
4. Sürüm uyumunu ve dosya güvenliğini kontrol edin
DefinitionList içindeki load yöntemi, SketchUp bileşen dosyasını yüklemek için kullanılıyor. Belgelere göre SketchUp 2021.0’dan itibaren daha yeni sürümde kaydedilmiş modellerin yüklenmesine izin veren allow_newer seçeneği bulunuyor. Ancak yükleme sırasında bazı bilgilerin atlanma olasılığı var; API belgesi, daha yeni modelden yüklenen dosyanın üzerine kaydedilmemesi konusunda uyarıyor. Kaynak modeli korumak bu nedenle iş akışının parçası olmalı.
Aynı dosya yolundaki bileşeni yeniden yükleme davranışı için de sürüm notu var. SketchUp 2023.0 öncesinde, aynı yolla ilişkilendirilmiş farklı bir bileşen modelde bulunuyorsa yükleme çağrısı yeni içeriği almak yerine mevcut bileşeni döndürebiliyordu. Dosya güncellenmiş görünmüyorsa kullanılan SketchUp sürümünü ve dosya yolunu kontrol edin; kaynak belgede belirtilen sürüm sınırlarını eklenti kodunun uyumluluğuna yansıtın.
Mimarlık, iç mimarlık ve görselleştirme iş akışına etkisi
Tekrarlanan mobilya, kapı ve donatı öğeleri kullanan mimarlık ve iç mimarlık ekipleri için örnek-tanım ayrımı, modeldeki değişikliklerin kapsamını anlamayı kolaylaştırır. Paylaşılan tanım üzerinden ortak değişiklik yapılması gerekiyorsa bileşen ilişkisi kullanışlıdır; yalnızca tek bir örnek farklılaştırılacaksa make_unique bunun için API’de sunulan yöntemdir. Bu ayrım, model üzerinde çalışan ekiplerin hangi öğelerin birlikte değiştiğini takip etmesine yardımcı olabilir.
Görselleştirme ekipleri ve eklenti geliştiricileri için de önemli nokta, doğru örneğin ve doğru tanımın seçildiğini doğrulamaktır. Kaynaklarda belirli donanım gereksinimi, performans ölçümü veya lisans koşulu belirtilmiyor. Takip edilmesi gereken somut konular, kullanılan SketchUp sürümünün ilgili yöntemi desteklemesi ve daha yeni sürüm dosyaları yüklenirken kaynak dosyanın korunmasıdır.
Sık yapılan hatalar
Bir örneğin paylaşılan tanımını, diğer örneklerin de değişebileceğini hesaba katmadan düzenlemek.
Kodun ilk ComponentInstance nesnesini bulduğunu unutup belirli bir nesneyi seçtiğini varsaymak.
Tanım atamasıyla konum dönüşümünü değiştirmeyi aynı işlem sanmak.
Manifold koşulu bulunan geometrik yöntemleri her bileşende çalışacakmış gibi kullanmak.
DefinitionList üzerinde gezinirken aynı koleksiyondan öğe silmek.
Daha yeni bir model yüklendikten sonra kaynak dosyanın üzerine kaydetme uyarısını göz ardı etmek.
Sık sorulan sorular
SketchUp’ta ComponentInstance ile ComponentDefinition arasındaki fark nedir?
ComponentInstance modelde yerleştirilmiş bileşen örneğidir ve bir ComponentDefinition nesnesine referans verir. Örneğin konumu dönüşüm bilgisiyle belirlenir.
SketchUp Ruby API’de tek bir bileşen örneği nasıl bağımsızlaştırılır?
ComponentInstance üzerinde make_unique yöntemi kullanılabilir. Belgeler, bu yöntemin örnek için başka örneklerin paylaşmadığı yeni bir tanım oluşturduğunu belirtiyor.
Daha yeni bir SketchUp dosyası Ruby API ile yüklenirken nelere dikkat edilmeli?
2021.0’dan itibaren load yönteminde allow_newer seçeneği bulunuyor. Daha yeni bir dosyadan bazı bilgiler atlanabileceği için kaynak dosyanın üzerine kaydedilmemesi öneriliyor.
Kaynaklar
3 kaynakKaynak metinler yeniden yayımlanmaz; kısa alıntılar tırnak içinde verilir, geri kalanı özgün özet ve yorumdur.
Türkiye’deki mimarlık ve görselleştirme ofisleri için bu yaklaşımın pratik karşılığı, tekrarlanan öğelerde ortak değişiklik ile tekil düzenlemeyi birbirinden ayırabilmek. Ekip içinde model devri yapılırken bileşenin hangi tanımı kullandığını kontrol etmek, beklenmeyen toplu değişiklikleri önlemeye yardımcı olabilir.
Bu rehberdeki API yöntemleri donanım ihtiyacı veya lisans maliyeti hakkında bilgi vermiyor; bu başlıklarda ayrıca ürün ve sürüm koşulları kontrol edilmeli. Ofisler için öncelik, kullanılan SketchUp sürümüyle API uyumunu doğrulamak ve daha yeni dosyalar yüklenirken kaynak kopyayı korumak olmalı. En kolay atlanabilecek nokta, ortak tanımı değiştirmeden önce kapsamını kontrol etmektir.




Yorumlar 0