Sketchup e Ruby: la classe Edges
Proseguendo con il terzo capitolo del libro di Mattew Scarpino, a cui facciamo riferimento, diamo uno sguardo alla classe Edges, la più semplice: possiamo iniziare a scribacchiare un po’ di codice.
Il percorso interrotto
Dopo qualche mese di interruzione, ho ripreso ad occuparmi di Sketchup dal punto di vista del suo linguaggio di Scripting: Ruby. Per me è talmente affascinante da pensare che un giorno modelleremo direttamente via codice!
Siamo giunti al capitolo 3 del libro di Mattew Scarpino, coscienti che si tratta di un testo obsoleto per i più esperti, ma capace comunque di catalizzare risorse e suscitare quella curiosità che porta a "fare ricerca".
Per seguire i post precedenti ti suggerisco di leggerli dall'inizio, se ti va e magari hai scoperto questa pagina solo ora. In questa sezione trovi tutti gli articoli dedicati a Ruby per sketchup.
Il più semplice tra gli elementi di disegno
Delle molte classi “Drawingelement”, la più facile da capire è la “Edge”, che rappresenta il segmento di linea tra due punti.
Gli oggetti Edge vengono creati con il metodo add_line, seguita dalle coordinate dei punti iniziale e finale. Quando invochi questo metodo, SketchUp traccia una linea tra i due punti e aggiunge l’elemento alla lista delle entità nel modello corrente.
Ad esempio, il comando seguente crea un segmento che si estende da [5, 0, 0] a [10, 0, 0]:
Sketchup.active_model.entities.add_line [5, 0, 0], [10, 0, 0]
La maggior parte dei metodi nella classe Edge rientra in una delle due categorie:
- metodi che configurano l'aspetto di Edge;
- metodi che accedono agli oggetti connessi all'Edge;
I metodi nella prima categoria configurano la visibilità del segmento nella finestra di progettazione. In aggiunta al metodo “Hidden”, fornito dalla classe “Drawingelement”, Edge fornisce anche i metodi Smoth e Soft.
È importante ricordare la differenza tra una linea nascosta e una linea “morbida”. La linea morbida consente l’unione di superfici adiacenti in un’unica superficie (solitamente curva), mentre una linea nascosta non altera le superfici adiacenti.
Nella seconda categoria, il metodo “all_connected” restituisce un array di tutti gli oggetti Entity collegati a Edge. Allo stesso modo, il metodo “faces” restituisce un array contenente gli oggetti Face collegato a Edge.
In SketchUp, i punti finali di un segmento o bordo, sono rappresentati da oggetti Vertex. La classe Edge contiene una serie di metodi che interagiscono con loro:
- vertices - restituisce un array dei due oggetti Vertex di Edge;
- start / end: restituisce gli oggetti Vertice iniziale / finale di Edge;
- other_vertex - dato uno degli oggetti Vertex di Edge, questo metodo restituisce l'altro;
- used_by? - identifica se un Vertex è connesso all'Edge;
Esistono due metodi nella classe Edge che non rientrano in nessuna delle categorie: length e split. Il primo restituisce la lunghezza del segmento di linea corrispondente al bordo. Il secondo accetta un punto sulla linea e crea un secondo oggetto Edge. Dopo aver ottenuto la divisione, il primo segmento continua solo fino al punto dato e il secondo continua dal punto dato alla fine della riga originale. I seguenti comandi mostrano come questi metodi vengono richiamati in pratica:
line = Sketchup.active_model.entities.add_line [0, 0, 0], [6, 3, 0]
line.length
new_line = line.split [4, 2, 0]
line.length
line.start.position
line.end.position
new_line.start.position
new_line.end.position
Questo il resoconto dell’editor:
Cleared the editor
Running the code...
Done running code. Ruby says: ~ 170 mm
Running the code...
Done running code. Ruby says: ~ 114 mm
Running the code...
Done running code. Ruby says: (0 mm, 0 mm, 0 mm)
Running the code...
Done running code. Ruby says: (101.6 mm, 50.8 mm, 0 mm)
Running the code...
Done running code. Ruby says: ~ 57 mm
Running the code...
Done running code. Ruby says: (152.4 mm, 76.2 mm, 0 mm)
La Figura 1 mostra graficamente i risultati. L'oggetto Edge originale viene diviso, come noto.
Approfondimenti
A questo link trovi la documentazione su Sketchup e Ruby, vero punto di riferimento per chi desidera programmare in Ruby con Sketchup. Ti ricordo anche l'ottimo irrinunciabile forum dedicato.
Nei prossimi appunti ci addentreremo nel codice cercando di capire come funzionano le altre entità importanti come gli archi, i cerchi e i poligoni.
Scrivi nei commenti, fammi sapere se stai seguendo questa serie di appunti. Segnala anche se ho commesso qualche errore… non mi offendo, anzi, mi dai una mano a condividere. Alla prossima!
Comments