Boutique Cinema 4D
Affichage des résultats 1 à 11 sur 11

Discussion: Tool Plugin + snap

  1. #1
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964

    Tool Plugin + snap

    Salut tout le monde après ma découverte de la journée ! (le snapping 3D fonctionne suffit juste de cliquer la petite boiboite ^^) j'essaye d'implémenter le contraint axis qui est super utile dans 3ds max.
    Pour les personnes qui ne connaissent pas ceci permet de contraindre le snapping sur un axe => http://recordit.co/W7ABRvtr1S

    Donc pour le moment j'ai réussi à refaire ceci dans c4d via un xpresso de manière crado. (voila le resultat) http://recordit.co/IVPNATWFPp et le fichier ici snap.c4d. Ici c'est de manière crado (uniquement sur 1 point et je recup pas les positions avant modification donc logiquement j'ai set en dur les position c'étais juste pour voir si c'étais faisable)

    Bref mon but est d'avoir vraiment quelque chose comme dans max donc pas de tag à rajouter à l'objet et tout.

    Donc voici pour moi les options que je dispose:
    1. Python : ToolData mais je ne peux pas use les fonction de snap dejà toute faite il faut que je les refasse moi même. Si j'ai bien compris je devrais faire un GeRayCollider de la selection vers l'axes que je veux et un autre ray de la camera à l'endroit de la souris et si il y à un point a l'intersection des deux alors je l’amène à la position que je veux? Ca me parait lourd et pieux fiable...
    2. Python : MessageData intercepter les messages en startMove/ EndMove mais je ne pense pas qu'on y a accès en python non?
    3. C++ : Pareil le MessageData mais du coup la le point va se téléporter non? Et surtout visuellement le point sera à l'endroit snaper puis lorsqu'on relachera ça ira au point qu'on veux. Donc c'est pas visuellement intuitif comme j'ai réussi à le faire avec mon xpresso
    4. C++ : SnapData la je pense que c'est possible Mais mes compétence en C++ sont plutôt limité donc ça me fait un peu peur. Si je comprend bien il fraudais que je store les positions des points sélectionné lors du InitSnap. Et c'est après que j'avou ne pas trop comprendre comment ça fonctionne. De ce que je capte dans la fonction Snap on renvoi via une struct SnapPoint les données mais la on ne peux renvoyer qu'une matrice. Cette matrice c'est comme toute les matrice dans C4D elle représente bien la position / rotation / scale d'un objet donc pas uniquement d'un point. Ou bien alors la matrice va représenter le point final de snap. Et si tel est le cas du coup ça ne snapperais plus comme dans mon exemple.



    Bref merci d'avance !

    Bon enfaîte je regardais le mauvais exemple avec https://github.com/PluginCafe/cinema...l/snaptool.cpp légèrement modifié ça fonctionne ! Voici un exemple : http://recordit.co/XHJGA5DaBB

    Plus qu'a faire une interface et un nouveau plugin sera la.
    Bon bha au final je n'aurai pas fait ce post pour rien car je sent que je vais avoir besoin de votre aide rien que pour récupérer la BaseSelection et les points relatifs car pour le moment et c'est logique l'exemple modifie l'ensemble de l'objet.

    De plus j'ai déjà une question j'ai du mal à comprendre l'utilité de ceci.
    Code:
        // add an inferred guide to start point this show its effect only if dynamic guide snap is on
        _snap->AddInferred(doc, guideMatrix, INFERRED_GUIDE_POINT);
    Dernière modification par gr4ph0s ; 23/09/2016 à 03h44.
    SDK Specialist
    MAXON Computer GmbH

  2. #2
    Gourou Avatar de lenogre
    Date d'inscription
    août 2002
    C4D version
    R20 Studio
    OS
    OS 10.12.6
    Messages
    4 366
    Je n'ai peut-être pas compris mais dans c4d, tu as des icônes X Y Z qui font ça très bien (en haut à gauche) !
    Tout ce que j'écris est à prendre au 15e degré. Car comme dit le proverbe chinois : Quand le dragon d'or, le ragondin ; voilà qui devrait faire taire les critiques et me mettre à l'abri d'attaques frontales.

  3. #3
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    Je suis d'accord en 2D mais en 3D le snap ne fonctionne plus. Du moins je n'arrive pas à avoir un truc aussi intuitif comme dans le plugin. Après c'est peut etre moi qui fait un truc de mal

    ici pas de snap http://recordit.co/vnNPhJGl3J
    Dernière modification par gr4ph0s ; 23/09/2016 à 12h51.
    SDK Specialist
    MAXON Computer GmbH

  4. #4
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    Alors voila mon problème. J'arrive à modifier les points sélectionné cependant je ne comprend pas pourquoi il utilise les coordonnées de l'espace local de la cible sur mon objet et non pas dans l'espace global du monde (cf http://recordit.co/xbp8xosVbC )

    De plus si on regarde dans le SDK https://developers.maxon.net/docs/Ci...00767c3065da8c le result il y a bien écrit global space du coup je ne comprend pas trop.

    Voici mon code pour le moment (j'ai pas encore clean de toute les merdes du sdk donc y'a des variables inutilisé et co mais je veux d'abord avoir un truc qui fonctionne plutôt que de tout retirer):
    http://pastebin.com/QJkmYQFY
    la partie intéressante correspond uniquement à ceci:
    Code:
    	win->MouseDragStart(button, mouseX, mouseY, MOUSEDRAGFLAGS_DONTHIDEMOUSE | MOUSEDRAGFLAGS_NOMOVE);
    	while (win->MouseDrag(&dx, &dy, &device) == MOUSEDRAGRESULT_CONTINUE)
    	{
    		if (dx == 0.0 && dy == 0.0)
    			continue;
    
    
    		mouseX += dx;
    		mouseY += dy;
    		snapResul = SnapResult();
    		destPos = bd->SW(Vector(mouseX, mouseY, bd->WS(startPos).z));
    
    
    		// if snap modify initial position here pass SNAPFLAGS_IGNORE_SELECTED to avoid self snapping
    		// IMPORTANT : call SnapCore:Update() before snap if geometry is changed during MouseDrag
    		if (_snap->Snap(destPos, snapResul, SNAPFLAGS_IGNORE_SELECTED) && snapResul.snapmode != NOTOK)
    		{
    			PointObject*	pobj = ToPoint(op);
    			BaseSelect* bs = pobj->GetPointS();
    
    
    			const Vector* pts = pobj->GetPointR();
    			Vector* points = pobj->GetPointW();
    			Int32 seg = 0, a, b, i;
    			while (bs->GetRange(seg++, LIMIT<Int32>::MAX, &a, &b))
    			{
    				for (i = a; i <= b; ++i)
    				{
    					if (data.GetBool(1002, true))
    						{destPos.x = snapResul.mat.off.x;}
    					else{
    						destPos.x = pts[i].x;
    					}
    
    
    					if (data.GetBool(1003, true))
    						{destPos.y = snapResul.mat.off.y;}
    					else{
    						destPos.y = pts[i].y;
    					}
    
    
    					if (data.GetBool(1004, true))
    					{destPos.z = snapResul.mat.off.z;}
    					else{
    						destPos.z = pts[i].z;
    					}
    
    
    					points[i] = destPos;
    					op->Message(MSG_UPDATE);
    				}
    			}
    
    
    			DrawViews(DRAWFLAGS_ONLY_ACTIVE_VIEW | DRAWFLAGS_NO_THREAD | DRAWFLAGS_NO_ANIMATION);
    		}
    Sinon au pire je pourrais recup la position entre op et l'objet cible et rajouter la distance qu'il y a entre les deux mais je ne sais pas comment récupérer l'objet cible.

    Merci d'avance !
    Dernière modification par gr4ph0s ; 27/09/2016 à 02h16.
    SDK Specialist
    MAXON Computer GmbH

  5. #5
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    En dehors du fait d'apprendre et de la fonction de 3DS qui est pas mal, tu connais la fonction de c4d quand tu fais un control+clic droit sur un axe ?

  6. #6
    Pilier Avatar de Floc
    Date d'inscription
    novembre 2012
    C4D version
    R15 Studio
    OS
    WindOSX
    Messages
    1 617
    N'insiste pas valkaari, il ne veut pas la connaitre.
    Dernière modification par Floc ; 28/09/2016 à 05h28.

  7. #7
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    Bha comme tu le souligne jaime bien apprendre ^^.
    Et oui je la connais mais je ne la trouve pas satisfaisantes car elle fonctionne uniquement qu'en 2d. Elle n'est pas intuitive dutout, il est impossible par exemple de constraindre deux axes en meme temps. Et de plus mon outil si il est en mode objet permettra de snap l'ensemble de l'objet d'un point selectionner alors que maintenant faut faire un point de pivot temporelle, plus avoir les contraintes cité auparavant.
    Alors je suis d'accord rien de sorcier mais bon je suis paresseux jaime pas faire des clicks ^^.
    SDK Specialist
    MAXON Computer GmbH

  8. #8
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    Je suis d'accords pour la contrainte sur deux axes (bien que, utiliser une vue 2D permet de le faire)

    Mais j'ai toujours pas compris pourquoi elle ne fonctionne pas en 3D. Qu'elle soit pas intuitive oui, mais elle fonctionne.

    On me demande parfois de créer des outils qui existent déjà, c'est pour ça que je me pose la question.

  9. #9
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    J'avais fait une discussion sur c4dcafe à propos de comment fonctionne le snap. Et en gros les handle ne fonctionne que en 2D tandis que la petite boiboite elle fonctionne en 3D. Pourquoi? Aucune idée mais c'est comme ça.

    http://www.c4dcafe.com/ipb/forums/to...-is-fantastic/

    De plus 3D kiwi à pris le temps de faire 2 vidéos pour montrer les features que tu dis plus haut. Certe elles sont intéressante et peuvent être utiles dans certain cas mais pour moi je trouve que aucune n'est vraiment acceptable pour ce que je veux faire simplement(moins de 2clicks) snapper avec des contraintes d'axes en vue 3D / 2D sans me prendre la tête avec des guides ou autres.

    Après je ne dis pas que ça existe pas dans c4d je sais que ça existe juste que c'est pas fonctionnel. Et je pense que n'importe quelle personnes qui à utilisé 3ds max est d'accord avec moi.
    SDK Specialist
    MAXON Computer GmbH

  10. #10
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    Tu disais que ça ne fonctionnait pas, c'est ça que je ne comprenais pas.

  11. #11
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    Bon en tout cas j'ai résolut mon problème qui étais tout bête et logique.
    la fonciton de snapp me retournais les bon coordonnées sauf que moi je faisais position actuel du point = valeur du point. Hors vu que l'objet à une matrice exterieur ça faisais le problème. Enfin je ne saurais l'expliquer de façon compréhensible mais moi j'ai compris ^^.

    Pour faire simple il suffisais que je fasse
    Code:
    destPos.z = snapResul.mat.off.z - currentObjPos.z;
    au lieu de
    Code:
    destPos.z = currentObjPos.z;
    Bon maintenant faut que je recup les différents modes (objet/polygon/edge/point) et ça devrais être good pour une première version !
    Dernière modification par gr4ph0s ; 28/09/2016 à 20h23.
    SDK Specialist
    MAXON Computer GmbH

Discussions similaires

  1. Snap options en model mode
    Par human dans le forum Modélisation
    Réponses: 0
    Dernier message: 27/05/2013, 15h58
  2. un snap sur la spline
    Par flomoa dans le forum Modélisation
    Réponses: 16
    Dernier message: 04/06/2008, 14h10
  3. active tool
    Par masterpriest dans le forum Nouveaux membres
    Réponses: 15
    Dernier message: 22/01/2006, 15h20
  4. Urgent - Plugin Amazon Tool (Poser vers C4D
    Par sulian dans le forum Plugins
    Réponses: 2
    Dernier message: 21/12/2004, 12h39
  5. Plugin AXIS TOOL
    Par p62dok dans le forum Plugins
    Réponses: 3
    Dernier message: 29/01/2003, 16h55

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
Mediaworks - Logiciels 3D | Design Internet - Creation site internet