1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

[ recherche / creation script ] couper des polylines contenues entre deux polylines

Discussion dans 'CamBam' créé par braabu, 24 Avril 2016.

  1. braabu

    braabu Nouveau

    Messages:
    25
    Inscrit:
    24 Avril 2016
    [ recherche / creation script ] couper des polylines contenues entre deux polylines
    bonjours,
    je commence a coder un peu avec cambam, mes souvenirs de basic date de mon TO7 70 ... mais j'ai toute de même réussi a générer un profil en fonction des pièces que je veux usiner pour leu
    r donner une forme sur Z. je cherche maintenant a réduire le temps d'usinage , mes polylines générés par mon script étant sur un surface plus grande que la forme que je v découpée.

    il faudrait que j'arrive a découper les polylines du calque2 en suivant les polylines du calque 1 et pour finir ne conserver que les polylines utiles entre les deux polylines de découpe.

    si l'un de vous a un exemple que je puisse étudier )

    merci d'avance

    braabu

    [​IMG]
    Voir la pièce jointe test decoupe poly.rar
     
  2. dh42

    dh42 Compagnon

    Messages:
    3 979
    Inscrit:
    4 Septembre 2009
    Localité:
    Près de St Etienne (42)
    [ recherche / creation script ] couper des polylines contenues entre deux polylines
    Salut,

    En "manuel", on utiliserais la fonction "edition/couper" (Trim), soit la Cambam.cad.Polyline.PolylineTrim()

    Public Shared Function PolylineTrim(ByVal p1 As Polyline, ByVal p2 As Polyline, ByVal tolerance As Double) As Polyline()

    au vu des paramètres, on passe 2 polylignes en entrée et on récupère un tableau de polylignes en sortie ... donc il y faut faire une boucle pour gérer une découpe de plusieurs lignes, ensuite il faut déterminer lesquelles garder ... je n'ai pas d'exemple de cette fonction à te donner, jamais utilisé en ce qui me concerne.

    ++
    David
     
  3. dh42

    dh42 Compagnon

    Messages:
    3 979
    Inscrit:
    4 Septembre 2009
    Localité:
    Près de St Etienne (42)
    [ recherche / creation script ] couper des polylines contenues entre deux polylines
    Bon, j'ai trouvé, c'est une autre fonction ; je te met un exemple que je viens de faire en VB, il trace des polylignes test et les coupe ; attention, il faut que ta polyligne "outil" soit une polyligne fermée pour que ça marche.

    ++
    David

    Code:
    ' CamBam VBScript dh42 04/2016
    ' polylin trim test (3D)
    
    sub main
    
        dim ptool as polyline = new polyline()    ' polyligne fermée servant d'outil
    
        dim p1 as polyline = new polyline()    ' les polylignes à couper
        dim p2 as polyline = new polyline()  
        dim p3 as polyline = new polyline()  
    
    '******** effacer le document
    
        View.SelectAllVisibleGeometry()
        CamBamUI.MainUI.DeleteEntities(true)
    
    '********** générer les polylignes nécéssaire pour le test ********
    
    '**** dessin de la polyligne FERMEE servant d'outil ********
    
        ptool.Add(18,22,0,0)    'Add(ByVal x As Double, ByVal y As Double, ByVal z As Double, ByVal bulge As Double)
        ptool.Add(23,14,0,0)
        ptool.Add(23,-5,0,0)
        ptool.Add(24,-22,0,0)
        ptool.Add(-9,3,0,0)
        ptool.Add(-12,16,0,0)
        ptool.Add(-4,21,0,0)
        ptool.Add(-5,30,0,0)
    
        ptool.closed = true
    
        doc.Add(ptool)
    
    '**** dessin des 3 polylignes à couper
    
        p1.Add(-18,18,-5,0)
        p1.Add(1,6,-2,0)
        p1.Add(12.5,-2.57,-3,0)
        p1.Add(32.25,-21,-4,0)
    
        p2.Add(-14,24,-2,0)
        p2.Add(5,12,-3,0)
        p2.Add(16,4,-3,0)
        p2.Add(41,-21,-4,0)
    
        p3.Add(-8,29,-1,0)
        p3.Add(7,21,-3,0)
        p3.Add(19,12,-2,0)
        p3.Add(47,-16,0,0)
    
        doc.Add(p1)
        doc.Add(p2)
        doc.Add(p3)
    
    '*** creation de 2 ShapeList qui contiendront les listes de polylignes
    '*** sl_trim -> celles à couper, sl_trimers -> celles qui coupent
    '*** et d'une 3ieme qui contiendra le résultat
    
        Dim sl_trim as ShapeList = New shapelist
        Dim sl_trimers as ShapeList = New shapelist
    
        Dim sl_dest as ShapeList = New shapelist
      
    '*** creation de 2 listes de polylignes
    
        Dim polylist_totrim As System.Collections.Generic.List(Of Polyline) = New System.Collections.Generic.List(Of Polyline)
        Dim polylist_trimers As System.Collections.Generic.List(Of Polyline) = New System.Collections.Generic.List(Of Polyline)
    
    '******* ajouter les polylignes à la liste des "à couper"
    
        polylist_totrim.Add(p1)
        polylist_totrim.Add(p2)
        polylist_totrim.Add(p3)
    
    '******* ajouter les polylignes à la liste des "coupantes"
    
        polylist_trimers.Add(ptool)
    
    '** mettre ces listes dans les 2 shapelist
    
        sl_trim.AddEntities(polylist_totrim)
        sl_trimers.AddEntities(polylist_trimers)
    
    '******* couper et récupérer le résultat dans sl_dest
    
        sl_dest = sl_trim.Trim3D(sl_trimers ,"o")    'couper à l'extérieur ; attention, sensible à la casse.
    
        View.RefreshView()
    
    '***** effacer les anciennes polylignes
    
        View.SelectAllVisibleGeometry()
        CamBamUI.MainUI.DeleteEntities(true)
    
    '**** afficher les nouveau objet découpés
    
        For Each item As ShapeListItem In sl_dest
            Doc.Add(item.Shape)
        Next
    
        View.RefreshView()
    
    end sub
     
  4. braabu

    braabu Nouveau

    Messages:
    25
    Inscrit:
    24 Avril 2016
    [ recherche / creation script ] couper des polylines contenues entre deux polylines
    c beau !!!! merci je sens que ca va marcher au poil !!

    merci !!
     
  5. dh42

    dh42 Compagnon

    Messages:
    3 979
    Inscrit:
    4 Septembre 2009
    Localité:
    Près de St Etienne (42)
    [ recherche / creation script ] couper des polylines contenues entre deux polylines
    Bonne migraine :wink:

    ++
    David
     
  6. braabu

    braabu Nouveau

    Messages:
    25
    Inscrit:
    24 Avril 2016
    [ recherche / creation script ] couper des polylines contenues entre deux polylines
    re bonjour !

    Ca avance... il me reste encore la partie centrale a enlever, elle est bien découpée mais pas retirer , une histoire de trim in ou out, je pense mais je n'arrive pas a organiser les polylines de façon à definir si c'est in ou out suivant les polylines ..



    Code:
    sub main
    dim rep as string    ' chaine de réponse
    dim p = new Polyline()
    dim newselection as ArrayList = new ArrayList()
    
    '*** creation de 2 ShapeList qui contiendront les listes de polylignes
    '*** sl_trim -> celles à couper, sl_trimers -> celles qui coupent
    '*** et d'une 3ieme qui contiendra le résultat
    
        Dim sl_trim as ShapeList = New shapelist
        Dim sl_trimers as ShapeList = New shapelist
    
        Dim sl_dest as ShapeList = New shapelist
    
    '*** creation de 2 listes de polylignes
    
        Dim polylist_totrim As System.Collections.Generic.List(Of Polyline) = New System.Collections.Generic.List(Of Polyline)
        Dim polylist_trimers As System.Collections.Generic.List(Of Polyline) = New System.Collections.Generic.List(Of Polyline)
    
    SetActiveLayer("Calque1")
    CamBamUI.MainUI.ActiveView.SelectAllLayerGeometry(CamBamUI.MainUI.ActiveView.CADFile.ActiveLayer())
                for each ent as Entity in view.SelectedEntities
        if typeof ent is Polyline
    p = ent
    rep = p.ID
    newselection.add(ent)
    '        app.log(rep)
    view.Select(ent)
    polylist_trimers.Add(ent)
        end if
                next ent
    
    SetActiveLayer("Calque2")
    CamBamUI.MainUI.ActiveView.SelectAllLayerGeometry(CamBamUI.MainUI.ActiveView.CADFile.ActiveLayer())
                for each ent as Entity in view.SelectedEntities
        if typeof ent is Polyline
    p = ent
    rep = p.ID
    newselection.add(ent)
    '        app.log(rep)
    view.Select(ent)
    polylist_totrim.Add(ent)
        end if
                next ent
    
    
    '** mettre ces listes dans les 2 shapelist
    
        sl_trim.AddEntities(polylist_totrim)
        sl_trimers.AddEntities(polylist_trimers)
    
    '******* couper et récupérer le résultat dans sl_dest
    
        sl_dest = sl_trim.Trim3D(sl_trimers ,"o")    'couper à l'extérieur ; attention, sensible à la casse.
        View.RefreshView()
    
    '***** effacer les anciennes polylignes
    
    SetActiveLayer("Calque2")
    CamBamUI.MainUI.ActiveView.SelectAllLayerGeometry(CamBamUI.MainUI.ActiveView.CADFile.ActiveLayer())
        CamBamUI.MainUI.DeleteEntities(true)
    
    '**** afficher les nouveau objet découpés
    
        For Each item As ShapeListItem In sl_dest
            Doc.Add(item.Shape)
        Next
    
        View.RefreshView()
    end sub
    Voir la pièce jointe dessin22.rar
     
  7. dh42

    dh42 Compagnon

    Messages:
    3 979
    Inscrit:
    4 Septembre 2009
    Localité:
    Près de St Etienne (42)
    [ recherche / creation script ] couper des polylines contenues entre deux polylines
    Salut,

    Pour que le in/out fonctionne, il est impératif que la polyligne qui sert à couper soit fermée, si c'est 2 lignes séparées comme sur ton premier dessin, ça ne marche pas, ou plutôt, ça ne marche qu'avec le "i" et ça ne supprime pas les polylignes en trop, ça se contente de les couper, d’où l’intérêt d'avoir une polyligne fermée comme outil, car CB supprimera effectivement les extérieurs ou les intérieurs, suivant que tu utilise "i" ou "o". (une polyligne ouverte n'a ni intérieur ni extérieur)

    dans ton fichier en PJ, si le but et de ne garder que les lignes horizontales qui sont dans l'anneau, alors il faut s'y prendre en 2x, couper les polylignes avec le petit anneau, réglage sur "i" (intérieur), puis refaire de même avec les polylignes horizontales restantes et le grand anneau, mais cette fois en coupant à l'extérieur "o"

    une autre solution, c'est de convertir tes 2 cercles en une région, dans ce cas si la région comprenant les 2 cercles est utilisée comme outil, tu peux faire la découpe en une seule fois et il ne reste rien à "nettoyer".

    ++
    David
     
    Dernière édition: 25 Avril 2016
  8. vieuxfraiseur

    vieuxfraiseur Apprenti

    Messages:
    156
    Inscrit:
    19 Janvier 2016
    [ recherche / creation script ] couper des polylines contenues entre deux polylines
    bonjour à tous,
    intéressant ce post, je regarde cela de prés .

    bonne continuation.
    A+
     
  9. dh42

    dh42 Compagnon

    Messages:
    3 979
    Inscrit:
    4 Septembre 2009
    Localité:
    Près de St Etienne (42)
    [ recherche / creation script ] couper des polylines contenues entre deux polylines
    Salut,

    J'en ai un peu ch** mais j'ai trouvé comment créer une Region en VBscript.

    ce script crée 2 cercles et 2 rectangles concentriques de type polyligne puis crée des regions à partir de ces 4 polylines.

    La fonction Region.CreateFromPolylines() prends un tableau de Polylignes comme argument et retourne un tableau de Regions.
    Le tableau de polylignes passé à la fonction ne doit pas contenir d'éléments vide, sinon la fonction retournera une erreur.

    pour ceux que ça intéresse, je met des bouts de code ici
    http://www.cambam.co.uk/forum/index.php?topic=3878.0

    Code:
    ' New CamBam VBScript
    ' region creation
    
    sub main
    
        '****** create 4 polylines ************************
    
        dim p1 as polyline = new polyline()    '2 concentric circles
        dim p2 as polyline = new polyline()   
    
        dim p3 as polyline = new polyline()    '2 rectangles
        dim p4 as polyline = new polyline()   
    
        p1.Add(15,0,0,0.577350269189625)
        p1.Add(-7.5,12.99,0,0.577350269189625)
        p1.Add(-7.5,-12.99,0,0.577350269189625)
        p1.closed = true
    
        p2.Add(30,0,0,0.577350269189625)
        p2.Add(-15,25.98,0,0.577350269189625)
        p2.Add(-15,-25.98,0,0.577350269189625)
        p2.closed = true
    
        p3.Add(26,52,0,0)
        p3.Add(46,52,0,0)
        p3.Add(46,61,0,0)
        p3.Add(26,61,0,0)
        p3.closed = true
    
        p4.Add(10,45,0,0)
        p4.Add(61,45,0,0)
        p4.Add(61,71,0,0)
        p4.Add(10,71,0,0)
        p4.closed = true
    
        doc.Add(p1)
        doc.Add(p2)
        doc.Add(p3)
        doc.Add(p4)
    
        View.RefreshView()
    
        '*********************************
    
        dim p_array(3) as polyline    ' an array of polylines (it must not have empty elements)
    
        p_array(0) = p1    'fit the array with the polylines
        p_array(1) = p2
        p_array(2) = p3
        p_array(3) = p4
    
        '**** create an array of region entities
        '**** "CamBam.CAD.Region" must be used instead to only "Region" to avoid ambiguity with "System.Drawing.Region"
    
        dim rg() as CamBam.CAD.Region   'an array of regions (more than one can be returned)
    
        rg = CamBam.CAD.region.CreateFromPolylines(p_array)    'create the regions from the polylines
    
            for n as long = 0 to UBound(rg)    'add the created regions to the document (more than one region can be created)
            doc.Add(rg(n))
        next n
    
        View.RefreshView()
    
    end sub
    ++
    David
     
  10. braabu

    braabu Nouveau

    Messages:
    25
    Inscrit:
    24 Avril 2016
    [ recherche / creation script ] couper des polylines contenues entre deux polylines
    bravo )))
    je vais tenter des combiner les deux )
     
Chargement...

Partager cette page