PDA

Voir la version complète : [resolu] - dessiner... (c'est gagner)



mamy
13/07/2007, 12h01
bonjour
j'aimerai dessiner un trait dans la fenetre editeur active et je ne sais pas trop comment m'en sortir
en fait avec les fonctions de c4d que j'essaie, j'obtiens des traits sur la scene de travail mais ce n'est pas ce que je cherche a obtenir
euh..je sais pas si c'est assez clais, en gros je veux un trait en 2d a l ecran ( qui relierait les 2 bords de la fenetre) independamment de la scene 3d
quelqu'un aurait une idée?

xs_yann
13/07/2007, 12h59
Salut mamy, :D
Je ne sais pas si j'ai bien compris mais si c'est ça que tu veux faire :
http://ykoeth.free.fr/fc4d/mamy.jpg
http://ykoeth.free.fr/fc4d/mamy1.jpg

Il te suffit de créer une caméra à X=0 Y=0 Z=0 ; H=0° P=0° B=0° puis de créer un plan d'orientation +Z, hauteur = 1, de la placer à Z=10 et enfin le mettre enfant de la caméra. Dans le menu Cameras tu choisi ta caméra.
Si tu ne peux pas mettre ta caméra à zero pour placer le plan, utilise la fonction "Transférer". :wink:

mamy
13/07/2007, 13h11
en fait je voudrais obtenir en programmant la meme chose que sur l'image (le rectangle rouge autour de la fenetre)

[Fichier joint supprimé par l'administrateur]

xs_yann
13/07/2007, 13h21
Tu dois pouvoir le faire avec la technique que j'ai expliqué précedement mais cela implique d'avoir une caméra et des objets plan pour les lignes rouges. :coup:
Autrement, ne connaissant pas trop le C++, je ne peut pas te conseiller. :?

mamy
13/07/2007, 13h25
ookie, merci quand meme yann

mamy
13/07/2007, 15h53
sinon ca n inspire vraiment personne d autre? :cry2:

kaliseb
13/07/2007, 16h15
Si tu veux juste un carré rouge autour de ton image, et si tu ne fais pas d'animation, pourquoi ne pas le faire en post prod ?

Sir Gong
13/07/2007, 16h19
Salut Mamy

Il faudrait peut-être que tu expliques un peu plus le pourquoi du comment pour que les gens puissent t'aider.
Pourquoi cherches-tu à faire cette ligne rouge en programmation ? Quel est le but ?

mamy
13/07/2007, 16h43
Salut Mamy

Il faudrait peut-être que tu expliques un peu plus le pourquoi du comment pour que les gens puissent t'aider.
Pourquoi cherches-tu à faire cette ligne rouge en programmation ? Quel est le but ?


ok alors le pourquoi du comment sans que ca devienne une longue histoire ( parce ca l est, tous mes posts depuis que je suis sur cette board sont liés)

je travaille sur une souris 3D qu'est ce que c'est? un peripherique mix d'une souris et d'un joystick
1 bouton permet de switcher entre mode 2d et 3d
en 2d c'est une souris normal (deplacements et tout)
en 3d, c'est un genre de mode joystick qui permet de controler un objet dans un logiciel 3d (donc translations et rotations de cet objet)
pouquoi le rectangle rouge? juste pour signaler a l'utilisateur qu'il est en mode 3d et donc que s'il deplace la souris en pensant deplacer le curseur, c'est loupé, c'est l'objet qui va bouger

voila voila, j'espere que c'est pas trop lourd a lire :odile:

Sir Gong
13/07/2007, 18h04
voila voila, j'espere que c'est pas trop lourd a lire :odile:
Ben non au contraire, c'est plutôt intéressant :wink:
Une sorte de périphérique qui switche entre la souris et le space explorer ?

Enfin bon, c'est pas moi qui vais pouvoir te renseigner, j'y connais vraiment rien, mais j'imaginais que les drivers se développaient au niveau de l'Os et pas du soft...

Ben heu, bonne continuation, en espérant qu'un type avec des neurones passe dans le coin... 8)

mamy
13/07/2007, 18h14
Enfin bon, c'est pas moi qui vais pouvoir te renseigner, j'y connais vraiment rien, mais j'imaginais que les drivers se développaient au niveau de l'Os et pas du soft...



c'est exact pour les drivers oui (en l occurence, nous avons un firmware integré a la souris donc plus de driver)
mais par contre ce qu'il faut developper c'est la communication entre le panneau de config de la souris et le logiciel specifique (d ou l interet des plugs in)
et donc voila mon probleme maintenant c'est ce rectangle rouge a dessiner pour dire a l utilisateur "hey mon coco, n oublie pas que t es en 3d la"

paspas
13/07/2007, 19h05
salut mamy

le plus simple je pense serrait de changer certain paramètre du monde ,

je m explique

il existe un container qui reprend par exemple le couleur des points sélectionner ou des polygone , le couleur des axes , .....

comme tout est dans un container tu sait tout réglé par coffee , il te suffirait de changer certaine caractéristique du monde quand tu passe en 2D et remettre les valeur par défaut quant tu repasse en 3D .

le voila : GetWorldContainer()

des Data en exemple : WPREF_BACKGROUND_COL pas tester mais je suppose change le la couleur du fond
WPREF_GRID_MAJOR_COL tj pas tester mais devrait changer la couleur de la grille

ça devrait donner comme code :

var monde ->GetWorldContainer();



var rouge = vector (255,0,0);


var défaut = monde->GetData();
println(défaut);// pour connaître dans la console les couleur :mrgreen: avant de la changer

monde->SetData(WPREF_GRID_MAJOR_COL,rouge);

pour la couleur se sont les paramètre RVB donc tu sait facilement les trouver

j espère que ça peut t aider

comme d' hab c' est de tête sans teste mais je pense que ça doit marcher ; mais vérifie avant la méthode pour utiliser les containers pour voir si j' ai pas fait d'erreur

paspas



ps pour la liste complete ce se trouve dans le sdk : Basic Functions

mamy
13/07/2007, 19h35
merci paspas :prie: :prie: :prie:
ca me semble etre une piste très interressante en effet
je m'en occupe dès lundi :efface:

paspas
13/07/2007, 21h04
ATTENTION je viens de faire un test

il faut une condition sinon le coffee tourne en boucle et risque de ralentir c4D
voila çà marche j ai tester

a adapter je sait pas comme tu test la vue dans laquelle tu est

ici c'est 2D3D la valeur test de la vue




var monde = GetWorldContainer(); // recupere le container du monde

var rouge= vector(255,0,0);//couleur rouge
var defaut = vector(0.2,0.2,0.2); // valeur defaut gris
var 2D3D; // bolenean test de vue a definir par ton programme

var couleur;

if (2D3D==0) couleur= defaut; // test pour connaître la vue 0 =3D
else couleur = rouge;// test pour connaître la vue 1 =2D

var test = monde->GetData(WPREF_GRID_MAJOR_COL); // vérifie quelle couleur est la grille

if (test != couleur) // si la couleur correspond pas a la vue souhaitée on change de couleur
{
monde->SetData(WPREF_GRID_MAJOR_COL,couleur); // change la valeur de la grille
SetWorldContainer(monde); // remet le container au monde
}



paspas

NiKo
13/07/2007, 21h33
Salut Mamy... Ce serai possible de savoir pour quel periphérique 3D tu travailles (en tant que futur utilisateur intéressé, pour ma part)? :wink:

mamy
16/07/2007, 10h40
Salut Mamy... Ce serai possible de savoir pour quel periphérique 3D tu travailles (en tant que futur utilisateur intéressé, pour ma part)? :wink:

je te laisse voir ca sur le site www.lexip.fr
a priori ca restera encore a usage professionnel au moment du lancement du produit mais il y a un usage grand public prévu il me semble

mamy
16/07/2007, 10h42
ATTENTION je viens de faire un test

il faut une condition sinon le coffee tourne en boucle et risque de ralentir c4D
voila çà marche j ai tester

a adapter je sait pas comme tu test la vue dans laquelle tu est

ici c'est 2D3D la valeur test de la vue




var monde = GetWorldContainer(); // recupere le container du monde

var rouge= vector(255,0,0);//couleur rouge
var defaut = vector(0.2,0.2,0.2); // valeur defaut gris
var 2D3D; // bolenean test de vue a definir par ton programme

var couleur;

if (2D3D==0) couleur= defaut; // test pour connaître la vue 0 =3D
else couleur = rouge;// test pour connaître la vue 1 =2D

var test = monde->GetData(WPREF_GRID_MAJOR_COL); // vérifie quelle couleur est la grille

if (test != couleur) // si la couleur correspond pas a la vue souhaitée on change de couleur
{
monde->SetData(WPREF_GRID_MAJOR_COL,couleur); // change la valeur de la grille
SetWorldContainer(monde); // remet le container au monde
}



paspas


merci encore paspas pour tous ces eclaircissements, je teste ca tout de suite
...par contre je ne suis pas sur d'avoir vu la macro WPREF_GRID_MAJOR_COL dans la SDK mais faut que je verifie

Sir Gong
16/07/2007, 12h18
merci encore paspas pour tous ces eclaircissements
Ah ben ça doit bien être la première fois qu'on lui dit ça :mrgreen:

Bon, je :arrow:

mamy
16/07/2007, 12h43
...par contre je ne suis pas sur d'avoir vu la macro WPREF_GRID_MAJOR_COL dans la SDK mais faut que je verifie


j'ai bien un VIEWCOLOR_GRID_MAJOR mais lorsque je le modifie rien n'y fait :cry2:

paspas
16/07/2007, 13h22
Ah ben ça doit bien être la première fois qu'on lui dit ça

:boss: tout arrive


j'ai bien un VIEWCOLOR_GRID_MAJOR mais lorsque je le modifie rien n'y fait

tient tu utilise bien le code que j' ai mis plus haut ??

chez moi j' avait utiliser une DU bolenean (2D3D) qui désactive : grille grise et activée : grille rouge , et je pouvait intervertir

chez moi ça marche :shock:


paspas

dernière précision , il faudra inclure également un code pour que quand tu ferme le document tu remette la grille par défaut , sinon le pauvre utilisateur devra a chaque fois qu il réouvre C4D allez la changer lui même manuellement :oops:

ben oui C4D garde les dernière préférence pour tout ce qui est couleur de grille , couleur fond .......

mamy
16/07/2007, 13h41
tient tu utilise bien le code que j' ai mis plus haut ??


dernière précision , il faudra inclure également un code pour que quand tu ferme le document tu remette la grille par défaut , sinon le pauvre utilisateur devra a chaque fois qu il réouvre C4D allez la changer lui même manuellement :oops:


voici le code equivalent en C++ -du moins ce que je crois etre- de ce que tu as fait en COFFEE,


static void Detourage ( )
{
BaseContainer bc = GetWorldContainer ( );
Vector gridColor = bc.GetVector ( VIEWCOLOR_GRID_MAJOR );
Vector newColor ( 255, 0, 0 );
if ( gridColor != newColor )
{
bc.SetVector ( VIEWCOLOR_GRID_MAJOR, newColor );
SetWorldContainer ( bc );
}
}


le test de passage 2d/3d se fait avant l appel de la fonction du genre


if ( 2d/3d )
{
Detourage();
}


le probleme en fait c'est que j'ai fait le test et la couleur de la grille change pas snif

paspas
16/07/2007, 14h06
Vector gridColor = bc.GetVector ( VIEWCOLOR_GRID_MAJOR );



est tu sure que ce GetVector soit bon en coffee c'est GetData pour récupere une donée du container en C je sais pas

paspas

mamy
16/07/2007, 15h07
Vector gridColor = bc.GetVector ( VIEWCOLOR_GRID_MAJOR );



est tu sure que ce GetVector soit bon en coffee c'est GetData pour récupere une donée du container en C je sais pas

paspas



le sdk conseille d utiliser les methodes ciblées selon le type de la variable à recuperer plutot que la generale GetData (donc GetBool, GetVector...)

paspas
16/07/2007, 16h53
et elle te dit quoi la console ?

mamy
16/07/2007, 17h02
et elle te dit quoi la console ?


non mais laisse tomber, en fait la macro VIEWCOLOR_GRID_MAJOR n'existait pas de base dans mon world container.
c'est lorsque j'ai fait un premier setvector qu'il l'a inséré (vue qu'il n existait pas).
du coup en fait j'ai une macro qui sert a rien dans mon world container.
je m'en suis rendu compte seulement après lorsque j'ai testé les autres macros du style VIEWCOLOR_GRID_MINOR, etc... et que la fonction me renvoyait le vecteur 0,0,0 a chaque fois
enfin bref...ce que je trouve vraiment bizarre, c'est qu'on n'ait pas les mêmes macros sous COFFEE et C++, c'est très...embetant pour rester poli

paspas
16/07/2007, 17h09
en C il faut peut être lui dire ce qu' est le monde ??

vu que le container du monde est les préférence de C4D quand il est ouvert ;)


tu peut simplement crée un container qui repent tout les préférence et le remplacer l' original quand t en a besoin !
et remettre l' original a la fin

pour ça tu crée une routine qui récupère dans un fichier le container d' origine tu le copie sur le disque , tu travaille avec le tient quand t en a besoin et tu remet l original quand ta fini :wink:

paspas

mamy
16/07/2007, 17h22
en fait c'est bon j'ai résolu le probleme, oh la la galère, ils ont vraiment un SDK pourri pour le C++, il est carrement pas a jour

donc pour tous ceux qui souhaite faire en C++ ce que paspas m'a proposé de faire (donc changer la couleur de la grille)
dans la sdk, ils vous disent d'utiliser GetViewColor ( LONG id ) pour chercher l'élément à modifier et SetViewColor(LONG colid, const Vector& col) pour modifier l'élément <id> avec le vecteur <col> (votre couleur)

sauf que ces abrutis vous disent "hey, cherchez les noms des constantes pour id dans le fichier c4d_colors.h or See COLOR_Constants"

donc vous, tout naivement, vous faites SetViewColor (COLOR_BG, mon_vecteur_couleur) (alors deja pour vous c'est pas trop la bonne constante puisque ca c'est pour la couleur de fond des fenetres, mais bon c'est pas grave on fait avec parce qu'il n'y a rien dans la liste proposée pour modifier la grille)
ben y a rien qui change

ah bah oui, il fallait utiliser les nouvelles constantes qui sont dans ge_prepass.h et qui commencent par VIEWCOLOR_
et bien entendu quand vous faites une recherche dans la doc SDK de VIEWCOLOR_ on vous donne la liste des constantes sans vous expliquer où elles peuvent servir

merci MAXON

donc en definitive:


Vector gridColor = GetViewColor ( VIEWCOLOR_GRID_MAJOR );
Vector newColor ( 255, 0, 0 );
if ( gridColor != newColor )
{
SetViewColor ( VIEWCOLOR_GRID_MAJOR, newColor );
DrawViews ( 0 );
}


et la vous avez le meme code que paspas en C++

mamy
16/07/2007, 17h26
serait-il possible de modifier le titre du sujet en y ajoutant [resolu] et de le clore svp messieurs les moderateurs :wink:
et encore merci à tous ceux qui y ont participé et l'ont fait avancer (et encore une fois surtout paspas, sans qui j'aurai galéré longtemps a resté sur mon idée de rectangle autour de la fenetre)

GaazMaster
16/07/2007, 17h33
Le clôturer c'est pas nécessaire ... Des fois qu'un autre fou furieux comme toi décide de le re-sortir ... :wink:
Pour la modification du titre je viens de le faire, mais tu peux faire de meme en modifiant le titre de ton premier message.

Bon courage pour la suite, et tiens nous au courant pour la suite de ton projet.

mamy
16/07/2007, 18h05
Le clôturer c'est pas nécessaire ... Des fois qu'un autre fou furieux comme toi décide de le re-sortir ... :wink:
Pour la modification du titre je viens de le faire, mais tu peux faire de meme en modifiant le titre de ton premier message.

Bon courage pour la suite, et tiens nous au courant pour la suite de ton projet.


merci bien
et y a pas de souci, je vous tiens au courant pour la suite