Utilizzare e visualizzare solo una parte delle curve

dai non ti sminuire, lo so che quando vuoi il RhinoCommon e altri assi dalla manica li tiri fuori :wink:

Ciao

sbirciando nella documentazione di rhinocommon ho trovato la classe CustomCurveObject.
Penso sia un ottimo punto di partenza.

Sergio

PS

quanto detto da Vittorio è giusto: bisogna scrivere e dedicare tutto il tempo che serve. Quanto tu chiedi la McNeel lo potrebbe realizzare senza alcuna difficoltà e se riesci a motivarne l’utilità sono sicuro che lo implementeranno.

Grande Sergio ! :grinning:

Bella idea ! … Bisogna fare una prova … va beh, poi … :wink:

Grazie per la drittta !
Ciao

sottoscrivo quanto detto da Emilio :+1:

Sergio potresti postare il link dove hai trovato l’esempio del codice? io non ci sono riuscito.
ps ma come faccio ad usare RhinoCommon?

Ciao Salvio

A me sembra che Sergio abbia parlato di classe, non di codice.
La classe e’ qui:

https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_DocObjects_Custom_CustomCurveObject.htm

Salviooooooo !
Dopo tutti i ghirigori che hai fatto in passato sulle classi, sulle instanze, metodi, proprieta’ e compagnia bella …
Adesso non dirmi che non sai come usare una classe !

:rofl::rofl:

All’inizio scrivi

import Rhino

… e vai … :smile:

Piccolo esempio:

import Rhino

def main():
  gob = Rhino.Input.Custom.GetObject()
  gob.SetCommandPrompt( 'Fillet curves ?' )
  gob.AcceptNothing( True )
  gob.GeometryFilter = (
      Rhino.DocObjects.ObjectType.Curve |
      Rhino.DocObjects.ObjectType.EdgeFilter )
  gob.GetMultiple( 0, 0 )
  res = gob.Result()
  if res == Rhino.Input.GetResult.Object:
    obrefs = gob.Objects()
  elif res == Rhino.Input.GetResult.Nothing:
    return
  for obref in obrefs:
    cur = obref.Curve()
    tolr = 0.5
    ok, arc = cur.TryGetArc( tolr )
    nur = arc.ToNurbsCurve()
    pts = [ cp.Location for cp in nur.Points ]
    Rhino.RhinoDoc.ActiveDoc.Objects.AddPolyline( pts )
  Rhino.RhinoDoc.ActiveDoc.Views.Redraw()

main()

( se clicchi su uno o piu’ archi, vedi cosa fa, ma non e’ questo il punto …
E’ solo un esempio di script che usa RhinoCommon )

Ciao !

EDIT:

Ah … tieni conto del fatto che RhinoCommon e’ una libreria .NET, nata per C# e VB.net
per cui nella documentazione puo’ esserci qualche differenza di sintassi rispetto a Python,
almeno quando non e’ presente della documentazione specifica per Python …
Tu fai come se fossero classi e attributi Python.
Per problemi specifici … ci si vede qui sul forum … :slight_smile:

ho provato ma credo di avere dei problemi nel registra storia, per ora è negativo

Calma con tutto questo entusiasmo … non si tratta di scrivere una sequenza di istruzioni. Si tratta di definire una classe derivata con tutte le sue complessità. Con python penso si possa fare ma io non mi voglio impegolare con questo linguaggio che non conosco e di cui non sono interessato.

https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_DocObjects_Custom_CustomCurveObject.htm

Di primo acchito aggiungerei alla classe derivata un oggetto Curve dove andrei a memorizzare i dati della curva di riferimento e due valori double corrispondenti al dominio da visualizzare (che poi sarà proprio la curva custom!).
Seguirà una programmazione degli eventi Ondraw, OnTransform ecc. ecc.
Pensando alle dinamiche all’interno di rhino la classe dovrà prevedere appositi comandi per la modifica dei dominio, gestire la copia e cancellazione nonché le trasformazioni quali move, rotate, scale ecc… che dovranno aggiornare la curva di riferimento.
E’ un lavoro complesso ma se il risultato è soddisfacente … :sunglasses::sunglasses::sunglasses:

Sergio

innanzitutto, ringrazio a tutti per tutto quello che avete postato :+1:

ps cercando cercando ho trovato questo forum, una vecchia versione della McNeel?
http://rhino1191.rssing.com/chan-59141030/all_p83.html

potrebbe essere utile?

pensandoci bene, bastarebbe prendere lo stesso codice usato per programmare i componenti GH

ahahahahah :blush:

abbè ma c’è un abisso di differenza tra le classi di Beri e quella menzionata da Sergio no?

tipo: mi è stato consigliato di cercare “DisplayConduit” e di dover usare Common

prendendo l’esempio di questo link, come faccio ad usare i codici mostrati?

Li’ Dale spiega cos’e’ e cosa fa il conduit.
Ma gli esempi sono in C# .

Forse e’ meglio provare con cose come questo:

https://developer.rhino3d.com/api/RhinoCommon/html/M_Rhino_Display_DisplayConduit_PreDrawObjects.htm

In fondo c’e’ l’esempio in Python.

Oppure questo:

che e’ un esempio piu’ breve …

In che senso ?

questo dico, il C# in Rhino tranne che in GH non si può programmare quindi.

https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_DocObjects_Custom_CustomCurveObject.htm
Emilio nel link messo sopra che aveva suggerito Sergio viene riportato come linguaggio C# e VB
lo posso utilizzare lo stesso in Python usando la sintassi tipo:
“Class CustomCurveObject(Curve):”
e continuo creando funzioni e usando metodi già elencati giusto?

… puoi anche scaricare il visual studio (versione free) e programmare in c#, VB o C++ …

Ciao ragazzi.

RhinoCommon e’ nata per C# e VB, quindi a volte non e’ riportata la sintassi Python.
Ma quello che conta sono le classi con relativi metodi e proprieta’.
E per queste i nomi non cambiano.

Per usare la classe CustomCurveObject per quello che vuoi fare,
come ci ha spiegato Sergio, devi derivarci una classe e poi andare a modificarla.

Certo, se non hai mai usato RhinoCommon, mi sembra un po’ tosto partire con queste cose …
Forse sarebbe meglio prima prenderci la mano con argomenti piu’ semplici … non so … :confused:
Vedi tu … :slight_smile:
( Per quel che vale … io ci ho messo un po’ per trovarmi a mio agio con la documentazione di RhinoCommon… c’e’ parecchia roba e non e’ immediato capire dove cercare … )

Si’, @Sergio_Alessi , e’ vero. Ma se non sbaglio per Rhino ci fai solo i plug-in … che sono piu’ laboriosi da sviluppare rispetto a uno script.
Anche a me piacerebbe che ci fossero gli script in C# per Rhino … visto che in GH funzionano, forse non ci vorrebbe molto … boh … :confused:

ma giusto per curiosità:
ipotizzando di creare un plug-in scritto in C#
poi come si farebbe a farlo leggere da Rhino?

Forse basta trascinare il file sopra a Rhino.
Se no col comando PlugInManager.

… Se non dimentico qualcosa, come sempre … :roll_eyes:

quindi in teoria Rhino è in grado di leggere codici C#
ma non ha la possibilità di farli scrivere come PY VB

Per “file” intendevo il plug-in compilato, non le istruzioni C# … forse non era chiaro …

Scusa Sergio … una curiosita’, a proposito di plug-in.

I plug-in in C++ sono piu’ veloci rispetto a quelli in C# ?
Perche’ non ho ancora capito se il C# alla fine e’ interpretato o compilato in file eseguibile … ecc. ecc. :confused:
Meglio chiedere lumi … :slight_smile:

Grazie !

Ciao Emilio

è vero. Se devi eseguire delle istruzioni lo script è la cosa più semplice da realizzare e da modificare al volo. Però tieni presente che il plugin lo puoi eseguire da Visual Studio in modalità debug così da monitorare il suo comportamento all’interno di rhino … :sunglasses:

C# non è compilato ed è molto similare al Java. In merito alla velocità di esecuzione dipende dalla mole di dati da elaborare … ho visto diversi benchmark tra i due linguaggi e non mi sembra ci siano grandi differenze tenuto conto della velocità dei pc moderni. C++ è più veloce ma il linguaggio è più ostico. La gestione della memoria in c# è automatica … e tu che sai programmare in C comprenderai come ti semplifica la vita.

Sergio

1 Mi Piace