Gambas France BETA


Pas de compte ? Incription

Projet d'un programme de dessin

12
AuteurMessages
lapenduledargent#1 Posté le 12/10/2011 à 05:06:39
Bonjour à tous,

Parallèlement à mon projet de générateur de Gcode et pour apprendre, je vais me lancer dans un programme de dessin technique 2D.
J'ai tellement peux trouvé d'applications complète sur DRAW ainsi que le peux de tuto en Gb3 que je pense que les sources pourraient aider notre petite communauté ;)

Le projet s'appellera GambasCad2D.

Qu'en pensez-vous ?

Pierre
manu#2 Posté le 12/10/2011 à 16:42:14
Avec Gambas ca roule !Oui un projet de dessin technique est une excellente idée :)

Je ne suis pas sûre que ce soit simple à faire, c'est un bon challenge. Dans le même type de logiciel, j'ai longtemps cherché un logiciel pour faire des plans de bâtiments de manière simple, avec les cotes, les calculs de surfaces,les portes les fenêtres etc...

Sur linux, il y a rien de simple comme architecte 3d de Micro application par exemple. Si ton soft peux faire ca aussi, ce serais encore mieux :)
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
manu#3 Posté le 12/10/2011 à 17:29:45
Avec Gambas ca roule !Pierre,

Tu as testé ce logicel ? http://www.ribbonsoft.fr/
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
gambix#4 Posté le 12/10/2011 à 19:20:33
Faire simple !et draw ne sera peut être pas l'arme absolue :)

opengl ?


Mais bon pour commencer draw peut être pas mal !

(pense a utiliser l'event _draw)

et regarde le code de iconview dans le répertoire comp de gb
Moins de texte dans une signature c'est agrandir son espace.
linuxos#5 Posté le 12/10/2011 à 21:27:31
Un peu de sel, de poivre et la crevette sera... Bonsoir,

Si cela peut intéresser quelqu'un, j'ai déjà. planché sur un logiciel de dessin vectoriel.
Il est loin d'être fini mais il y a déjà une bonne base.

Peut être que cela t'aidera dans ton projet lapenduledargent

PS: c'est vraiment une ébauche.

Je vais le déposer sur la forge a titre d'exemple

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jeanyvon#6 Posté le 13/10/2011 à 05:20:01
Gambas? Ma! Et gustohello!
Je ne le retrouve plus.....
Il y avait un Turc qui avait écrit un "gambascad" en V2
ça semblait prometteur.
mais pour arriver à autocad : Y a du taff :drunken:
@+
JY
Vieillir? On peut retarder mais pas y échapper!
manu#7 Posté le 13/10/2011 à 06:02:05
Avec Gambas ca roule !Jean Yvon , le lien a déjà été donné : https://sites.google.com/site/cadcizim/kedicadenglish

Et maintenant c'est en gambas3 :)
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
gambix#8 Posté le 13/10/2011 à 06:06:11
Faire simple !bande de lève tot !
Moins de texte dans une signature c'est agrandir son espace.
lapenduledargent#9 Posté le 13/10/2011 à 06:52:54
Bonjour à tous,

bande de lève tot !
Faut choisir ! certain codeurs se couchent tard et d'autres tôt ;)

Un grand merci pour votre intérêt, c'est preuve que ça peut être intéressant.

Super le programme d'Olivier, là tu es déjà bien avancé. J'aime bien les dessins des règles...

Pour Manu, oui, je connais Qcad, mais aussi Freecad (en 3D) mais je voudrai pas aller jusque là, le but final est de faire des parcours d'outil pour CNC et de l'import de DXF.

Pour Gambix, pour OpenGl, j'ai vu une page dans la doc Gambas, ça fonctionne ? Mais je reste modeste à mon niveau débutant, j'essaie toujours avec Draw.
Pour la 3D, il y a des gros projets en cours comme Freecad, ou Heekscad, mais pas d'équivalent dans le libre comme Solidworks. C'est vraiment un lourds travail.
J'ai vu les vidéos et je suis étonné des possibilités de Kedicad en 3D et en gambas.

pense a utiliser l'event _draw


Tu veux dire d'utiliser la méthode Draw.Begin et Draw.End ?

et regarde le code de iconview dans le répertoire comp de gb

Je l'ai pas trouvé, mais j'ai vu des exemples.

Justement, c'est une question que je me pose, avec Draw, je sais à présent dessiner une ligne, un rectangle,.. ça fonctionne mais je pense qu'il faudra afficher chaque commande Draw dans un contrôle. Ce qui est appelé l'arbre de construction en CAO 3D.
Olivier pour les lignes, utilise une ListContainer. Ces données serviraient pour des fonctions de cotation, de centrage, groupage, etc... mais aussi pour l'enregistrement.
C'est à partir de ce contrôle que serait affiché le DrawingArea.
Un exemple ici : http://yorik.uncreated.net/scripts/draft.jpg

Mais voilà qu'utiliser comme type de contrôle, Treeview, Iconview, Listview.
C'est un choix important qui est le centre de mon application.
Je dois donc pouvoir sélectionner, modifier, ajouter, afficher les lignes.

A bientôt et bonne journée à tous.

Pierre


gambix#10 Posté le 13/10/2011 à 12:20:42
Faire simple !Il y a un point important que tu n'a pas compris. C'est que les éléments ne sont pas stocké dans un controle mais dans un tableau de classes.


Par exemple on peut imaginer une classe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
' Gambas class file

'Gambas Class
'Shape

PRIVATE $iX2 AS INTEGER ''Stock la position Droite de l'objet
PRIVATE $iY2 AS INTEGER ''Stock la valeur Bas de l'objet

''Définit le type d'objet
''1: Ligne
''2: Rectangle
''3: Cercle
PUBLIC Type AS INTEGER

''Définit La position Gauche de l'objet
PUBLIC X AS INTEGER

'' Définit La position Haut de l 'objet
PUBLIC Y AS INTEGER

''Définit la position droite de l'objet
PROPERTY X2 AS INTEGER

''Definit la position bas de l'objet
PROPERTY Y2 AS INTEGER

'' Définit La Largeur de l'objet
PROPERTY Width AS INTEGER

'' Définit La hauteur de l'objet
PROPERTY Height AS INTEGER


PRIVATE FUNCTION X2_Read() AS INTEGER

RETURN $iX2

END

PRIVATE SUB X2_Write(Value AS INTEGER)

$iX2 = Value

END

PRIVATE FUNCTION Y2_Read() AS INTEGER

RETURN $iY2

END

PRIVATE SUB Y2_Write(Value AS INTEGER)

$iY2 = Value

END

PRIVATE FUNCTION Width_Read() AS INTEGER

RETURN $iX2 - X

END

PRIVATE SUB Width_Write(Value AS INTEGER)

$iX2 = X + Value

END

PRIVATE FUNCTION Height_Read() AS INTEGER

RETURN $iY2 - Y

END

PRIVATE SUB Height_Write(Value AS INTEGER)

$iY2 = Y + $iY2

END



A partir de la il suffit simplement de stocker l'objet créé a chaque fois dans un tableau

1
PRIVATE $aShapes AS NEW Shape[] ''Tableau de Shape


Puis de le parcourrir llors de l'appel d'affichage d'un drawing area, mais pour gagner en vitesse on n'affiche que ce qui est affichable


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
PUBLIC SUB dwaView_Draw()
''Objet représentant un shape
DIM hShape AS Shape

FOR EACH hShape IN Shapes

IF hShape.X < 0 AND IF hshape.X2 < 0 THEN CONTINUE
IF hShape.X2 > Draw.width AND IF hShape.X > Draw.Width THEN CONTINUE
IF hShape.Y < 0 AND IF hShape.Y2 < 0 THEN CONTINUE
IF hShape.Y2 > Draw.Height AND IF hShape.Y > Draw.Height THEN CONTINUE
SELECT CASE hShape.Type
CASE 1
Draw.Line(hShape.X, hShape.Y, hShape.X2, hShape.Y2)
CASE 2
Draw.Rect(hShape.X, hShape.Y, hShape.Width, hShape.Height)
CASE 3
Draw.Ellipse(hShape.X, hShape.Y, hShape.Width, hShape.Height)

END SELECT
NEXT

'Ici le code pour dessiner les poignée sur le dernier shape
Draw.Fillstyle = Fill.Solid
Draw.FillColor = Color.Green

Draw.rect(hShape.x - 2, hShape.Y - 2, 4, 4)
Draw.rect(hShape.x2 - 2, hShape.Y - 2, 4, 4)
Draw.rect(hShape.x2 - 2, hShape.Y2 - 2, 4, 4)
Draw.rect(hShape.x - 2, hShape.Y2 - 2, 4, 4)



END



Voila ... le drawing area tout comme le grid view sauce gambas n'est qu'un viewer pas une zone de stockage de donnée

Les widget comme les treeview on ce défaut de ne pouvoir servir qu'a stocker peu d'info... en programmation moderne on stock dans des variable interne et les widget ne servent qu'a afficher le contenu.
Moins de texte dans une signature c'est agrandir son espace.
jeanyvon#11 Posté le 13/10/2011 à 18:30:21
Gambas? Ma! Et gustohello!
Bon ton code, je le comprends mais ce que je comprend pas c'est ton histoire de stockage. Quand tu as mille lignes sur un dessin tu stock les coordonnées dans une bdb tu peux pas faire ça dans une classe. La mémoire de la machine n'est pas infini. Autocad tournait avec 512k.
Mais je me trompe peut être(pas pour autocad)!
Vieillir? On peut retarder mais pas y échapper!
gambix#12 Posté le 13/10/2011 à 19:39:34
Faire simple !oui tu te trompe :)...

le stockage dans un tableau en mémoire est obligatoire .... même pour autocad. C'est un problème de vitesse d'accès au données.
Moins de texte dans une signature c'est agrandir son espace.
lapenduledargent#13 Posté le 14/10/2011 à 16:51:26
Bonsoir Manu, bonsoir les amis,

D'abord, un grand merci pour ton code :)
De mon côté, j'essaie de le comprendre.

1/ Tu crées une classe qui a pour fonction de traiter les données de ton dessin.
2/ Dans ton main, tu déclares la variable qui reçoit les données du dessin.
Dans la Drawingarea tu places la suite de ton code
3/ Lorsque tu dessines, comment fais tu pour tracer par exemple un rectangle ?
Pour essayer j'ai fait un bouton et j'ai fais par exemple Shape[10,20,30,40]mais ça me retourne une erreur !
Où placer le Draw.begin ?

A bientôt

Pierre
gambix#14 Posté le 14/10/2011 à 17:47:46
Faire simple !Je croitque le mieux serait que je fasse un prog de démo :)
Moins de texte dans une signature c'est agrandir son espace.
lapenduledargent#15 Posté le 14/10/2011 à 18:20:34
Ah, ça ce serait SUPER ... si tu as un peu de temps...

Pierre
12