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

bug ou pas ? ( scale et polygne par script )

Discussion dans 'CamBam' créé par braabu, 17 Octobre 2016.

  1. braabu

    braabu Nouveau

    Messages:
    24
    Inscrit:
    24 Avril 2016
    bug ou pas ? ( scale et polygne par script )
    bonjour

    j'ai créé une serie de polyligne par script , les voici en photos ( mon dieu qu'elles sont belles )

    [​IMG]


    si j’applique une gravure sur ces polylignes cela donne une gravure qui ne tient pas compte du Z des polylignes .. comme sur la photo suivante.

    [​IMG]


    et autre constatation , si je fait "joindre" dessus j'ai le résultat de cette dernière photo

    [​IMG]


    pour la création des polylignes, j'ai utiliser un scale.

    ci joint le code que j'ai utilisé

    Code:
    sub main
    
    dim EPn as string = 10 
    dim angle as string = 30
    dim pente as string = 25
    dim passe as string = 0.5
    dim offsetX as double
    dim offsetY as double
    dim ent as entity
    dim sel as CADSelections = New CADSelections
    dim totalNX as string
    dim totalNY as string
    dim xn as integer = 0
    dim yn as integer = 0
    dim coeffX as double
    dim coeffY as double
    
    CamBamUI.MainUI.ActiveView.SelectAllLayerGeometry(CamBamUI.MainUI.ActiveView.CADFile.ActiveLayer())
    dim minc as Point3F = New Point3F
    dim maxc as Point3F = New Point3F
    for each ent in view.SelectedEntities
    sel.add(ent)
    next ent
    sel.RefreshExtrema()
    sel.GetExtrema(minc,maxc)
    dim mini as string, maxi as string
    totalNX = maxc.x-minc.x
    totalNY = maxc.y-minc.y
    pente = pente * math.PI/180
    Angle = Angle * math.PI/180
    offsetY = passe * math.tan(Pente)
    offsetX = passe * math.tan(Angle)
    coeffX = ((2*offsetX)+totalNX)/totalNX
    coeffY = ((2*offsetY)+totalNY)/totalNY
    dim enti As entity
    dim cp As Point3F
    dim lop As Double
    dim e as entity = New Entity()
      CamBamUI.MainUI.ActiveView.SelectAllLayerGeometry(CamBamUI.MainUI.ActiveView.CADFile.ActiveLayer()) 
      for lop = 0 to EPn/passe
       for each enti in view.SelectedEntities
            e = enti.clone()
            activelayer.Entities.Add(e)
                cp = enti.GetCentroid()
                enti.Transform.Translate(-cp.X,-cp.Y,-cp.Z)
                   enti.Transform.Scale(coeffX,coeffY,1)
              enti.Transform.Translate(cp.X,cp.Y,cp.Z+passe)
            next enti
    next
    
    
    
    
    view.RefreshView()
    
    end sub
    

    si l'un de vous a une idée de mon erreur, ou si c'est un bug .. peut etre le fait le scale applique des transformations ?

    merci d'avance !
     
  2. dh42

    dh42 Compagnon

    Messages:
    3 975
    Inscrit:
    4 Septembre 2009
    Localité:
    Près de St Etienne (42)
    bug ou pas ? ( scale et polygne par script )
    Salut,

    Si tes polyligne contiennent des arcs, elles sont "aplaties" avant que l'op de gravure soit appliqué, effectivement les transformations sont appliquées et c'est ce qui donne ce résultat.

    Il faut appliquer les transformations avant de bouger les lignes en Z, voir code.

    ++
    David

    Code:
    sub main
    
    dim EPn as string = 10
    dim angle as string = 30
    dim pente as string = 25
    dim passe as string = 0.5
    dim offsetX as double
    dim offsetY as double
    dim ent as entity
    dim sel as CADSelections = New CADSelections
    dim totalNX as string
    dim totalNY as string
    dim xn as integer = 0
    dim yn as integer = 0
    dim coeffX as double
    dim coeffY as double
    
    CamBamUI.MainUI.ActiveView.SelectAllLayerGeometry(CamBamUI.MainUI.ActiveView.CADFile.ActiveLayer())
    dim minc as Point3F = New Point3F
    dim maxc as Point3F = New Point3F
    for each ent in view.SelectedEntities
    sel.add(ent)
    next ent
    sel.RefreshExtrema()
    sel.GetExtrema(minc,maxc)
    dim mini as string, maxi as string
    totalNX = maxc.x-minc.x
    totalNY = maxc.y-minc.y
    pente = pente * math.PI/180
    Angle = Angle * math.PI/180
    offsetY = passe * math.tan(Pente)
    offsetX = passe * math.tan(Angle)
    coeffX = ((2*offsetX)+totalNX)/totalNX
    coeffY = ((2*offsetY)+totalNY)/totalNY
    dim enti As entity
    dim cp As Point3F
    dim lop As Double
    dim e as entity = New Entity()
    
    dim pos_z as double = 0
    
      CamBamUI.MainUI.ActiveView.SelectAllLayerGeometry(CamBamUI.MainUI.ActiveView.CADFile.ActiveLayer())
      for lop = 0 to EPn/passe
       for each enti in view.SelectedEntities
            e = enti.clone()
            activelayer.Entities.Add(e)
                cp = enti.GetCentroid()
                enti.Transform.Translate(-cp.X,-cp.Y,-cp.Z)
                enti.Transform.Scale(coeffX,coeffY,1)
               enti.Transform.Translate(cp.X,cp.Y,cp.Z)
    
                ' apply transformations
                If enti.ApplyTransformation() Then
                   enti.Transform = Matrix4x4F.Identity
                End If
    
               enti.Transform.Translate(0,0,pos_z)
    
               pos_z = pos_z + passe
    
            next enti
    next
    
    
    view.RefreshView()
    
    end sub
     
  3. braabu

    braabu Nouveau

    Messages:
    24
    Inscrit:
    24 Avril 2016
  4. lepierre

    lepierre Ouvrier

    Messages:
    311
    Inscrit:
    1 Février 2013
    Localité:
    Molain 39
    bug ou pas ? ( scale et polygne par script )
    Bonsoir à vous deux ,

    Je suis un vieux qui ne comprends pas grand chose à vos langages informatiques:
    Mais pour une fois , je vais employer un terme qui ne fait pas partie de mon champ lexical :
    PUTAIN que c'est beau !!
    Et surtout un immense bravo à vous tous qui tentez chaque fois de démèler ces problèmes aussi complexes !!!

    Surtout continuez !!!
    excellente soirée,

    Lepierre
     
  5. dh42

    dh42 Compagnon

    Messages:
    3 975
    Inscrit:
    4 Septembre 2009
    Localité:
    Près de St Etienne (42)
    bug ou pas ? ( scale et polygne par script )
    Salut,

    comme un tracteur ! :wink:

    la grosse difficulté c'est qu'il n'y a pas de doc de programmation pour cambam (ou très peu), il faut explorer les dll pour tenter de comprendre comment exploiter les fonctions internes de Cambam .. long et pas simple ! ... y a du monde !

    @braabu: Tu travail sur quoi exactement comme script ? c'est quoi le but final ?

    ++
    David
     

Partager cette page