Componente EditPoint

stavo vercando in rete se coi componenti standard di Gh ci fosse un’alternativa di questo componente:
“Curve Edit Points” (Pufferfish)

edit

e mi sono imbattuto in questo post, dove la def di Emilio non si riesce a scaricare
ed il link della foto ti fa collegare ad un sito “vietato ai minori” con avviso antivirus

comunque io non sono riuscito a trovare un componente standard preposto

se ho afferrato bene ciò che dice Rutten, è complicato perché può dare problemi tale componente. . . .

ps @emilio per caso hai usato qualche script?

Credo sia questa:

uniform.gh (7,5 KB)

E … si’, contiene uno script in Python.

Cosa fa ?
Restituisce gli edit points ?

Se sono i Greville points, credo si riesca a ricavarli usando componenti standard (non uno solo, pero’).
Adesso non ricordo come si fa, devo cercare informazioni … :confused:
Forse Fabio se lo ricorda al volo, come calcolare le Greville abscissae … :slight_smile:

Se vuoi puoi fare tu una ricerca. Da qualche parte c’e’ sicuramente la formula per Greville abscissae / Greville points.

1 Mi Piace

Mi hai preso per Pico della Mirandola? :joy:
Tra poco non mi ricordo neppure più come mi chiamo. :thinking:

4 Mi Piace

eeee infatti avevo cercato anche nell’altro forum ma gli esempi trovati usavano comunque uno script C#

il primo fu Emilio adesso Fabio anche tu, quindi non’é il caso che mi spaventi,
essendo che credo di essere sulla buona strada anch’io ahahahah :rofl: :rofl:

ps farò un’ulteriore ricerca nel caso di qualche reminiscenza “ricordatevi di me” :sweat_smile:

edit:
https://it.discourse.mcneel.com/t/nurbs-curve
https://it.discourse.mcneel.com/t/curve-di-bezier

non so se siano argomenti utili per lo scopo o trattano tutt’altro. . . .

ragazzi forse mi sa che la soluzione era più semplice di quanto pensassi (se non dico erro)

in pratica il componente “Curve Edit Points” (Pufferfish) ha anche input K che ti fa scegliere se vuoi visualizzare i punti di controllo come il comando di Rh “EditPoint” oppure solo i Knoth
nel caso correggetemi: che corrispondono agli stessi punti di quando si usa il comando CrvInterp,
in questo caso mi dovrebbe andare bene comunque output K del componente ControlPoints

(non ricordo se fin’ora mi era sfuggita questa cosa o non gli avevo dato la giusta importanza)
i punti messi con CrvInterp equivalgono ai nodi della curva è corretto?

Per i Greville points, credo che la prima frase qui …

… dica quello che ci serve (sempre se non prendo farfalle :confused:)
Direi che in pratica sono valori medi di sequenze di nodi (consecutivi), prendendo ogni volta un numero di nodi pari al grado.

A fare ‘sta cosa con GH, pero’, non so se ci riesco.
Magari la lascio agli esperti … :confused:

Questo non lo so: forse si puo’ fare qualche prova …

EDIT

Ho parlato di points e poi sono saltato ai parametri.
Ovviamente la procedura ci da’ i valori del parametro corrispondente ai vari punti …

Tentativo di ottenere i Greville points senza utilizzare l’apposito e comodissimo metodo RhinoCommon … :confused: :smile:

greville.gh (11,8 KB)

2 Mi Piace

grazie Emilio, la proverò subito. (e sono fiducioso che funziona bene)
essendo che come poi ho riscontrato per la prova che sto facendo: “mio tentativo stabilizzare curvatura”
(che adesso aggiornerò) alla fine oltre ai Knoth ho notato che mi servivano invece proprio gli EditPoints.

ps rispondendo alla domanda, mi chiedevo più che altro se esisteva un componente base apposito. . . .
(come mai una funziona da non sottovalutare l’ha realizzato Pufferfish e non’é un componente base?)

Ciao

il calcolo della coordinata parametrica degli edit points
è molto semplice. E’ il valore medio di gruppi di knot
in numero pari al grado della curva presi in successione …
più facile da spiegare con alcuni esempi:

Curva grado 3
Vettore knots 0,0,0,1,1,1
EP(0)= (0+0+0)/3 =0
EP(1)= (0+0+1)/3 = 1/3
EP(2)= (0+1+1)/3 = 2/3
EP(3)= (1+1+1)/3 = 3/3 = 1

Curva grado 4
Vettore knots 0,0,0,0,7,9,9,9,9
EP(0)= (0+0+0+0)/4
EP(1)= (0+0+0+7)/4
EP(2)= (0+0+7+9)/4
EP(3)= (0+7+9+9)/4
EP(4)= (7+9+9+9)/4
EP(5)= (9+9+9+9)/4

EDIT: Emilio aveva già dato la definizione … :sweat_smile:

3 Mi Piace

Ciao Sergio, grazie. :heart_eyes:
Quindi se la spaziatura dei nodi non è uniforme non ci sarà corrispondenza tra i GP e i nodi?
Domandone: perché usare proprio i GP per modificare la curva?

Edit: probabilmente ricordo male … ma il primo è l’ultimo nodo non andrebbero esclusi dal calcolo? :thinking:

Ciao Gambler

Esatto: alcuni punti di Greville coincidono con tutti i knot se uniformi.
Chiamandoli Greville non si capisce molto. Se invece li chiamiamo
punti di interpolazione si spiega perché vengono usati per editare le curve.

Non serve escludere il primo e l’ultimo nodo se si usa il vettore dei knot
nel formato di rhino (come quelli riportati negli esempi nel precedente post).

Sergio

2 Mi Piace

Vero! Me lo avevi già spiegato in un altro post.
Giuro che non me lo dimentico più. :blush:

Se cerchi un modo semplice di ottenere i Greville points, basta uno script con una sola istruzione:

image

Hint Curve sull’ingresso ‘c’.

A me sembra la norma con GH, a te no ?
Come componenti base GH(1) mi sembra ridotto all’osso … Per i soliti problemi di risorse di McNeel,
dato ovviamente il prezzo basso di Rhino. :slight_smile:

2 Mi Piace

:wink:

1 Mi Piace

Grazie Emy.
Il “vecchio” Dale. :heart_eyes:

2 Mi Piace

in effetti credo che a questo punto sia la soluzione più semplice e comoda :+1:
infatti forse per una sola riga avranno pensato che non ne valena la pena fare un componente apposito
(però potevano aggiungere un’altro output al componente ControlPoints)

a questo punto però una cosa non mi torna, in Rhino non si possono estrarre i nodi di una curva?
si possono estrarre i punti di controllo, i punti di modifica che sarebbero questi Greville ma non i nodi.
chissà forse l’intento era quello di non far usare i nodi per modificare la curva come mai. . . . ?

ps a dimenticavo ho provato la def e ovviamente funziona perfettamente tks :+1:

Gia’.
… Certo se Expression accettasse anche una espressione in Python … :confused: :thinking: :wink: :smile:

Io usavo ancora questo … :confused:

sub main
su=rhino.getobject("Curve or Surface ?",12,vbtrue)
if isnull(su) then exit sub
if rhino.issurface(su) then
  degu=rhino.surfacedegree(su,0)
  degv=rhino.surfacedegree(su,1)
  ks=rhino.surfaceknots(su)
  kus=ks(0)
  kvs=ks(1)
  tx="U (deg="&cstr(degu)&")"
  tx=tx&" "&formatnumber(kus(0),3)
  for i=1 to ubound(kus)
    tx=tx&" , "&formatnumber(kus(i),3)
  next
  rhino.print tx
  tx="V (deg="&cstr(degv)&")"
  tx=tx&" "&formatnumber(kvs(0),3)
  for i=1 to ubound(kvs)
    tx=tx&" , "&formatnumber(kvs(i),3)
  next
  rhino.print tx
elseif rhino.iscurve(su) then
  deg=rhino.curvedegree(su)
  kc=rhino.curveknots(su)
  tx="U (deg="&cstr(deg)&")"
  tx=tx&" "&formatnumber(kc(0),3)
  for i=1 to ubound(kc)
    tx=tx&" , "&formatnumber(kc(i),3)
  next
  rhino.print tx
end if
end sub

main

… Ricorda qualcosa ? :smile:

Se ricordo bene, a suo tempo a me era stato risposto proprio cosi’:
I nodi non sono considerati uno strumento per modificare le curve.

… Ma se uno proprio vuole … si puo’ sempre fare uno script o una def GH. :wink:

in che senso, avevi provato a collegare output di Gh-Py al componente Expression e non accetta input?

questo sicuramente, uno script a volo e ci si toglie il pensiero anche se in pratica comparando anche Gh e come quando nel componente CrvInterp gli si vanno a dare i punti per creare la curva intepolata, ma a questo punto diventa una nuova curva. che come script sarebbe fattibile usando istruzione Replace ma che a quel “punto” è diverso da prendere per esempio il punto di modifica spostarlo e modificare la curva o sbaglio?

non so se l’intuizione sia giusta, ma di primo acchitto mi è venuto in mente tutte le domande che all’inizio di quando io mi iscrissi facevo, su come si scrivessero i codici con Rscript. io che non ne sapevo nulla e tu insieme a Lucio con “moltissima” pazienza cercavate in tutti i modi di spiegarmi cose che per me erano e “sono” esoteriche (un’ultimo argomento aperto >ciclo for< tanto per citarne uno abbastanza fresco fresco) per poi appunto passare a Py ed ancora Gh-Py giusto per non complicarmi troppo la vita ahahahah ahahahah

:rofl: :rofl: :joy:

(bei vecchi tempi, quante risate)

edit:
chi ti ha detto che i nodi non sono cosiderati strumento per modificare le curve mi sa che aveva ragione.
ho provato il tuo script ed ri-provato col componente “Curve Edit Points” in Gh ed in effetti si comportano nello stesso modo (non avevo dubbi) ma la sorpresa è stata la differenza d’uso tra CrvInterp e CrvNurbs

ps ma le variabili? :smile:

Nel senso di scrivere nel componente Expression una espressione tipo:

Python( "x.GrevillePoints()" )

Cosi’ certo.
Ma CV e nodi sono cose diverse. i CV sono punti 3d (peso a parte) mentre i nodi sono dei numeri.
Con RhinoCommon credo che si riesca a fare uno script per spostare i CV interattivamente, anche se non avrebbe molto senso, dato che e’ una operazione che Rhino consente di fare normalmente.
Per modificare i nodi con uno script in modo interattivo credo ci si possano inventare diverse procedure quanto a interfaccia utente. E’ solo questione di fantasia … :grinning:

Scusa Salvio, cosa sono ?
Non trovo niente con questo nome tra comandi Rhino, componenti GH o metodi rhinoscript …
Dove devo guardare ? :slight_smile:

Eh … anche qui annaspo … :wink:
Di cosa stiamo parlando ?

nulla d’importante, nello script non erano dichiarate le variabili. abitudini di Py? :wink:

una prima curva quella di sopra è stata tracciata con il comando Curva Interpolata
la seconda curva quella di sotto è stata tracciata con il comando Curve per punti di Controllo (Nurbs)

i nodi di una curva realizzata per punti di controlli non ricreano la stessa curva come quella interpolata :thinking: