Combaciare dominio curve

Certo

Qui c’e’ lo script originale di Riccardo modificato aggiungendo anche la versione in Python.
( Approfitto di nuovo dei tuoi script. Grazie, Riccardo ! )
Come vedi, in pratica e’ solo stato editato, istruzione per istruzione, per adattarlo alla sintassi di Python.
Cambia poco …

c#&pyccx.gh (12,9 KB)

import Rhino
import scriptcontext

t = scriptcontext.doc.ModelAbsoluteTolerance
ints = Rhino.Geometry.Intersect.Intersection.CurveCurve(A, B, t, t)
parameters = []
intervals = []
for ie in ints:
    if ie.IsPoint:
        parameters.append(ie.ParameterA)
    if ie.IsOverlap:
        intervals.append(ie.OverlapA)
parameter = parameters
interval = intervals
1 Mi Piace

Emilio scusa se torno su un’argomento al quale si è già parlato ma volevo capire una cosa:

con la tua definizione hai impostato il “Type hint” su Curve e in questo modo funziona

chiedo: ma se impostazione la rimango come di default “ghdoc Object when geometry (rhinoscriptsyntax)”
ho preso un cranchio avendo inteso che è possibile tramite codice settare un oggetto tipo curva ecc?
ricordo che con i punti si usa il coerce ma per altri oggetti?

Scusa, non capisco perche’ chiedi a me invece di fare la prova tu stesso … :confused: :wink:

… Comunque pare che funzioni:

import Rhino
import scriptcontext
import rhinoscriptsyntax as rs

print type( A )
print type( B )
t = scriptcontext.doc.ModelAbsoluteTolerance
ints = Rhino.Geometry.Intersect.Intersection.CurveCurve(rs.coercecurve(A), rs.coercecurve(B), t, t)
parameters = []
intervals = []
for ie in ints:
    if ie.IsPoint:
        parameters.append(ie.ParameterA)
    if ie.IsOverlap:
        intervals.append(ie.OverlapA)
parameter = parameters
interval = intervals

:grinning_face_with_smiling_eyes:

sono più ore che ci sto provando :exploding_head:

quante volte ho cercato il coerce mi fermavo sempre al punto3d mai visti altri oggetti :triumph:
alla fine per la soluzione ci giravo intorno, in rete ho trovato tutti codici possibili e immaginabili :woozy_face:

grazie come sempre :+1:

Hahaha … potevi dirlo e postare il tuo script, ci ragionavamo sopra. :slight_smile:

Guarda qui:
rhinoscriptsyntax/Scripts/rhinoscript at rhino-6.x · mcneel/rhinoscriptsyntax · GitHub
Ci sono tutte le funzioni di rhinoscriptsyntax.
Se apri utility.py ci trovi anche i vari coerce…

Inoltre, se nel componente Python Script scrivi rs. dovrebbe apparire l’elenco di tutte le funzioni, coerce comprese.
Almeno, qui su Rhino 6 lo fa …

Ma, per curiosita’, perche’ non vuoi usare il type hint Curve ? :confused:
A me sembra piu’ logico e piu’ semplice che andare a prendere il Guid e poi trasformarlo in una curva con il coerce …
GH e’ fatto apposta per fare lui queste cose e risparmiarci il lavoro relativo …

essendo che gli esempi mostrati nel passato nell’uso dei coerci era solo dei punti
come detto, ero convinto che il coerce era una “funzione” specifica per i punti
quindi ho cercato altre soluzioni nel forum amricano, trovando questi argomenti:

def rhDoc():
    try:
        sc.doc = Rhino.RhinoDoc.ActiveDoc
        yield
    finally:
        sc.doc = ghdoc

Rhino.Geometry.Curve

mentre alla fine la giusta risposta stava già nella domanda che avevo posto cioé nei coerce :relaxed:
e vabbè Emilio momenti di défaillance di concentrazione siamo esseri umani

per carità è giusto quello che dici, ma essendo che già nel passato mi sono ritrovato in alcune definizioni con i settaggi fatti sul componente ovviamente non sapendolo, e come adesso sono dovuto andare a cercarmi il motivo, essendo che mi ero ricopiato il codice ed inserito nel mio componente.

quindi per chi gioca un pò con Python come me, non mi pesa inserire un “rs.coerce” perché no
così vedo subito nel codice come sono settati igli input invece di andare alla ricerca. (preferenza)
:wink:

Emilio, ma l’ho avevi chiesto essendo che ritieni con certezza che senza
tolleranza sia impossibile ritrovare un doppio dominio che combaciano?

Come hanno gia’ detto Riccardo e Sergio, dipende dalla forma della curva.
Una curva con dei fillet come questa, ad esempio, genera 2 overlap …

In altri casi potrebbe essere difficile … :confused:
Poi (forse anche questo lo abbiamo gia’ detto) dipende sempre da come definisci l’overlap e quindi da quali casi consideri overlap e quali invece intersezione puntiforme.

In realta’ una tolleranza c’e’ sempre, questi numeri non hanno precisione infinita …
Dipende da come la vogliamo interpretare, noi o l’algoritmo di RhinoCommon.

… Almeno secondo me.

Si’, anche a me verificare il Type hint sembra un po’ scomodo …
Comunque bell’esempio di ‘programmazione difensiva’ ! :grinning:

e sì, ormai credo che quest’argomento dopo i vari 3d sui round dei numeri, mi dovrebbe essere chiaro. . . .

mmmm eppure immaginavo che non fosse semplice ma non credevo ci fossero tutti questi ostacoli

ps non so se hai provato manualmente a far combaciare i due estremi per creare i due domini
ma ti posso assicurare che ci ho provato più volte ed alla fine non’é nemmeno cosi complicato

Io altro non so … Passo.

Ciao

posta qualche esempio …

ciao Sergio,

Match Domini.gh (56,7 KB)

in questo file Gh ho racchiuso alcune definizioni sul quale stavo lavorando, con le relative spiegazioni.

la più piccola riporta le due curve dove ho trovato i 2 domini/subcrv manualmente

(preciso che sono solo dei tentativi seguendo diversi approcci appresi)

ps per qualsiasi chiarimento/ragionamento chiedete pure.