Page 1 sur 2

Dessiner des cercles, carrés, lignes avec la souris

Publié : ven. 19/sept./2008 0:54
par kernadec
bonsoir
Dessiner avec la souris, ce n'est pas aussi facile que ça,
j'ai toujours mon problème de clic gauche, je n'ai pas
beaucoup chercher, ce code utilise le clic droit pour dessiner
mais j'ai quand mémé fait quelques essais avec pas mal de commande,
ça ma pris la tête alors, je crois que je vais être obligé comme la dit Denis dans mon exemple de zoom
de passer par les Hooks, si quelqu'un a la solution a ce problème. car pour ce code de dessin,
j'ai rechercher un exemple de ce type sur les sites fr,de,en, et je n'en ai pas trouver un seul,
de dessin avec la souris, peut être que j'ai pas bien chercher, mais enfin voila!.
on trouve la souris qui fait des trainée sur l'écran, ça c'est sur lolll
mais du dessin a la souris avec de la géométrie que dalle. alors j'ai essayer de le faire un petit truc,
mais pour le moment j'ai rencontrer quelques difficultés avec ce code, surtout avec la souris, voila!!

code mis a jour avec l'aide du Soldat inconnu merci

Code : Tout sélectionner

; ########################################################################
; dessiner c'est pas gagné? alors voila un modeste exemple de        #
; dessin de cercles, carres, lignes, avec la mouse par Kernadec 09/2008 #
; ########################################################################
Global xM.l, yM.l, xm1.l, ym1.l, dessin.l, BState
Global wl.l, wh.l, Color.l, coul1.l, coul2.l, coul3.l
Procedure MakeWinScreenshot(ImageNr, hwnd, Width, Height)
StopDrawing()
hImage = CreateImage(ImageNr, Width, Height)
hdc = StartDrawing(ImageOutput(ImageNr))
  BitBlt_(hdc, 0, 0, Width, Height, GetDC_(hwnd), 0, 0, #SRCCOPY)
StopDrawing()
ProcedureReturn hImage
EndProcedure
wl = 600
wh = 600
hwnd = OpenWindow(0, 0, 0, wl, wh, "Dessiner avec PureBasic  ('£')   Kernadec 09/2008", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #WS_OVERLAPPEDWINDOW)

If CreateGadgetList(WindowID(0))
  CreateImage(0, WindowWidth(0), WindowHeight(0))
  CreateImage(1, WindowWidth(0), WindowHeight(0))
  If CreateMenu(2, WindowID(0))
    MenuTitle("Outils")
    MenuItem(3, "Ligne")
    MenuItem(4, "Carre")
    MenuItem(5, "Cercle")
    MenuItem(6, "Point")
    MenuItem(7, "Gomme")
    MenuItem(8, "Couleur")
    MenuItem(9, "Quitter")
  EndIf
EndIf

hShotWindow = FindWindow_(0, "Dessiner avec PureBasic  ('£')   Kernadec 09/2008")
If hShotWindow
  hWinBmp = MakeWinScreenshot(0, hShotWindow, WindowWidth(0), WindowHeight(0))
  ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), hWinBmp)
EndIf
dessin = 3
Repeat
  event = WindowEvent()
  Select event
    Case #PB_Event_Gadget                ;####   select event code du soldat Inconnu
      Select EventGadget()               ;####   pour contourner le probleme du clic gauche
        Case 0 ; Evenement sur l'image    ####   que je remercie encore au passage pour tout 
          Select EventType()             ;####   son travail interessant dans les codes qu'il post
            Case #PB_EventType_LeftClick
              MBState = #True
              xm1 = WindowMouseX(0)
              ym1 = WindowMouseY(0)
          EndSelect                      ;###########################################
      EndSelect
    Case #PB_Event_Menu
      Select EventMenu()
        Case 3
          dessin = 3
        Case 4
          dessin = 4
        Case 5
          dessin = 5
        Case 6
          dessin = 6
        Case 7
          dessin = 7
        Case 8
          Color.l = ColorRequester()
          If Color > - 1
            co1 = Red(Color) : co2 = Green(Color) : co3 = Blue(Color)
          EndIf
        Case 9
          event = #PB_Event_CloseWindow
      EndSelect
    Case #WM_LBUTTONUP
      MBState = #False
      StartDrawing (WindowOutput(0))
        GrabImage(1, 0, 0, 0, WindowWidth(0), WindowHeight(0))
      StopDrawing()
     Case #WM_MOUSEMOVE
      If MBState = #True
        xM = WindowMouseX(0)
        yM = WindowMouseY(0)
        StartDrawing (WindowOutput(0))
          DrawImage(ImageID(0), 0, 0, WindowWidth(0), WindowHeight(0))
          DrawingMode(4)
          X2 = Abs(Pow(xM - xm1, 2))
          Y2 = Abs(Pow(yM - ym1, 2))
          Radius = Sqr(X2 + Y2)
          If dessin = 3
            LineXY(xm1, ym1, xM, yM, RGB(co1, co2, co3))
          EndIf
          If dessin = 4
            Box(xm1, ym1, xM - xm1, yM - ym1, RGB(co1, co2, co3))
          EndIf
          If dessin = 5
            Ellipse(xm1, ym1, Radius, Radius, RGB(co1, co2, co3))
          EndIf
        StopDrawing()
        If dessin = 6
          StartDrawing (ImageOutput(0))
              Repeat 
                xm2 = WindowMouseX(0)
                ym2 = WindowMouseY(0)
                Ellipse(xm2, ym2, 1, 1, RGB(co1, co2, co3))
              Until  #WM_LBUTTONUP
            StopDrawing()
        EndIf
        If dessin = 7
          StartDrawing (ImageOutput(0))
              Repeat 
                xm2 = WindowMouseX(0)
                ym2 = WindowMouseY(0)
                Ellipse(xm2, ym2, 5, 5, Point(1, 1))
              Until  #WM_LBUTTONUP
          StopDrawing()
        EndIf
        StartDrawing (WindowOutput(0))
          hShotWindow = FindWindow_(0, "Dessiner avec PureBasic  ('£')   Kernadec 09/2008")
          If hShotWindow
            hWinBmp = MakeWinScreenshot(1, hShotWindow, WindowWidth(0), WindowHeight(0))
            SetGadgetState(0, hWinBmp)
          EndIf
        EndIf
      Case #PB_Event_CloseWindow
        CloseWindow(0)
        Break
    EndSelect
Until event = #PB_Event_CloseWindow 
[Modérateur] J'ai refais un titre de sujet propre

Publié : sam. 20/sept./2008 21:16
par Le Soldat Inconnu
voila déjà une petite correction sur le scintillement de l'affichage

Code : Tout sélectionner

; ########################################################################
; dessiner c'est pas gagné? alors voila un modeste exemple de        #
; dessin de cercles, carres, lignes, avec la mouse par Kernadec 09/2008 #
; ########################################################################
Global xM.l, yM.l, xm1.l, ym1.l, dessin.l, BState
Global wl.l, wh.l, Color.l, coul1.l, coul2.l, coul3.l
Procedure MakeWinScreenshot(ImageNr, hwnd, Width, Height)
StopDrawing()
hImage = CreateImage(ImageNr, Width, Height)
hdc = StartDrawing(ImageOutput(ImageNr))
  BitBlt_(hdc, 0, 0, Width, Height, GetDC_(hwnd), 0, 0, #SRCCOPY)
StopDrawing()
ProcedureReturn hImage
EndProcedure
wl = 600
wh = 600
hwnd = OpenWindow(0, 0, 0, wl, wh, "Dessiner avec PureBasic  ('£')   Kernadec 09/2008", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #WS_OVERLAPPEDWINDOW)

If CreateGadgetList(WindowID(0))
  CreateImage(0, WindowWidth(0), WindowHeight(0))
  CreateImage(1, WindowWidth(0), WindowHeight(0))
  If CreateMenu(2, WindowID(0))
    MenuTitle("Outils")
    MenuItem(3, "Ligne")
    MenuItem(4, "Carre")
    MenuItem(5, "Cercle")
    MenuItem(6, "Point")
    MenuItem(7, "Gomme")
    MenuItem(8, "Couleur")
    MenuItem(9, "Quitter")
  EndIf
EndIf

hShotWindow = FindWindow_(0, "Dessiner avec PureBasic  ('£')   Kernadec 09/2008")
If hShotWindow
  hWinBmp = MakeWinScreenshot(0, hShotWindow, WindowWidth(0), WindowHeight(0))
  ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), hWinBmp)
EndIf
dessin = 3
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Menu
      Select EventMenu()
        Case 3
          dessin = 3
        Case 4
          dessin = 4
        Case 5
          dessin = 5
        Case 6
          dessin = 6
        Case 7
          dessin = 7
        Case 8
          Color.l = ColorRequester()
          If Color > - 1
            co1 = Red(Color) : co2 = Green(Color) : co3 = Blue(Color)
          EndIf
        Case 9
          Event = #PB_Event_CloseWindow
      EndSelect
    Case #WM_RBUTTONUP
      MBState = #False
      StartDrawing (WindowOutput(0))
        GrabImage(1, 0, 0, 0, WindowWidth(0), WindowHeight(0))
      StopDrawing()
    Case #WM_RBUTTONDOWN
      MBState = #True
      xm1 = WindowMouseX(0)
      ym1 = WindowMouseY(0)
    Case #WM_MOUSEMOVE
      If MBState = #True
        xM = WindowMouseX(0)
        yM = WindowMouseY(0)
        Delay(4)
        StartDrawing (WindowOutput(0))
          DrawImage(ImageID(0), 0, 0, WindowWidth(0), WindowHeight(0))
          DrawingMode(4)
          X2 = Abs(Pow(xM - xm1, 2))
          Y2 = Abs(Pow(yM - ym1, 2))
          Radius = Sqr(X2 + Y2)
          If dessin = 3
            LineXY(xm1, ym1, xM, yM, RGB(co1, co2, co3))
          EndIf
          If dessin = 4
            Box(xm1, ym1, xM - xm1, yM - ym1, RGB(co1, co2, co3))
          EndIf
          If dessin = 5
            Ellipse(xm1, ym1, Radius, Radius, RGB(co1, co2, co3))
          EndIf
        StopDrawing()
        If dessin = 6
          StartDrawing (ImageOutput(0))
            Repeat
              xm2 = WindowMouseX(0)
              ym2 = WindowMouseY(0)
              Ellipse(xm2, ym2, 1, 1, RGB(co1, co2, co3))
              Delay(4)
            Until #WM_RBUTTONDOWN
          StopDrawing()
        EndIf
        If dessin = 7
          StartDrawing (ImageOutput(0))
            Repeat
              xm2 = WindowMouseX(0)
              ym2 = WindowMouseY(0)
              Ellipse(xm2, ym2, 5, 5, Point(1, 1))
              Delay(4)
            Until #WM_RBUTTONDOWN
          StopDrawing()
        EndIf
        StartDrawing (WindowOutput(0))
          hShotWindow = FindWindow_(0, "Dessiner avec PureBasic  ('£')   Kernadec 09/2008")
          If hShotWindow
            hWinBmp = MakeWinScreenshot(1, hShotWindow, WindowWidth(0), WindowHeight(0))
            SetGadgetState(0, hWinBmp)
          EndIf
        EndIf
      Case #PB_Event_CloseWindow
        CloseWindow(0)
        Break
    EndSelect
  Until Event = #PB_Event_CloseWindow
J'ai supprimer un startdrawing jamais fermé et un fillarea qui ne sert à rien.

Ensuite, il a une grosse simplification a apporter, il faut supprimer le dessin sur la fenêtre. Ce n'est pas une bonne méthode à mon avis

il faut que tu dessines sur une image de la taille de la fenêtre et que tu affiches cette image.

Le principe reste le même je pense :
2 images
une pour le dessin "validé"
une autre pour afficher ce qui est en cours de dessin

voila comment je vois le problème, je fais juste un exemple avec un dessin de ligne :

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Pour faire des programmes de test rapidement, il ne reste qu'a rajouter les gadgets et la gestion des évènements.


; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf

CreateImage(0, 300, 300) ; Image de ce qui est fixe
CreateImage(1, 300, 300) ; image de ce qui est en cours dêtre dessiné

ImageGadget(0, 0, 0, 300, 300, ImageID(1))

Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 0 ; Evenement sur l'image
          Select EventType()
            Case #PB_EventType_LeftClick
              ; On commence le dessin
              X_Depart = WindowMouseX(0)
              Y_Depart = WindowMouseY(0)
              Dessin_Commence = 1
          EndSelect
      EndSelect
      
    Case #WM_MOUSEMOVE
      If Dessin_Commence
        StartDrawing(ImageOutput(1))
          DrawImage(ImageID(0), 0, 0)
          X_Fin = WindowMouseX(0)
          Y_Fin = WindowMouseY(0)
          LineXY(X_Depart, Y_Depart, X_Fin, Y_Fin, $FFFFFF)
        StopDrawing()
        SetGadgetState(0, ImageID(1))
      EndIf
      
    Case #WM_LBUTTONUP ; On termine le dessin
      Dessin_Commence = 0
      ; On redessine sur l'image 0 le dessin final
      StartDrawing(ImageOutput(0))
        X_Fin = WindowMouseX(0)
        Y_Fin = WindowMouseY(0)
        LineXY(X_Depart, Y_Depart, X_Fin, Y_Fin, $FFFFFF)
      StopDrawing()
      
  EndSelect
  
Until Event = #PB_Event_CloseWindow

End
Voila qui me semble plus juste

Et le clic gauche marche :)

Publié : dim. 21/sept./2008 7:18
par kernadec
bonjour Soldat
merci pour ta correction,
je recherchais justement a supprimer cette effet de scintillement,
avec une deuxieme fenetre sans bord.

Merci d'avoir travailler sur ce code, ça va m'éviter de m'enliser
je vais étudié ton exemple avec attention, il est le bienvenu.
je cherche a faire un petit truc qui fait du CAD sur des images
pour étudié certain tableaux de peintres ou des monuments
avec la géométrie, sans avoir une usine a GAZ du style Autocad,
Microstation, que je connais, mais ils sont trop cher pour moi.

j'ai trouver un code sur le Site Allemand qui montre la marche
a suivre pour le CAD. on doit stocker chaque objet du dessin
dans une base de donnée, list ou structures,
comme avec Microtattion qui ouvre et referme un fichier de
travail sur le disque pour chaque objet du dessin,
dans le siècle précédents, sous DOS dans les années 90,
ça pouvait planté, on ne perdait rien du travail accompli,



pour infos: j'ai modifié le premier code avec tes précieux conseils
j'ai retirer les delay(4) aussi, et mis le mode dessin avec
le clic gauche, grâce a toi avec : "select clic gauche indépendant".
je n'avais pas trouver cette astuce sur le forum du site même ceux
de l'étranger, Excellent!

Merci Soldat

mais pour ce code intéressant, je n'ai pas le nom de l'artiste dommage.

Code : Tout sélectionner

InitSprite()
InitSprite3D()
InitKeyboard()
InitMouse()
InitNetwork()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()


#Scr_Width         = 1024
#Scr_Height        = 768
#Scr_Depth         = 32
#Scr_Title         = "Titel"
OpenScreen(#Scr_Width, #Scr_Height, #Scr_Depth, #Scr_Title)


#PI_BOW            = 0.01745329


Structure Vector2f
  x.f
  y.f
EndStructure

Structure Triangle
  Vector.Vector2f[3]
EndStructure


Global Objekt1Triangle = 3
Global Dim Objekt1.Triangle(Objekt1Triangle-1)
Objekt1(0)\Vector[0]\x = 180
Objekt1(0)\Vector[0]\y = 600
Objekt1(0)\Vector[1]\x = 430
Objekt1(0)\Vector[1]\y = 440
Objekt1(0)\Vector[2]\x = 560
Objekt1(0)\Vector[2]\y = 650

Objekt1(1)\Vector[0]\x = 430
Objekt1(1)\Vector[0]\y = 440
Objekt1(1)\Vector[1]\x = 670
Objekt1(1)\Vector[1]\y = 500
Objekt1(1)\Vector[2]\x = 560
Objekt1(1)\Vector[2]\y = 650

Objekt1(2)\Vector[0]\x = 250
Objekt1(2)\Vector[0]\y = 200
Objekt1(2)\Vector[1]\x = 200
Objekt1(2)\Vector[1]\y = 400
Objekt1(2)\Vector[2]\x = 500
Objekt1(2)\Vector[2]\y = 600

Global Objekt2Triangle = 1
Global Dim Objekt2.Triangle(Objekt1Triangle-1)
Objekt2(0)\Vector[0]\x = 400
Objekt2(0)\Vector[0]\y = 300
Objekt2(0)\Vector[1]\x = 530
Objekt2(0)\Vector[1]\y = 440
Objekt2(0)\Vector[2]\x = 560
Objekt2(0)\Vector[2]\y = 250




Global Dim Snow.Vector2f(200)
Global Dim SnowColl.b(200)
Global Dim SnowSpeed.f(200)
For A = 0 To 200
  Snow(A)\x = Random(600)+200
  Snow(A)\y = Random(300)-300
  SnowSpeed(A) = (Random(50)/100)+2
Next



Global Ball.Vector2f


Procedure.f DotProduct(*Point1.Vector2f, *Point2.Vector2f)
  ProcedureReturn(*Point1\x * *Point2\x + *Point1\y * *Point2\y)
EndProcedure

Procedure.f Length(*Vector2f.Vector2f)
  ProcedureReturn Sqr( *Vector2f\x * *Vector2f\x + *Vector2f\y * *Vector2f\y)
EndProcedure

Procedure Normalize(*Vector2f.Vector2f)
  length.f = Length(*Vector2f)
  *Vector2f\x = *Vector2f\x / length
  *Vector2f\y = *Vector2f\y / length
EndProcedure

Procedure IsPointInsideTriangle(*Point.Vector2f, *Triangle.Triangle)
  Dim vTriangle.Vector2f(2)
  fTotalAngle.f = 0.0   ;// As radians
  
  
  vTriangle(0)\x = *Point\x - *Triangle\Vector[0]\x
  vTriangle(0)\y = *Point\y - *Triangle\Vector[0]\y
  Normalize(vTriangle(0))
  
  vTriangle(1)\x = *Point\x - *Triangle\Vector[1]\x
  vTriangle(1)\y = *Point\y - *Triangle\Vector[1]\y
  Normalize(vTriangle(1))
  
  vTriangle(2)\x = *Point\x - *Triangle\Vector[2]\x
  vTriangle(2)\y = *Point\y - *Triangle\Vector[2]\y
  Normalize(vTriangle(2))
  
  
  fTotalAngle  = ACos( DotProduct( vTriangle(0), vTriangle(1) ))
  fTotalAngle + ACos( DotProduct( vTriangle(1), vTriangle(2) ))
  fTotalAngle + ACos( DotProduct( vTriangle(2), vTriangle(0) ))
  
  If Abs(fTotalAngle - 6.28) < 0.01
    ProcedureReturn #True
  EndIf
  
  ProcedureReturn #False
EndProcedure

Repeat
  ClearScreen($000000)
  ExamineKeyboard()
  ExamineMouse()
  MouseX = MouseX()
  MouseY = MouseY()
  time = ElapsedMilliseconds()/1000
  
  
  
  Ball\x = MouseX
  Ball\y = MouseY
  
  
  StartDrawing(ScreenOutput())
    DrawingMode(#PB_2DDrawing_Transparent)
    
    For i = 0 To Objekt1Triangle -1
      LineXY(Objekt1(i)\Vector[0]\x, Objekt1(i)\Vector[0]\y, Objekt1(i)\Vector[1]\x, Objekt1(i)\Vector[1]\y ,$33FFFF)
      LineXY(Objekt1(i)\Vector[1]\x, Objekt1(i)\Vector[1]\y, Objekt1(i)\Vector[2]\x, Objekt1(i)\Vector[2]\y ,$33FFFF)
      LineXY(Objekt1(i)\Vector[2]\x, Objekt1(i)\Vector[2]\y, Objekt1(i)\Vector[0]\x, Objekt1(i)\Vector[0]\y ,$33FFFF)
      
      
      If IsPointInsideTriangle(Ball, Objekt1(i))
        DrawText(MouseX+10, MouseY+10,"Kollision Objekt 1",$33FFFF)
      EndIf
      
      
      For A = 0 To 200
        If IsPointInsideTriangle(Snow(A),Objekt1(i))
          SnowColl(A) = #True
        ElseIf SnowColl(A) = #True
          
        Else
          SnowColl(A) = #False 
        EndIf
        
        
      Next A
      
      
    Next i
    
    
    For i = 0 To Objekt2Triangle -1
      LineXY(Objekt2(i)\Vector[0]\x, Objekt2(i)\Vector[0]\y, Objekt2(i)\Vector[1]\x, Objekt2(i)\Vector[1]\y ,$A9FF56)
      LineXY(Objekt2(i)\Vector[1]\x, Objekt2(i)\Vector[1]\y, Objekt2(i)\Vector[2]\x, Objekt2(i)\Vector[2]\y ,$A9FF56)
      LineXY(Objekt2(i)\Vector[2]\x, Objekt2(i)\Vector[2]\y, Objekt2(i)\Vector[0]\x, Objekt2(i)\Vector[0]\y ,$A9FF56)
      
      
      If IsPointInsideTriangle(Ball, Objekt2(i))
        DrawText(MouseX+10, MouseY+30,"Kollision Objekt 2",$A9FF56)
      EndIf
      
      
      For A = 0 To 200
        If IsPointInsideTriangle(Snow(A),Objekt2(i))
          SnowColl(A) = #True
        ElseIf SnowColl(A) = #True
          
        Else
          SnowColl(A) = #False 
        EndIf
        
        
      Next A
      
      
    Next i
    
    
    
    For A = 0 To 200
      Circle(Snow(A)\x, Snow(A)\y, 5, $FFFFFF)
      If Not SnowColl(A)
        Snow(A)\y + SnowSpeed(A)
      EndIf
    Next
    
    Plot(MouseX, MouseY,$FFFFFF)
    Plot(MouseX+1, MouseY,$FFFFFF)
    Plot(MouseX, MouseY+1,$FFFFFF)
    Plot(MouseX+1, MouseY+1,$FFFFFF)
    
  StopDrawing()
  
  Delay(1)
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) 

Publié : lun. 22/sept./2008 8:42
par djes
Il y a un logiciel 2D "pro" gratuit, c'est solidedge 2d :
http://www.ugsplm.fr/about_us/press/com ... ?id_cp=105
Je ne l'ai pas essayé (à part pour de l'import), mais il semble très bien :)

Publié : lun. 22/sept./2008 13:17
par kernadec
bonjour Djes
Merci pour ta réponse, et pour cette adresse de SolidEdge.

j'ai essayer SolidEdge, AllyCAD , GeoGebra, ils sont bien,
le problème, c’est que ce n’est pas pour une utilisation personnelle,
et je les trouve pas assez ergonomique, même trop lourd, pour les enfants.
Et aussi des adultes qui n’ont jamais fait de dessin CAD.

Je cherche une truc genre MINICAD simple, comme je l’ai dit
Un truc pour dessiné simplement, mais aussi sur des images
des figures géométriques a l’échelle,. et pour apprendre a dessiner
en perspective. Pour aussi aider les enfants a visualiser et a s'amuser
avec ce mode de dessin CAD, plutôt que de rester sur des formules d’algèbre abstraites.
pour cela je pense que nous n’avons pas besoin de 2000 commandes,
qu’on n’utilisera jamais…
Enfin, j’ai toujours penser qu’il valait mieux essayer de rester simple.
et mes intentions reste modeste.
A plus.

Publié : lun. 22/sept./2008 16:11
par Good07
Bonjour Kernadec,

Moi j'utilise Dessinateur Studio 2 de Micro Application qui est très bien et pas trop cher. De plus il permet de dessiner en vectoriel sur une photo chargée en arrière plan. Simple a utilisé et bourré de commandes très utiles.

Publié : lun. 22/sept./2008 16:51
par Frenchy Pilou
Essaie donc Moment of Inspiration qui est fait à la base pour dessiner avec une tablette graphique mais qui peut se manipuler aussi à la souris!
C'est une des interfaces les plus facile et Zen qui existe dans le genre! (voir image jointe)
Et je ne parle pas de l'intuitivité de la bête! :roll:
C'est un modeleur Nurbs mais ses fonctions 2D sont un régal!
Et regarde aussi le simple dessin d'une courbe!
Elles sont "lissées" pendant que l'on dessine à main levée, pas seulement la courbe elle-même, mais son "aspect"!
C'est un des programme qui donne le plus beau rendu à l'écran pendant la modélisation!
Bref du nanan!
Et cerise sur le gateau c'est moi qui ai fait la version française, donc s'il y a des questions je suis tout ouïe :D
Il existe une 2 versions d'essai: 30 jours avec sauvegarde
ou en demo gratuite illimitée dans le temps mais sans sauvegarde!
Mais bon, le "print screen" n'est pas fait pour les chiens! :wink:
On peut déjà grandement s'amuser avec 8)
Ps On peut évidemment mettre autant d'images en arrière plan que l'on veut dans n'importes quelles positions de l'espace!
http://moi3d.com Les images sont de moi faites avec Moi bien sûr :D
l'image "bleue" n'est que des "Print screen" d'objets pris sous differents angles et mis dans n'importe quel programme 2D!
Remarque la "suavité" du trait de l'image jaune qui est un print screen direct de ce que voit dans Moi, j'ai juste changé la couleur :wink:
La couleur normale étant la 3ème image, ici avec le modèle en fond d'écran :)

Image
Image
Image
Image

Publié : lun. 22/sept./2008 18:29
par Le Soldat Inconnu
ca a l'air sympa ce petit logiciel :) va falloir que j'essai

Perso quand j'ai besoin de dessiner un truc en 3D pour faire une image dans un jeu, je passe par SolidWork (application pro mais à l'école d'ingé, il est dispo sur les PC de l'école ... comment ca je suis plus à l'école ... hum ... il faut bien pouvoir finir les projets à la maison)

C'est pas frocément le plus adapté mais c'est le seul truc que je connaisse de simple et dont j'arrive à me servir très rapidement.

Publié : lun. 22/sept./2008 19:21
par kernadec
genial tout ca
je vais tester ces beau logiciels. merci!

Publié : mar. 23/sept./2008 8:52
par Frenchy Pilou
J'ai juste oublié de dire que bien évidemment à la fin on peut exporter en polygones suivant divers format, car en général pour faire fonctionner un Renderer (moteur de rendu réaliste) le format nurbs n'est pas adapté!

Publié : jeu. 25/sept./2008 16:00
par kernadec
bonjour Frenchy pilou

Je viens d’essayer MOL le logiciel dont tu as mis les images
Et Je n’ai pas trouvé ces commandes dans le menu es ce normal.
Polygones circonscrit ?
Perpendiculaire a tout objet ?
Bissectrices sur tout objet avec une droite ?
Placer une tangente par exemple je n’ai pas trouvé non plus ?

Il faut dire qu’une perpendiculaire qui suit une droite et que l’on accroche sur un l’objet me parait indispensable !
car à l’école on commence par cela en géométrie. lolll
Peut être alors dans la version 2

j'ai aussi trouve ce code demo sympa sur le site Allemand

Code : Tout sélectionner

;####################################
;######## auteur   #NULL    titre poligone include
;####################################
; polygon.pbi  

;XIncludeFile "E:\pbi\getAngle.pbi"
;{ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ E:\pbi\getAngle.pbi
        ; getAngle.pbi
       
       
Procedure.f getAngle(mx,my, Px,py, mode.l=1)
  ; returns the angle of a line going from point
  ; [mx,my] to point [px,py] in radian
  ; mode=1 (default):
  ; pointing to the right means 0 degrees
  ; pointing to the top means 90 degrees, ect
  ; [math y-axis]
  ; mode=-1:
  ; pointing to the right means 0 degrees
  ; pointing to the bottom means 90 degrees, ect
  ; [screen y-axis.]
  
  Static xd.l, yd.l, Alpha.f
  xd=Px-mx
  yd=py-my
  
  If xd>0
    If     yd<0 :: Alpha=         ATan(-yd / xd )
    ElseIf yd>=0 :: Alpha= 2*#PI - ATan( yd / xd )
    EndIf
  ElseIf xd<0
    If     yd<0 :: Alpha=   #PI - ATan(-yd /-xd )
    ElseIf yd>=0 :: Alpha=   #PI + ATan( yd /-xd )
    EndIf
  ElseIf xd=0
    If     yd>0 : Alpha=   #PI*1.5
    ElseIf yd<0 : Alpha=   #PI*0.5
    EndIf
  EndIf
  If mode=-1
    Alpha = 2*#PI-Alpha
  EndIf
  ;   If Not Random(200)
  ;     Debug Str(xd) + " | " + Str(yd) + " | " + StrF(alpha)
  ;   EndIf
  ProcedureReturn Alpha
EndProcedure
       
       
        ; [...]
;}
;  ________________________________/ [end] E:\pbi\getAngle.pbi



Structure _S_poly
  p0.POINT
  p.POINT
  go.POINT
  center.POINT
  radius.l
  angle.f
  Color.l
  relative.l
  temp.f
EndStructure
Global _poly._S_poly





; 'initPoly(..)' sets the initial coordiantes for a new polygon.
; you can also set a color (default is white)
; set 'relative_' to #FALSE if following calls of 'setPoly(..)'
; use absolute coordinates. if set to #TRUE (default) 'setPoly(..)'
; moves relative to its current position
Macro initPoly(x_, y_, color_=$FFFFFF, relative_=#True)
  _poly\p0\x = x_
  _poly\p0\y = y_
  _poly\p\x  = x_
  _poly\p\y  = y_
  _poly\Color = color_
  _poly\relative = relative_
  _poly\angle = 0
EndMacro


; 'setPoly(..)' sets a new point / adds a segment.
; paramters 'x_'/'y_' are used as absolute (i.e.:screen-coordinates)
; or relaitve to the current position, according to what was defined
; in 'initPoly(..)'
; you can choose a optional color for this segment.
Macro setPoly(x_, y_, color_=_poly\Color)
  _poly\go\x = (x_)+(0 Or _poly\relative)*_poly\p\x
  _poly\go\y = (y_)+(0 Or _poly\relative)*_poly\p\y
  LineXY( _poly\p\x, _poly\p\y, _poly\go\x, _poly\go\y, color_)
  _poly\p\x =  _poly\go\x
  _poly\p\y =  _poly\go\y
EndMacro


; 'setPoly2(..)' sets a new point / adds a segment.
; paramter 'a_' is the angle of the segment relative to
; the current angle. 'r_' is the length of the segment
; you can choose an optional color for this segment.
; 'a_' is always relative.
; 'r_' is always absolute
Macro setPolyA(a_, r_, color_=_poly\Color)
  _poly\radius = (r_)
  _poly\angle  + (a_)
  Line( _poly\p\x, _poly\p\y, _poly\radius*Cos(_poly\angle), _poly\radius*Sin(_poly\angle), color_)
  _poly\p\x + _poly\radius*Cos(_poly\angle)
  _poly\p\y + _poly\radius*Sin(_poly\angle)
EndMacro


; 'closePoly()' is not required, but can be used to easily close
; a polygon, that is to say to draw a line from the current postion
; back to the initial position.
; you can choose an optional color for this segment.
Macro closePoly(color_=_poly\Color)
  LineXY(_poly\p\x, _poly\p\y, _poly\p0\x, _poly\p0\y, color_)
EndMacro







Macro initRadialPolyA(xCenter_, yCenter_, a_, r_, color_=$FFFFFF, relative_=#True)

  _poly\center\x = xCenter_
  _poly\center\y = yCenter_
  _poly\p0\x = _poly\center\x + (r_) * Cos(a_)
  _poly\p0\y = _poly\center\y + (r_) * Sin(a_)
  _poly\p\x  = _poly\p0\x
  _poly\p\y  = _poly\p0\y
  _poly\Color = color_
  _poly\relative = relative_
  _poly\angle = a_
EndMacro


Macro setRadialPolyA(a_, r_, color_=_poly\Color)
  _poly\angle = (a_) + (0 Or _poly\relative)*_poly\angle
  _poly\go\x = _poly\center\x + (r_) * Cos(_poly\angle)
  _poly\go\y = _poly\center\y + (r_) * Sin(_poly\angle)
  LineXY( _poly\p\x, _poly\p\y, _poly\go\x, _poly\go\y, color_)
  _poly\p\x = _poly\go\x
  _poly\p\y = _poly\go\y
EndMacro


Macro initRadialPoly(xCenter_, yCenter_, x_, y_, a_, color_=$FFFFFF, relative_=#True)
  _poly\center\x = xCenter_
  _poly\center\y = yCenter_
  _poly\angle = a_
  _poly\temp = getAngle(_poly\center\x, _poly\center\y, _poly\center\x + (x_), _poly\center\y + (y_),-1)
  _poly\radius = Sqr( (x_)*(x_)+(y_)*(y_) )
  _poly\p0\x = _poly\center\x + _poly\radius * Cos(_poly\angle + _poly\temp)
  _poly\p0\y = _poly\center\y + _poly\radius * Sin(_poly\angle + _poly\temp)
  _poly\p\x  = _poly\p0\x
  _poly\p\y  = _poly\p0\y
  _poly\Color = color_
  _poly\relative = relative_
EndMacro


Macro setRadialPoly(x_, y_, color_=_poly\Color)
  _poly\temp = getAngle(_poly\center\x, _poly\center\y, _poly\center\x + (x_), _poly\center\y + (y_),-1)
  _poly\radius = Sqr( (x_)*(x_)+(y_)*(y_) )
  _poly\go\x = _poly\center\x + _poly\radius * Cos(_poly\angle + _poly\temp)
  _poly\go\y = _poly\center\y + _poly\radius * Sin(_poly\angle + _poly\temp)
  LineXY( _poly\p\x, _poly\p\y, _poly\go\x, _poly\go\y, color_)
  _poly\p\x = _poly\go\x
  _poly\p\y = _poly\go\y
EndMacro



Macro rad(_deg_)
  ((_deg_)*0.017453292519943295) ; _deg_ * #PI / 180
EndMacro


; [merge_end] 



 ;EXAMPLE
;
 hWin=OpenWindow(0, 50,50,800,700, "c:\purebasic\include\getAngle.pbi")
 CreateGadgetList(hWin)
 ImageGadget(0, 0,0,  0,0, CreateImage(0,800,700), #PB_Image_Border)
 AddKeyboardShortcut(0,#PB_Shortcut_Escape,0)
 Font=LoadFont(0,"Arial",8)
 Repeat
   StartDrawing( ImageOutput(0) )
     Box(0,0,WindowWidth(0),WindowHeight(0),$000000)
     
     
     ;a triangle
     
     initPoly(50,300,$FF0000)
     setPoly(100,0)
     setPoly(-100,100)
     closePoly()
     
     
     ;a polygon
     
     initPoly(140,20,$FFFF00,#False)
     setPoly(190,70)
     setPoly(240,70)
     setPoly(240,20,$00FF00)
     setPoly(270,20)
     setPoly(270,220)
     setPoly(220,220,$0000FF)
     setPoly( 20,20,$0000FF)
     setPoly(140,20)
     
     
     ;a spiral
     
     amount = DesktopMouseY()/4
     angle.f = DesktopMouseX()/10
     initPoly(400,200)
     For i=1 To amount
       setPolyA( rad(angle), i, RGB(255,255*i/amount,0) )
     Next
     
     
     ;a bzzz
     
     For n=0 To 4
       initPoly(100,500)
       For i=0 To 150
         setPoly(4, Random(8)-4, $FF0000+$0000FF*i/150)
       Next
     Next
     
     
     ;a whirling star
     
     Size=50
     initPoly(300,350,$00FF00)
     For n=1 To DesktopMouseX()/30
       setPolyA(rad(175),Size)
       setPolyA(rad(-160),Size+(DesktopMouseY()-400)/40)
     Next
     
     
     ;an angled box
     
     width=180
     Height=40
     angle=DesktopMouseX()/10
     initPoly(400,400)
     setPolyA(rad(angle),Width)
     setPolyA(rad(90),Height)
     setPolyA(rad(90),Width)
     closePoly()
     
     
     ;another angled box (centered)
     
     A=20
     b=80
     angle=DesktopMouseX()/10
     Circle(450,510,3,$00FF00)
     initRadialPolyA(450,510,rad(angle),50)
     setRadialPolyA(rad(180*A/b),50)
     setRadialPolyA(rad(180-180*A/b),50)
     setRadialPolyA(rad(180*A/b),50)
     closePoly()
     
     
     ;an angled ellipse
     
     r1    = 100
     r2    = 50
     angle = DesktopMouseY()
     min   = DesktopMouseX()
     max   = min+356-45
     Circle(200,600,3,$0000FF)
     initRadialPoly(200,600,r1*Cos(rad(min)),r2*Sin(rad(min)),rad(angle),$0000FF)
     For i=min To max
       setRadialPoly(r1*Cos(rad(i)),r2*Sin(rad(i)))
     Next
     ;closePoly()
     
     
   StopDrawing()
   SetGadgetState(0,ImageID(0))

   event=WaitWindowEvent(40)
   Select event
     Case #PB_Event_CloseWindow
       quit=1
     Case #PB_Event_Menu
       quit=1
   EndSelect
Until quit 

et celui ci qui est pas mal non plus

Code : Tout sélectionner

;Define

EnableExplicit

   ; 3D-Transformations - done by Michael Vogel

#pointsize=10

Global viewx.d,viewy.d,viewz.d
Global scale.d
Global screenx=640
Global screeny=480
Global offsetX=screenx>>1
Global offsetY=screeny>>1

Structure Mat
  x.d[4]
  y.d[4]
  Z.d[4]
  T.d[4]
EndStructure

Structure TripelPlus
  x.d
  y.d
  Z.d
  _X.l
  _Y.l
  _size.l
EndStructure

Structure Dupel
  von.l
  nach.l
EndStructure

Global Matrix.Mat
Global Calc.Mat
Global RotXMat.Mat
Global RotYMat.Mat
Global Camera.Mat
Global CamFD.d;         focal distance: Fokusabstand

Global Punkte=8
Global Dim Points.TripelPlus(Punkte)

Global Linien=12
Global Dim Lines.Dupel(Linien)

Define i.l,x.w,y.w,Z.w
For i=1 To Punkte
  Read x
  Read y
  Read Z
  Points(i)\x=x
  Points(i)\y=y
  Points(i)\Z=Z
Next i

For i=1 To Linien
  Read x
  Read y
  Lines(i)\von=x
  Lines(i)\nach=y
Next i

DataSection
  ; Würfel-Eckepunkte
  Data.w 50,50,50
  Data.w -50,50,50
  Data.w -50,-50,50
  Data.w 50,-50,50
  Data.w 50,50,-50
  Data.w -50,50,-50
  Data.w -50,-50,-50
  Data.w 50,-50,-50
EndDataSection

DataSection
  ; Würfel-Kanten
  Data.w 1,2,2,3,3,4,4,1
  Data.w 1,5,2,6,3,7,4,8
  Data.w 5,6,6,7,7,8,8,5
EndDataSection
; EndDefine
Procedure SetNorm(*m.Mat)
  *m\x[0]=1 : *m\y[0]=0 : *m\Z[0]=0 : *m\T[0]=0
  *m\x[1]=0 : *m\y[1]=1 : *m\Z[1]=0 : *m\T[1]=0
  *m\x[2]=0 : *m\y[2]=0 : *m\Z[2]=1 : *m\T[2]=0
  *m\x[3]=0 : *m\y[3]=0 : *m\Z[3]=0 : *m\T[3]=1
EndProcedure
Procedure SetTransformation(*m.Mat, x.d, y.d, Z.d)
  *m\x[0]=1 : *m\y[0]=0 : *m\Z[0]=0 : *m\T[0]=0
  *m\x[1]=0 : *m\y[1]=1 : *m\Z[1]=0 : *m\T[1]=0
  *m\x[2]=0 : *m\y[2]=0 : *m\Z[2]=1 : *m\T[2]=0
  *m\x[3]=x : *m\y[3]=y : *m\Z[3]=Z : *m\T[3]=1
EndProcedure
Procedure SetScale(*m.Mat, x.d, y.d, Z.d)
  *m\x[0]=x : *m\y[0]=0 : *m\Z[0]=0 : *m\T[0]=0
  *m\x[1]=0 : *m\y[1]=y : *m\Z[1]=0 : *m\T[1]=0
  *m\x[2]=0 : *m\y[2]=0 : *m\Z[2]=Z : *m\T[2]=0
  *m\x[3]=0 : *m\y[3]=0 : *m\Z[3]=0 : *m\T[3]=1
EndProcedure
Procedure SetRotX(*m.Mat, angle.d)
  Protected s.d=Sin(angle)
  Protected C.d=Cos(angle)
  *m\x[0]=1 : *m\y[0]=0 : *m\Z[0]=0 : *m\T[0]=0
  *m\x[1]=0 : *m\y[1]=C : *m\Z[1]=s : *m\T[1]=0
  *m\x[2]=0 : *m\y[2]=-s : *m\Z[2]=C : *m\T[2]=0
  *m\x[3]=0 : *m\y[3]=0 : *m\Z[3]=0 : *m\T[3]=1
EndProcedure
Procedure SetRotY(*m.Mat, angle.d)
  Protected s.d=Sin(angle)
  Protected C.d=Cos(angle)
  *m\x[0]=C : *m\y[0]=0 : *m\Z[0]=s : *m\T[0]=0
  *m\x[1]=0 : *m\y[1]=1 : *m\Z[1]=0 : *m\T[1]=0
  *m\x[2]=-s : *m\y[2]=0 : *m\Z[2]=C : *m\T[2]=0
  *m\x[3]=0 : *m\y[3]=0 : *m\Z[3]=0 : *m\T[3]=1
EndProcedure
Procedure SetRotZ(*m.Mat, angle.d)
  Protected s.d=Sin(angle)
  Protected C.d=Cos(angle)
  *m\x[0]=C : *m\y[0]=s : *m\Z[0]=0 : *m\T[0]=0
  *m\x[1]=-s : *m\y[1]=C : *m\Z[1]=0 : *m\T[1]=0
  *m\x[2]=0 : *m\y[2]=0 : *m\Z[2]=1 : *m\T[2]=0
  *m\x[3]=0 : *m\y[3]=0 : *m\Z[3]=0 : *m\T[3]=1
EndProcedure
Procedure Multiply(*m.Mat,*n.Mat,*result.Mat)
  *result\x[0]=*m\x[0]**n\x[0] + *m\x[1]**n\y[0] + *m\x[2]**n\Z[0] + *m\x[3]**n\T[0]
  *result\y[0]=*m\y[0]**n\x[0] + *m\y[1]**n\y[0] + *m\y[2]**n\Z[0] + *m\y[3]**n\T[0]
  *result\Z[0]=*m\Z[0]**n\x[0] + *m\Z[1]**n\y[0] + *m\Z[2]**n\Z[0] + *m\Z[3]**n\T[0]
  *result\T[0]=*m\T[0]**n\x[0] + *m\T[1]**n\y[0] + *m\T[2]**n\Z[0] + *m\T[3]**n\T[0]
  
  *result\x[1]=*m\x[0]**n\x[1] + *m\x[1]**n\y[1] + *m\x[2]**n\Z[1] + *m\x[3]**n\T[1]
  *result\y[1]=*m\y[0]**n\x[1] + *m\y[1]**n\y[1] + *m\y[2]**n\Z[1] + *m\y[3]**n\T[1]
  *result\Z[1]=*m\Z[0]**n\x[1] + *m\Z[1]**n\y[1] + *m\Z[2]**n\Z[1] + *m\Z[3]**n\T[1]
  *result\T[1]=*m\T[0]**n\x[1] + *m\T[1]**n\y[1] + *m\T[2]**n\Z[1] + *m\T[3]**n\T[1]
  
  *result\x[2]=*m\x[0]**n\x[2] + *m\x[1]**n\y[2] + *m\x[2]**n\Z[2] + *m\x[3]**n\T[2]
  *result\y[2]=*m\y[0]**n\x[2] + *m\y[1]**n\y[2] + *m\y[2]**n\Z[2] + *m\y[3]**n\T[2]
  *result\Z[2]=*m\Z[0]**n\x[2] + *m\Z[1]**n\y[2] + *m\Z[2]**n\Z[2] + *m\Z[3]**n\T[2]
  *result\T[2]=*m\T[0]**n\x[2] + *m\T[1]**n\y[2] + *m\T[2]**n\Z[2] + *m\T[3]**n\T[2]
  
  *result\x[3]=*m\x[0]**n\x[3] + *m\x[1]**n\y[3] + *m\x[2]**n\Z[3] + *m\x[3]**n\T[3]
  *result\y[3]=*m\y[0]**n\x[3] + *m\y[1]**n\y[3] + *m\y[2]**n\Z[3] + *m\y[3]**n\T[3]
  *result\Z[3]=*m\Z[0]**n\x[3] + *m\Z[1]**n\y[3] + *m\Z[2]**n\Z[3] + *m\Z[3]**n\T[3]
  *result\T[3]=*m\T[0]**n\x[3] + *m\T[1]**n\y[3] + *m\T[2]**n\Z[3] + *m\T[3]**n\T[3]
EndProcedure
Procedure Recalc()
  Protected i
  
  Multiply(@Camera,@Matrix,@Calc)
  For i=1 To Punkte
    With Points(i)
      viewx = \x*Calc\x[0] + \y*Calc\x[1] + \Z*Calc\x[2] + Calc\x[3]
      viewy = \x*Calc\y[0] + \y*Calc\y[1] + \Z*Calc\y[2] + Calc\y[3]
      viewz = \x*Calc\Z[0] + \y*Calc\Z[1] + \Z*Calc\Z[2] + Calc\Z[3]
      
      scale=CamFD/viewz
      \_X=viewx*scale+offsetX
      \_Y=viewy*scale+offsetY
      \_size=scale*#pointsize
      
    EndWith
  Next i
EndProcedure
Procedure redraw()
  Protected i.w
  
  StartDrawing(ScreenOutput())
    Box(0,0,screenx,screeny,$F0F0F0)
    
    For i=1 To Punkte
      Circle(Points(i)\_X,Points(i)\_Y,Points(i)\_size,$E04040)
    Next i
    For i=1 To Linien
      LineXY(Points(Lines(i)\von)\_X,Points(Lines(i)\von)\_Y,Points(Lines(i)\nach)\_X,Points(Lines(i)\nach)\_Y,$8080F0)
    Next i
    
  StopDrawing()
EndProcedure
Procedure Text(x.l,y.l,v.d)
  StartDrawing(ScreenOutput())
    DrawText(x,y,StrD(v,3))
  StopDrawing()
EndProcedure
Procedure Window()
  Global win=OpenWindow(0,0,0,screenx,screeny,"3D",#PB_Window_ScreenCentered)
  InitSprite()
  OpenWindowedScreen(WindowID(0),0,0,screenx,screeny,0,0,0)
  SetTimer_(win,1,100,0)
EndProcedure
Procedure Init()
  CamFD=200
  SetTransformation(@Camera,0,0,200)
EndProcedure
Procedure Main()
  SetNorm(@Matrix)
  Window()
  Repeat
    FlipBuffers(1)
    
    Recalc()
    redraw()
    
    Text(10,50,CamFD)
    Text(10,70,scale)
    
    Select WaitWindowEvent()
        
      Case #WM_TIMER
        ;n+1
        ;SetRoty(@Camera,n/#PI/2)
        
      Case #WM_CHAR
        Break
        
      Case #WM_LBUTTONDOWN
        ;
        
      Case #WM_RBUTTONDOWN
        ;
        
      Case #WM_MOUSEMOVE
        
        If GetKeyState_(#VK_SHIFT)&128
          SetTransformation(@Matrix,WindowMouseX(0)-offsetX,WindowMouseY(0)-offsetY,0)
        ElseIf GetKeyState_(#VK_CONTROL)&128
          SetScale(@Matrix,WindowMouseX(0)/100,WindowMouseY(0)/100,1)
        Else
          SetRotX(@RotXMat,WindowMouseY(0)/100)
          SetRotY(@RotYMat,WindowMouseX(0)/100)
          Multiply(@RotXMat,@RotYMat,@Matrix)
        EndIf
        
    EndSelect
    
  ForEver
  KillTimer_(win,1)
EndProcedure

Init()
Main()

Publié : jeu. 25/sept./2008 18:22
par Frenchy Pilou
tout cela se fait avec les "lignes d'aides" !!!
par exemple en dessinant avec la fonction droite si au premier clic on fait clic/bouger sans relacher/relacher un peu plus loin, une ligne pointillée se dessine! :D
et une petit boitier blanc apparait, si l'on met la souris dessus (+clic) un menu contextuel apparaît pour amplifier encore les possibilités de ces "lignes d'aide" ;)
Quand une fonction est lancée on peut dessiner autant de ligne d'aide que l'on veut avant le 1er clic, après le 1er clic
Elles deviennent support d'accroche pour n'importe quoi!

Une de ces lignes dessinées entre 2 sommets de volumes quelconques va ainsi par exemple donner le point "médian" sur lequel va s'accrocher le dessin de la fonction en cours!

C'est une petite gesticulation à prendre mais ultra puissante!
Elles vont disparaître dès que l'objet est défini
Il suffit de recommence dès qu'une nouvelle fonction est appellée ;)

Tous volumes a aussi ses points d'accroches (milieu par exemple)

Un des systèmes d'aide au dessin le plus puissant tout programmes confondus!

Ps IL faut évidemment côcher tous les accroches Bouton Menu Options/Snaps/Snap sur

Il me semblequ'il y a une video là (CLiquer sur Donwnlod this file" et attendre sans rien cliquer d'autre, car c'est bourré de pub! :roll:
Le chargement débutera 5 secondes après :)

Publié : jeu. 25/sept./2008 19:51
par kernadec
ok je vais regarder la video
je vais essayer tout les sous menus
il arrive quelque fois que les choses simple nous échappe
merci

j'ai suis sur le site, j'ai trouve des exemples avec une doc html bien meme cool, mais la video je me suis pris les pieds dans le divx je n'ai pas trouvé le lien, mais je n'avais pas beaucoup de temps, j'y retournerais bien sur c'est la 3D avec de belle carrosserie, mais ce n'était pas celle que je recherche lolllll

Publié : ven. 26/sept./2008 0:52
par Frenchy Pilou
une petite vidéo - ligne.zip pour expliciter les lignes décrite au-dessus :)
Format avi à lire de préférence avec des trucs du genre VLC et pas la daube du krosoft :lol:

Publié : ven. 26/sept./2008 10:27
par kernadec
bonjour et merci
j'ai vu la video, et pour VLC je partage ton avis

Pardon bissectrice j’ai trouvé , je n’avais pas beaucoup chercher a vrai dire,
Mais perpendiculaire ..avec sa longueur ce n’est pas direct
en commande menu dommage
Pour le moment j’ai toujours le problème du polygone circonscrit

exemple: pour l'instant je construit un polygone inscrit, pour essayer d'obtenir un polygone ext..
mais je cherche la commande pour modifie la taille en homothétie de ce polygone
mais je trouve rien pour l'accrocher par un point médian de son cote
et ensuite l' accrocher sur le perimetre, elle doit exister mais je n'ai pas réussi a la trouvé?
il m'arrive souvent d'être a cote de mes pompes

je pensais pouvoir utilisé ce logiciel a l’intuition, mais voila quelques maladresses de débutant
dans la prise en main, mais ce n'est pas grave.
et comme ça a l’air de valoir le coup, je vais y passer du temps.
Bon ! je vais lire la doc!!!

merci de ta patience