Prova di programmazione Rhino7

Salve a tutti,
mi sto cimentando nellla programmazione di rhino con l’obbiettivo di programmare grassHopper.
Installato visual studio 22
Installato i vari file in corredo a Rhino per interfacciarsi con VB.
Primo programma di prova testato (quello dentro gli esempi).
Pronto per affrontare il problema:
data una figura geometrica chiusa, devo disporre al suo interno una serie di cerchi di 4 misure differenti in modo causale con distanza fra i bordi dei cerchi di 0,4 mm. I cerchi più piccoli hanno preferenza limitrofa ai bordi interni e il resto dei cerchi, devono diminuire la frequenza via via che il raggio aumenta. Sembra tutto semplice alla portata mia ma anche di una qualsiasi AI che mi permette di velocizzare la stesura.
E qui incomicia il problema, il file modificato su VB da errore e i dubbi arrivano insieme.
Forse bastava un plug-in, ma anche un semplice script ?
Come faccio in grasshopper ad inserire un codice? Eppure ho letto almeno 2 libri e fatto un monte di esercizi!
Ho la sensazione di essermi incasinato il cervello per niente. mi date una mano ad uscirne.
Mi basterebbe una traccia da seguire o delle indicazioni pratiche.

Grazie mille

  1. per capire bene cosa intendi fare, aiuterebbe molto anche una bozza disegnata di cosa vuoi ottenere

  2. mentre per individuare il problema nel codice, bisognerebbe vedere cosa hai scritto, come e in che modo.


Eccomi,
Questo è il risultato finale …

hai scritto molte cose riguardo alla programmazione:

  • obiettivo programmare GH
  • installato Visual Studio 22
  • file corredo di Rhino
  • chiedi se bastava un plugin

scusa la domanda; ma per ottenere il risultato della foto, qual’era il tuo pensiero per ottenerlo?

in pratica, con i vari punti citati pocansi, li volevi combinare insieme? e nel caso come pensavi di farlo?

(scusa le domande iniziali ma giusto per capire prima il tuo risultato che vorresti avere, essendo
che in base a quello poi bisogna tracciare la strada di come devi muoverti, altrimenti è un caos)

Figurati, l’idea era di creare o un file grasshopper o un plugin o uno script perchè è un problema che mi si presenta spesso con forme e sterne ed interne completamente diverse. avere la parametrica di grassHopper era perfetto per nn rifare tutto da capo ogni volta.
Ora lo faccio in coreldraw ed’è una grande perdita di tempo

Questo era il listato iniziale poi passato da AI :sweat_smile:
Giusto per capire il flusso

// Creare un oggetto piano

Rect obj = Rect(0, 0, 100, 100);
// qui manca la scelta della forma chiusa

// Creare le variabili per le dimensioni dei cerchi

double circle_diameters = {2, 3.1, 5, 7};

// Calcolare la distanza tra due cerchi adiacenti

double circle_spacing = 0.4;

//NB attenzione perché lui prende il centro del cerchio… dopo correggere in base al diametro del cerechio +0.4

// Creare un numero approssimativo di cerchi

int num_circles = obj.Area() / circle_spacing

// ciclo sul processo di posizionamento dei cerchi

for (int i = 0; i < num_circles; i++)

// Generare un valore casuale da 0 a 3(0 è il primo ciclo), che rappresenta l’indice del cerchio da utilizzare

int circle_index = Random.Discrete(circle_diameters.Length)

double circle_radius = circle_diameters[circle_index] / 2

Point pos = Random.Uniform(obj.MinPoint, obj.MaxPoint)

Circle circle = Circle(circle_radius)

// Verificare se il centro del cerchio è all’interno di una certa distanza dal bordo dell’oggetto

if (DistanceTo(circle.Center, obj.MinPoint) < circle_radius) { circle_index = 0; }

else if (DistanceTo(circle.Center, obj.MaxPoint) < circle_radius) { circle_index = 3; }

// Posizionare il cerchio all’interno dell’oggetto, assicurandosi che sia posizionato a una distanza sufficiente l’uno dall’altro

bool circle_placed = false; for (int j = 0; j < i; j++)

if (Distance(circle.Center, circles[j].Center) > circle_spacing) { circles.Add(circle);

circle_placed = true; break; } }

// Se il cerchio non può essere posizionato, termina l’iterazione

if (!circle_placed) { break;

effettivamente ora sono nel CAOS PIU’ TOTALE

Direi che una definizione GH con uso di Kangaroo sia in grado di risolvere il problema… con buona pace di AI

sulla IA, IO ci sto lontano, già mi incasino da solo, figuriamoci chiedendolo a lei. . .
(personalmente credo che al momento può aiutare nelle cose semplici e ripetitive ma a chi lo sa già fare)

detto questo, al tuo posto resetterei tutto ed inizierei da capo
da quello che ho visto del risultato finale che vuoi ottenere
mi concentrerei soltanto su Gh, tutto il resto lo puoi lasciare

(ha risposto prima Giuseppe :blush:)

Anche con OpenNest.

Grazie mille, resetto tutto e passo solo da GH… o almeno ci provo.

grazie ancora

1 Mi Piace

ciao, sto provando a farlo ma vado moooolto lento … un aiutino o questo file di esempio ?
Scusami !

OpenNest non è il massimo della velocità, dipende dal contenitore e dal numero delle forme da inserire.
Con Kangaroo si risolve velocemente.
Posto anche un adattamento di un un esempio trovato sul web.
Se cerchi su Google ”circle in circle packing grasshopper”, in tutte le lingue, trovi molti esempi. (anche sul Forum)
OpenNest.gh (7,8 KB)
circle-in-circle-packing.gh (27,7 KB)

img1

Un esempio di Circle-Packing con Kangaroo2.
Qui hanno tutti la stessa dimensione e puoi provare a muovere i punti direttamente dalla vista superiore di Rhino.
CirclePackSameRadius.gh (17,1 KB)

Si tratta di circa 150 cerchi per ogni disegno. Il disegno è di circa 33 cm.

Grazie e mi muovo subito

Grazie Giuseppe.

Provo anche questa

ma perchè mi continua a dare :
Neither the document nor the active object have been set. This Bake operation was pointless.
quando cerco di fare il Bake per la curva di riferimento.
Casualmente me lo ha preso solo una volta quando l’ho fatto diventare solido , ma perchè !!! :sleepy:

SalVe, esiste un comando tipo “seleziona” che mi permettere di scegliere tutti, per esempio, cerchi di diametro 2 mm ?

le varie guide mi dicono di si, ma non ci riesco. Mi serve per cambiare il livello a seconda della misura. Selezionare tutti i350 cerchi sparpagliati in modo casuale, sarebbe molto utile