Qısaca
- ComponentInstance, ComponentDefinition obyektinə və instansın modeldəki mövqeyini müəyyən edən transformasiyaya istinad edir.
- make_unique komponent instansı üçün digər instansların paylaşmadığı yeni tərif yaradır.
- DefinitionList modeldəki komponent təriflərini tapmaq, əlavə etmək, yükləmək və istifadə olunmayanları təmizləmək üçün metodlar təqdim edir.
- 2021.0 versiyasından başlayaraq SketchUp-ın daha yeni modellərini yükləmək mümkündür; lakin bəzi məlumatlar ötürülməyə bilər, buna görə də mənbə faylın üzərinə yazmaq olmaz.
SketchUp Ruby API sənədləri modeldəki komponent instanslarının necə təqdim edildiyini və onların bağlı olduğu təriflərin necə idarə oluna biləcəyini izah edir. ComponentInstance modeldə yerləşdirilmiş komponent instansını, ComponentDefinition isə bu instansın əsaslandığı komponent tərifini təmsil edir. İnstansın modeldəki mövqeyi də transformasiya məlumatı ilə müəyyən olunur. Bu fərqi bilmək təkrar istifadə edilən obyektlərdə ümumi dəyişiklik etməklə yalnız bir instansı fərdiləşdirməyi bir-birindən ayırmağa kömək edir.
Bu təlimat SketchUp Ruby API-nin ComponentInstance, DefinitionList və Model sənədlərindəki metodlara əsaslanır. Metodların versiya qeydləri eyni deyil; konkret versiya məlumatı verilən xüsusiyyətlər üçün müvafiq məhdudiyyət ayrıca göstərilir.
1. İnstansla komponent tərifi arasındakı əlaqəni anlayın
Modeldəki komponent instansını onun tərifindən ayrı nəzərdən keçirin. ComponentInstance, ComponentDefinition obyektinə istinad edir və öz mövqeyini transformasiya məlumatı ilə müəyyənləşdirir. Bu struktur eyni tərifin bir neçə yerləşdirilmiş instans tərəfindən istifadə olunmasına imkan verir. Buna görə də instansı redaktə etməzdən əvvəl onun hansı tərifə bağlı olduğunu yoxlamaq vacibdir.
Ruby API-də Sketchup.active_model aktiv modeli qaytarır. Model obyektinin definitions metodu modeldəki ComponentDefinition obyektlərini ehtiva edən DefinitionList kolleksiyasına çıxış verir. İnstansın definition metodu isə həmin instansın bağlı olduğu tərifi birbaşa qaytarır. Beləliklə, modeldəki bütün tərifləri nəzərdən keçirməklə konkret instansın tərifini tapmaq ayrı əməliyyatlar kimi aparıla bilər.
Eyni tərifdən istifadə edən digər instansların dəyişməsini istəmirsinizsə, konkret instansı redaktə etməzdən əvvəl make_unique metodunu nəzərdən keçirin. Sənədlərə görə bu metod həmin instans üçün digər instansların istifadə etmədiyi yeni tərif yaradır. Bu, bir neçə dəfə istifadə olunan mebel, qapı və ya avadanlıq elementlərindən yalnız birini fərdiləşdirmək lazım gəldikdə faydalı ola bilər.
2. Ruby API ilə instansı yoxlayın və ayırın
Aşağıdakı nümunə aktiv modelin redaktə kontekstindəki ilk ComponentInstance obyektini axtarır. İnstans taparsa, bağlı olduğu tərifin adını çap edir və sonra make_unique çağırışı ilə həmin instans üçün müstəqil tərif yaradır. Kod modeldəki bütün tərif siyahısını yoxlamır; tərifin adını seçilmiş instansın definition metodu vasitəsilə əldə edir.
model = Sketchup.active_model
instance = model.active_entities.grep(Sketchup::ComponentInstance).first
if instance
puts instance.definition.name
instance.make_unique
endBu nümunəni öz modelinizdə icra etməzdən əvvəl hansı komponentin seçildiyini və ya aktiv redaktə kontekstində olduğunu yoxlayın. Kod ilk ComponentInstance obyektini götürür; konkret komponenti adına görə seçmir. Buna görə bir neçə komponent varsa, nəticəni və hədəf instansı yoxlamaq vacibdir. make_unique çağırışı da sadəcə məlumat göstərmir, modeldə müstəqil tərif yaradır.
Bağlı tərifi dəyişmək və instansın mövqeyini dəyişmək ayrı ehtiyaclardır. ComponentInstance üzərindəki definition= metodu başqa tərif təyin edir və sənədlərdə instansın mövcud transformasiyasını saxladığı qeyd olunur. transformation və transformation= transformasiyanı oxumaq və ya təyin etmək üçün istifadə edilə bilər. transform! Geom::Transformation tətbiq edir; move! isə transformasiyanı oxşar şəkildə təyin etsə də, əməliyyatı geri qaytarma yığınına yazmır. Plugin-də redaktə və geri qaytarma axınını qurarkən bu fərqi nəzərə alın.
3. Həndəsə və tərif kolleksiyaları ilə ehtiyatla işləyin
explode metodu komponent instansını ayrı çəkiliş elementlərinə çevirir. Uğurlu olduqda elementlər massivi, uğursuz olduqda isə false qaytara bilər. Komponent strukturunu qorumaq vacibdirsə, bu metodu işlətməzdən əvvəl əməliyyatın modeldə yaradacağı nəticəni nəzərdən keçirin. Sənədlərdə intersect, outer_shell, split, subtract, trim və union kimi həndəsi əməliyyatlar da sadalanır; bunlardan bəziləri manifold bərk həcmli obyektlər üzərində işləmək üçün nəzərdə tutulub. Buna görə hər komponentdə eyni nəticəni verəcəklərini güman etmək olmaz.
trim iki manifold bərk həcm arasındakı fərqi dağıdıcı olmayan şəkildə hesablayır; subtract isə fərq əməliyyatı üçün sadalanan digər metoddur. API sənədlərində intersect metodunun SketchUp Make-də mövcud olmadığı da qeyd olunur. ComponentInstance üzərindəki manifold? metodu istifadədən çıxarılmış kimi işarələnib; sənədlərə görə tərifin manifold vəziyyətini yoxlamaq üçün ComponentDefinition#manifold? metodundan istifadə edilməlidir. Bu qeydlər həndəsi əməliyyatlardan əvvəl metodun təsvirinə və obyektin növünə baxmağın vacibliyini göstərir.
DefinitionList tərifləri indeks, ad və ya GUID ilə tapmaq, yeni tərif əlavə etmək, fayldan komponent yükləmək və istifadə olunmayan tərifləri təmizləmək üçün metodlar ehtiva edir. purge_unused istifadə olunmayan tərifləri silir. Kolleksiyada each ilə dövr edərkən eyni kolleksiyadan element silməyin: sənədlərdə xəbərdarlıq edilir ki, elementlərin sayı və indekslər dəyişə bilər, nəticədə bəzi təriflər ötürülə bilər. Silmə əməliyyatı lazımdırsa, əvvəlcə kolleksiyanı massivə köçürüb həmin surət üzərində işləmək sənədlərdə tövsiyə olunan yanaşmadır.
4. Versiya uyğunluğunu və fayl təhlükəsizliyini yoxlayın
DefinitionList-dəki load metodu SketchUp komponent faylını yükləmək üçün istifadə olunur. Sənədlərə görə SketchUp 2021.0 versiyasından başlayaraq daha yeni versiyada saxlanmış modellərin yüklənməsinə imkan verən allow_newer seçimi mövcuddur. Lakin yükləmə zamanı bəzi məlumatlar ötürülməyə bilər; API sənədləri daha yeni modeldən yüklənmiş faylın üzərinə yazmamaq barədə xəbərdarlıq edir. Buna görə mənbə modeli qorumaq iş axınının bir hissəsi olmalıdır.
Eyni fayl yolundakı komponentin yenidən yüklənməsi davranışı ilə bağlı da versiya qeydi var. SketchUp 2023.0-dan əvvəl eyni yol ilə əlaqələndirilmiş başqa bir komponent modeldə varsa, yükləmə çağırışı yeni məzmunu gətirmək əvəzinə mövcud komponenti qaytara bilərdi. Fayl yenilənmiş görünmürsə, istifadə etdiyiniz SketchUp versiyasını və fayl yolunu yoxlayın; mənbə sənədlərdə göstərilən versiya məhdudiyyətlərini plugin kodunun uyğunluğunda nəzərə alın.
Memarlıq, interyer dizaynı və vizuallaşdırma iş axınına təsiri
Təkrarlanan mebel, qapı və avadanlıq elementlərindən istifadə edən memarlıq və interyer dizaynı komandaları üçün instansla tərif arasındakı fərq modeldəki dəyişikliklərin əhatə dairəsini anlamağı asanlaşdırır. Paylaşılan tərif vasitəsilə ümumi dəyişiklik etmək lazımdırsa, komponent əlaqəsindən istifadə etmək rahatdır; yalnız bir instansı fərdiləşdirmək lazımdırsa, make_unique bunun üçün API-də təqdim olunan metoddur. Bu fərq komandaların model üzərində işləyərkən hansı elementlərin birlikdə dəyişdiyini izləməsinə kömək edə bilər.
Vizuallaşdırma komandaları və plugin tərtibatçıları üçün də əsas məqam düzgün instansın və düzgün tərifin seçildiyini yoxlamaqdır. Mənbələrdə konkret avadanlıq tələbi, performans ölçümü və ya lisenziya şərti göstərilmir. Nəzərə alınmalı konkret məsələlər istifadə olunan SketchUp versiyasının müvafiq metodu dəstəkləməsi və daha yeni versiyalı fayllar yüklənərkən mənbə faylın qorunmasıdır.
Tez-tez edilən səhvlər
Digər instansların da dəyişə biləcəyini nəzərə almadan instansın paylaşılan tərifini redaktə etmək.
Kodun ilk ComponentInstance obyektini tapdığını unudub, konkret obyektin seçildiyini güman etmək.
Tərif təyin etməklə mövqe transformasiyasını dəyişməyi eyni əməliyyat hesab etmək.
Manifold şərti olan həndəsi metodları hər komponentdə işləyəcəkmiş kimi istifadə etmək.
DefinitionList üzərində dövr edərkən eyni kolleksiyadan element silmək.
Daha yeni model yükləndikdən sonra mənbə faylın üzərinə yazmamaq barədə xəbərdarlığı nəzərə almamaq.
Mənbələr
3 mənbəMənbə mətnləri yenidən dərc edilmir; qısa sitatlar işarələnir, qalanı bizim xülasə və şərhimizdir.
Türkiyədəki memarlıq və vizuallaşdırma ofisləri üçün bu yanaşmanın praktik faydası təkrarlanan elementlərdə ümumi dəyişikliklə fərdi redaktəni bir-birindən ayırmaqdır. Komanda daxilində model təhvil verilərkən komponentin hansı tərifdən istifadə etdiyini yoxlamaq gözlənilməz kütləvi dəyişikliklərin qarşısını almağa kömək edə bilər.
Bu təlimatdakı API metodları avadanlıq tələbi və ya lisenziya xərci barədə məlumat vermir; bu məsələlər üçün məhsul və versiya şərtləri ayrıca yoxlanmalıdır. Ofislər üçün əsas prioritet istifadə olunan SketchUp versiyası ilə API uyğunluğunu təsdiqləmək və daha yeni fayllar yüklənərkən mənbə nüsxəni qorumaq olmalıdır. Ən asanlıqla gözdən qaça bilən məqam paylaşılan tərifi dəyişməzdən əvvəl dəyişikliklərin əhatə dairəsini yoxlamaqdır.
Tez-tez verilən suallar
SketchUp-da ComponentInstance ilə ComponentDefinition arasındakı fərq nədir?
ComponentInstance modeldə yerləşdirilmiş komponent instansıdır və ComponentDefinition obyektinə istinad edir. İnstansın mövqeyi transformasiya məlumatı ilə müəyyən olunur.
SketchUp Ruby API-də bir komponent instansını necə müstəqilləşdirmək olar?
ComponentInstance üzərində make_unique metodundan istifadə etmək olar. Sənədlərdə qeyd olunur ki, bu metod instans üçün digər instansların paylaşmadığı yeni tərif yaradır.
Daha yeni SketchUp faylını Ruby API ilə yükləyərkən nələrə diqqət etmək lazımdır?
2021.0 versiyasından başlayaraq load metodunda allow_newer seçimi mövcuddur. Daha yeni fayldan bəzi məlumatlar ötürülməyə biləcəyi üçün mənbə faylın üzərinə yazmamaq tövsiyə olunur.



