Utilizzare e visualizzare solo una parte delle curve

ma in visual studio programmando in C# come si avrebbe il riscontro che il codice scritto funziona?
se poi è esterno da Rhino?

iniziamo a selezionare la curva:

import rhinoscriptsyntax as rs
from scriptcontext import doc
import Rhino
import System
import System.Drawing

def RunCommand():
  gs = Rhino.Input.Custom.GetObject()
  gs.SetCommandPrompt("select")
  gs.GeometryFilter = Rhino.DocObjects.ObjectType.Surface.Curve
  gs.DisablePreSelect()
  gs.SubObjectSelect = False
  gs.Get()
  if gs.CommandResult() != Rhino.Commands.Result.Success:
    return gs.CommandResult()

RunCommand()

come si dice: ogni viaggio, inizia con un piccolo passo :wink:

OK :slight_smile:

… adesso provi a utilizzare la curva selezionata ? :slight_smile:

eeee tra il dire e il fare,
se trovo qualche esempio sul dominio forse
riuscirei a capire un pochino come muovermi

li vendono cari questi esempi di C#

Non parlavo di dominio.
Dicevo che nello script che hai postato non salvi nessun riferimento alla curva.
Poi certo, una volta che hai la curva, puoi anche ricavare il dominio … come dici giustamente … un passo alla volta. :slight_smile:

Stiamo parlando di Python, no ?
Perche’ non cerchi gli esempi in rhinoscriptsyntax.py ?

quelli di python sono ok li trovo ovviamente
e quando si parla di rhinocommon o c# che vado in difficoltà
non trovo gli esempi di codice etc

https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_DocObjects_Custom_CustomCurveObject.htm
nel caso del link sopra come posso usare la classe suggerita da Sergio?

python ha la propria guida come vbs con la quale grazie a te e a Lucio ho realizzato i miei script
ora invece trovo e leggo classi metodi proprietà ma nulla, nessun esempio di codice per capire la sintassi

di sicuro mi manca qualche tassello, anzi parecchi…

Io ti parlavo appunto di esempi di Python con RhinoCommon.
E per questo, secondo me, puo’ essere utile andarsi a vedere come in McNeel hanno scritto rhinoscriptsyntax.
Ci trovi tutte le funzioni che usiamo con “rs”, scritte ovviamente usando RhinoCommon.

giusto per fare un esempio Emilio
questo codice lo modificato dalla guida di python con rhinoscriptsyntax

import rhinoscriptsyntax as rs
id = rs.GetObject("Select a curve")

if id:

    point1 = rs.GetPointOnCurve(id, "Pick a test point")
    point2 = rs.GetPointOnCurve(id, "Pick a test point")

    if point1 and point2:

        param1 = rs.CurveClosestPoint(id, point1)
        param2 = rs.CurveClosestPoint(id, point2)
        print "Curve parameter:", str(param1) + " - " + str(param2)

quindi in teoria seleziono la curva scelgo i due punti della curva che mi interessano
e fin qui tutto chiaro come tanti altri script fatti con vbs

ora per ottenere il risultato che mi serve, come suggerito dovrei usare “CustomCurveObject”
riassumento ho selezinato la curva indentificato i due punti (dominio) sulla curva
adesso come usufruisco di “CustomCurveObject”?

l’intenzione sarebbe quella di indicargli che bisogna visualizzare il dominio compresa tra i due punti
le parti esterne non dovrebbero essere visualizzate o usufruite ora non so cosa si possa fare…

Beh … ti ho gia’ detto come la vedo io.

Prima abituarsi ad usare RhinoCommon e capire un po’ come funziona.
Dopo arrivare a fare quello che diceva Sergio con la classe CustomCurveObject.

Ma e’ una cosa che richiede del tempo.
Se hai molta fretta, credo che l’unica cosa sia commissionare il lavoro a qualcuno.
( E io non saprei a chi rivolgermi, spiacente. :slight_smile: )

capisco quello che dici ma io posso avere tutto il tempo possibile
ma se non ho esempi col quale lavorare non arrivo a nulla.

Se vuoi posso anche postare uno o due dei miei scriptini …
Ma direi che e’ meglio imparare da cio’ che scrivono in McNeel, no ? :slight_smile:

mi sa che per il " Display Conduit" bisogna dimenticarselo

Emilio figurati ogni aiuto è più che ben accetto
anzi vedere come hai impostato la sintassi, di sicuro mi aiuterà a capire meglio :+1:

Scusa, ma sono curioso e testardo …

Perche’ non vuoi imparare da rhinoscriptsyntax ? :slight_smile:
Oltre tutto il fatto che tu sai gia’ cosa fanno le varie funzioni mi sembra un bell’aiuto, no ?

ad esempio, tu sai cosa fa rs.AddLine(), vai a vederti come e’ scritta:

def AddLine(start, end):
    """Adds a line curve to the current model.
    Parameters:
      start, end (point|guid) end points of the line
    Returns:
      guid: id of the new curve object
    Example:
      import rhinoscriptsyntax as rs
      start = rs.GetPoint("Start of line")
      if start:
          end = rs.GetPoint("End of line")
          if end: rs.AddLine(start, end)
    See Also:
      CurveEndPoint
      CurveStartPoint
      IsLine
    """
    start = rhutil.coerce3dpoint(start, True)
    end = rhutil.coerce3dpoint(end, True)
    rc = scriptcontext.doc.Objects.AddLine(start, end)
    if rc==System.Guid.Empty: raise Exception("Unable to add line to document")
    scriptcontext.doc.Views.Redraw()
    return rc

… E inizi a capire quancosa su come si fa ad aggiungere un oggetto al documento Rhino.
Vedi che usa coerce3dpoint() e allora vai a vedere com’e’ scritta anche lei …
Usa anche scriptcontext, ti guardi anche quello …
Eccetera eccetera …
E poco per volta impari sempre piu’ cose su RhinoCommon.

C’e’ qualcosa che non ti torna ? :slight_smile:

magari, ma si era detto che bisognava passare obbligatoriamente per rhinocommon o sbaglio?

Appunto. rhinoscriptsyntax e’ scritta in RhinoCommon … o sbaglio ?
:smile:

iniziamo bene :smiley:

1 Mi Piace

giusto per capire:

partial class Examples
{
  static MyConduit m_conduit;
  public static Result DisplayConduit(RhinoDoc doc)
  {
    // The following code lets you toggle the conduit on and off by repeatedly running the command
    if (m_conduit != null)
    {
      m_conduit.Enabled = false;
      m_conduit = null;
    }
    else
    {
      m_conduit = new MyConduit { Enabled = true };
    }
    doc.Views.Redraw();
    return Result.Success;
  }
}

class MyConduit : Rhino.Display.DisplayConduit
{
  protected override void CalculateBoundingBox(CalculateBoundingBoxEventArgs e)
  {
    base.CalculateBoundingBox(e);
    e.BoundingBox.Union(e.Display.Viewport.ConstructionPlane().Origin);
  }

  protected override void PreDrawObjects(DrawEventArgs e)
  {
    base.PreDrawObjects(e);

    var c_plane = e.Display.Viewport.ConstructionPlane();
    var x_color = Rhino.ApplicationSettings.AppearanceSettings.GridXAxisLineColor;
    var y_color = Rhino.ApplicationSettings.AppearanceSettings.GridYAxisLineColor;
    var z_color = Rhino.ApplicationSettings.AppearanceSettings.GridZAxisLineColor;

    e.Display.PushDepthWriting(false);
    e.Display.PushDepthTesting(false);

    e.Display.DrawPoint(c_plane.Origin, System.Drawing.Color.White);
    e.Display.DrawArrow(new Line(c_plane.Origin, new Vector3d(c_plane.XAxis) * 10.0), x_color);
    e.Display.DrawArrow(new Line(c_plane.Origin, new Vector3d(c_plane.YAxis) * 10.0), y_color);
    e.Display.DrawArrow(new Line(c_plane.Origin, new Vector3d(c_plane.ZAxis) * 10.0), z_color);

    e.Display.PopDepthWriting();
    e.Display.PopDepthTesting();
  }
}

questo è uno dei rari codici che utilizza “DisplayConduit”
avevo pensato di inserirlo nel componente C# di GH
mi potreste aiutare a farlo funzionare non ho idea di come fare ??

No … :smile: :wink:

Perche’ non provi con un esempio in Python in uno script di Rhino ?