Rhino Fillet e RCommon Fillet

Dipende da come intendi “fosse”.
Come utilizzatori spesso ci serve considerarle come linee.
Ma con molti comandi Rhino possiamo selezionare le linee quando il comando chiede una curva, quindi a volte ci fa comodo che siano considerate delle curve.

Poi c’e’ il punto di vista … da scriptomane.
E qui devi ragionare sugli oggetti RhinoCommon, controllare e verificare che tipo hanno i vari oggetti che utilizzi nello script.
Non presumere che abbiano quel certo tipo, ma verificare:wink:

Quali dettagli ? :slight_smile:

… E dici che non cerchi i casi limite ? :confused: :smile: :smile:

Secondo me … non e’ che debba fare tutto RhinoCommon. Se vuoi evitare quei casi, come fa il comando Rhino, inserisci il tuo bel controllo sulle linee prima di usare quel metodo.
Inoltre resto del parere che basare un programma (script) sul comportamento della libreria in un caso limite e’ un pessimo modo di fare.

Scritto cosi’ non ha molto senso.
Confronti un oggetto con una classe (Struct in C#).

Prova a usare isinstance oppure type

questo era perché doveva servire per quello che sto facendo
ma se può capitare questo caso limite che mi torna True non va bene
mi sa che c’é bisogno di un’alro controllo. se non erro esiste un controllo di linee parallele?

eeee su questa cosa ti do ragione, diciamo che tendo a dare per scontato
che alcune cose debbano già andare o essere fatte in un certo modo
quindi mi carico di aspettative per in genere non sono veritiere.

1 Mi Piace

Un modo potrebbe essere …
Dalle linee ricavi i vettori con Direction
Poi verifichi l’angolo tra i vettori con VectorAngle

    crv0 = go.Object(0).Geometry()
    crv1 = go.Object(1).Geometry()
    if not crv0 or not crv1: return Rhino.Commands.Result.Failure
 
    line0 = crv0.Line
    line1 = crv1.Line
    v0 = line0.Direction
    v0.Unitize()
    v1 = line1.Direction
    v1.Unitize()
 
    if v0.IsParallelTo(v1)!=0:

forse con questa soluzione si risolvono due problemi
appunto quella di verifica le due linee rette parallele

e come dicevamo prima, la distinzione tra una Linea e una LineaCurva
le prime due righe prendono due LineeCurve
ma usando crv0.Line le commuta in Line

dalle prime prove fatte, (per lo meno) così sembra.

Con quel metodo la tolleranza e’ di un grado.
Se a te va bene, OK. :grinning:

intendi il metodo che funziona in questo modo. . .

Voglio dire che IsParallelTo che usi nello script lavora con una tolleranza di un grado.
Se vuoi c’e’ anche un overload che consente di settare la tolleranza che preferisci.
Vector3d.IsParallelTo Method (Vector3d, Double) (mcneel.github.io)

1 Mi Piace

giusto avevo postato direttamente quella parte del codice preso da esempio, non’é frutto del mio sacco.

:+1:

mi debbo spratichire con tutte queste proprietà tipo IsParallelTo oppure .Line ecc
si possono fare belle cose e ottenere ciò che si cerca più velocemente

Occhio solo a non fare le cose troppo velocemente.
Controlla sempre attentamente cosa succede nello script. :slight_smile:

A volte il modo piu’ veloce non e’ quello piu’ robusto.
Ad esempio se disegni le linee con il comando Polyline, come dicevi sopra, questo script non funziona perche’ accetta solo oggetti LineCurve.

eeee a chi lo dici, sto da ieri a capire del perché mi dava errore,
alla fine, invece c’é la differenza tra linea e segmento polilinea

come anche linecurve e line. queste cose intendevo prima che sono dettagli importanti da conoscere
alla fine prendere i metodi ed assemblarli come i lego dopo aver capito come fare non’é poi tanto difficile
però poi crei un segmento linea che è una retta con due punti, ma il metodo richiede una line
e ci si perde la testa, essendo che sfugge il motivo del perché il codice non funziona. . .

e vabbè tutta esperienza.

1 Mi Piace