RigeneraCurve


#1

buongiorno a tutti è il mio primo post in questa community. premetto che sono alle prime armi con rhino e da poco mi sono avvicinato a grasshopper, spero di non fare da subito domande tropo strane :slight_smile:

la mia è una domanda per sapere se sia possibile utilizzando grasshopper, indicare un punto A e uno B di una curva in rhino, dove poter eseguire il comando AdattaCurve “_FitCrv” solo per la parte della curva compresa tra i due punti…

un grazie anticipatamente.


#2

facendo delle ricerche su questo forum mi sono imbatutto in questa discussione WISH: piccola aggiunta al comando “lunghezza” dove l’utente David parla della sua esigenza di sapere la lunghezza di una parte di curva, compreso tra il punto di inizio A e B fine.

in pratica è proprio ciò che intendevo io con il comando AdattaCurve “_FitCrv” con la differenza che a lui gli serviva per il comando Lunghezza “Length”.


#3

Ciao e benvenuto.

Non sono al computer in questo momento, ma se ho capito quello che vuoi ottenere dovresti poter procedere così:

  • Calcoli il parametro della curva corrispondente a ciascun punto ( ad es con closest point)
  • dati i due parametri estrai la sottocurva compresa tra i due punti con subcrv
  • applichi il comando fitcrv a questa sottocurva

Se riesco più tardi ti mando un esempio

Ciao
Marco


#4

ok grazie per la risposta marco.


#5

Ecco un piccolo esempio, era quello che cercavi?

GH-FitCrv-SubCrv.gh (7,4 KB)
GH-FitCrv-SubCrv.3dm (38,1 KB)


#6

grande grande marco era proprio quello che mi serviva fare, ed un doppio grazie ancora per la prima risposta che mi hai dato perchè con il comando “subcrv” che io non conoscevo nemmeno in rhino mi hai aperto un mondo tutto nuovo di possibili cose che ho in mente di fare :slight_smile:

ps un ultima cosa che vorrei chiedere sempre inerente allo schema di grasshopper che hai postato:
come faccio ora a sostituire quella porzione di curva con quella nuova creata con il comando “subcrv”?


#7

Immagino, ogni tanto con Rhino si scoprono delle cose nuove, e se comincerai ad usare Grasshopper vedrai che le potenzialità aumentano esponenzialmente!:slight_smile:

Io procederei così (vedi file allegato):

  • crei tre sottocurve:
    sottocurva 1 - dal punto iniziale al punto di partenza della sottocurva da modificare
    sottocurva 2 - la sottocurva da ricostruire
    sottocurva 3 - dal punto finale della sottocurva al punto finale della curva complessiva

  • ricostruisci la sottocurva intermedia come già visto

  • unisci le tre porzioni con Join

Un paio di note:

  • all’inizio della definizione di GH ho riparametrizzato la curva iniziale per essere sicuro che il dominio del parametro t vada da 0 a 1, in questo modo il punto iniziale e il punto finale corrispondono con certezza ai valori 0 e 1 rispettivamente
  • una volta calcolati i valori t dei due punti che delimitano la sottocurva, ho utilizzato Minimum e Maximum per determinare correttamente i domini delle altre due sottocurve indipendentemente dall’ordine in cui si considerano i punti stessi

GH-FitCrv-SubCrv-v2.3dm (39,2 KB)
GH-FitCrv-SubCrv-v2.gh (10,0 KB)


#8

ok grandioso marco grazie ancora adesso provo subito i file che hai postato e ti faccio sapere :slight_smile:

una cosa ti volevo chiedere essendo che ogni tanto ci sbatto la testa e quello che hai scritto me lo ha fatto ritornare in mente, appunto oggi pensavo a quale soluzione avresti adottato se dividere la curva in tre parti come appunto hai fatto, oppure avresti spezzato o suddiviso la curva con la subcrv per poi unirle.

te lo chiedo proprio perchè da tempo che in GH cerco di spezzare o suddividere due o più curve che si intersecano
ma non ho capito se sia una cosa possibile anche in GH come Rhino oppure mi sono buttato in un vicolo cieco . . . .
il massimo che sono riuscito ad ottenere sarebbe tramite i comandi di intersect un punto fra le intersezioni delle curve

spero di non aver perso tempo anche questa volta in una cosa che non è fattibile :sweat:
un grazie anticipato e un grazie ancora per le soluzioni che mi hai dato


#9

In questo caso i punti di intersezione erano proprio quelli di partenza, per cui calcolare l’intersezione era superfluo.

In generale se si deve dividere una curva con un’altra sicuramente si può partire dai punti di intersezione, poi da lì volendo si può fare lo split, ma dal punto di vista del calcolo trovare il parametro t e quindi le varie sottocurve è più efficiente.

Tra l’altro con l’operazione di split otterresti una lista di sottocurve in cui non è possibile sapere a priori quale sia l’ordine, quindi per determinare quale/i curva/e tenere occorre aggiungere degli step aggiuntivi, tipo confrontare le lunghezze, o la posizione, o le bounding box ecc.

Comunque ci sono anche altri comandi per fare questo tipo di operazioni, tipo Shatter, i vari componenti Region e altri, in alcuni casi potrebbero essere la soluzione migliore.

Diverso è il discorso se si ha a che fare con superfici, in questo caso, a meno di casi particolari, penso che fare lo split sia l’unica strada.