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

transformer tout un calque en region par script

Discussion dans 'CamBam' créé par braabu, 28 Août 2016.

  1. braabu

    braabu Nouveau

    Messages:
    24
    Inscrit:
    24 Avril 2016
    transformer tout un calque en region par script
    bonjours,
    je cherche a coder sans succès depuis plusieurs jours un script qui me convertisse mes polylines d'un calque en région.
    je n'arrive pas a les stocker dans un array qui devrait me permettre d'utiliser : CamBam.CAD.region.CreateFromPolylines ..

    ça ne doit pas être compliqué pour un habitué, pour moi ça prend des heures ...

    merci du coup de main par avance !

    braabu
     
  2. dh42

    dh42 Compagnon

    Messages:
    3 978
    Inscrit:
    4 Septembre 2009
    Localité:
    Près de St Etienne (42)
  3. braabu

    braabu Nouveau

    Messages:
    24
    Inscrit:
    24 Avril 2016
    transformer tout un calque en region par script
    bonjour dh42 )
    c'est justement de ton code que je suis partie, mais je n'arrive pas en placer mes polylines dans l'array .. ca me génère une région par polyline actuellement, je ne dois pas être bien éloigner du résultat ... mais ... comme je bidouille sans vraiment avoir pris de cours ...

    j'en suis la actuellement

    Code:
    sub main
    dim rep as string
    dim P as polyline
    dim p_array(2) as polyline
    dim a as string = 0
    
    SetActiveLayer("Contours")
    CamBamUI.MainUI.ActiveView.SelectAllLayerGeometry(CamBamUI.MainUI.ActiveView.CADFile.ActiveLayer())
                for each ent as Entity in view.SelectedEntities
        if typeof ent is Polyline
    'Do Until a=3
    p = ent
    rep = p.ID
    p_array(a) = ent
    app.log(a)
    a=a+1
    app.log(rep)
    'loop
        end if
                next ent
           dim reg() as CamBam.CAD.Region
        reg = CamBam.CAD.region.CreateFromPolylines(p_array) 
            for n as long = 0 to UBound(reg)
            doc.Add(reg(n))
        next n
        View.RefreshView()
    end sub
    ....
     
  4. dh42

    dh42 Compagnon

    Messages:
    3 978
    Inscrit:
    4 Septembre 2009
    Localité:
    Près de St Etienne (42)
    transformer tout un calque en region par script
    Salut,

    Un code qui convertis en régions (nb et type d'objets indifférent)

    les polylignes source sont également supprimées.

    il y a un truc que je n'ai pas pu régler, c'est que j'obtiens aussi des régions si 2 polylignes se chevauchent .. pas trouvé de moyen simple pour les détecter.

    Code:
    Sub main()
    
        Dim rep As String
        Dim P As Polyline
        Dim a As Long = 0
        Dim ct As Long = 0
    
        SetActiveLayer("Contours")
    
        CamBamUI.MainUI.ActiveView.SelectAllLayerGeometry(CamBamUI.MainUI.ActiveView.CADFile.ActiveLayer())
    
        'compter les polylignes contenues dans la sélection pour dimensionner un tableau
        'ayant exactement le bon nombre d'éléments
        For Each ent As Entity In View.SelectedEntities
            If TypeOf ent Is Polyline Then
                ct = ct + 1
            End If
        Next
    
        App.Log("ct: " & ct)
    
        Dim p_array(ct - 1) As Polyline 'créer le tableau de polylignes
    
        For Each ent As Entity In View.SelectedEntities
            If TypeOf ent Is Polyline Then
                P = ent
                rep = P.ID
                p_array(a) = ent
                App.Log("rep: " & rep)
                a = a + 1
            End If
           
            If a > ct - 1 Then
                Exit For
            End If
        Next ent
    
        Dim reg() As CamBam.CAD.Region
    
        reg = CamBam.CAD.Region.CreateFromPolylines(p_array)
    
        For n As Long = 0 To UBound(reg)
    
            App.Log(UBound(reg(n).HoleCurves))
    
            'filtrer pour éliminer les régions sans trou (donc des polylignes)
            'test du nb d'éléments dans le tableau de polylignes, si -1 pas d'éléments)
            If UBound(reg(n).HoleCurves) <> -1 Then
                Doc.Add(reg(n))
                App.Log("ID " & reg(n).HoleCurves(0).ID)
    
                rem_poly(reg(n).HoleCurves, reg(n).OuterCurve)
    
    
            End If
        Next n
        View.RefreshView()
    
    End Sub
    
    Sub rem_poly(poly_int() As Polyline, poly_ext As Polyline)  'supprimer les polylignes source
    
        For n As Long = 0 To UBound(poly_int)
    
            App.Log("n° int " & poly_int(n).ID)
            View.CADFile.ActiveLayer.Entities.Remove(poly_int(n))
    
        Next
    
        App.Log("n° ext" & poly_ext.ID)
        View.CADFile.ActiveLayer.Entities.Remove(poly_ext)
    
    End Sub
    ++
    David
     
    Dernière édition: 29 Août 2016
  5. braabu

    braabu Nouveau

    Messages:
    24
    Inscrit:
    24 Avril 2016
    transformer tout un calque en region par script
    merci David !!

    petite note pour ceux qui voudraient utiliser ce bout de code, il faut que les polylines soit fermées , sinon ca ne marche pas.
     
  6. dh42

    dh42 Compagnon

    Messages:
    3 978
    Inscrit:
    4 Septembre 2009
    Localité:
    Près de St Etienne (42)
    transformer tout un calque en region par script
    au cas ou tu trouverais comment régler ce pb, je suis preneur :wink:

    ++
    David
     
Chargement...
Articles en relation
  1. nagut
    Réponses:
    2
    Affichages:
    879

Partager cette page