bseb67 Posté(e) le 9 janvier 2008 Posté(e) le 9 janvier 2008 salut! Ben voilà, je coince sur un truc depuis hier, j'ai des recherches pour savoir comment construiremes nouvelles données, mais autocad me renvoie:erreur: Erreur Automation Entrée incorrecte J'ai un bloc dynamique, j'arrive à le poser où je veux, mais il faut que j'adapte sa forme.Il comporte 6 propriétés: 4 doubles et 2 safearry de double, qui sont en fait des coordonnées 3D. ; on choisit le bloc (setq ename (car (entsel))) (setq e (vlax-ename->vla-object ename)) ;; récupérer les propriétés du bloc dynamique dans une liste (setq dbp (vla-getdynamicblockproperties e)) (setq dbp (vlax-variant-value dbp)) (setq dbp (vlax-safearray->list dbp)) Puis avec un while je boucle sur les propriétés. J'arrive à modifier les doubles avec:(vlax-put-property (nth cpt dbp) 'Value k) Mais pour les 2 points, niet :(. Pourtant je créer bien des données au même format que celles contenues dans le bloc:(vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 2)) (list 0.0 (* 1000.0 (distance impact PM)) 0.0)))Qui me renvoie bien un variant contenant un safearray de 3 doubles. Merci d'avance pour l'aide. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
bseb67 Posté(e) le 9 janvier 2008 Auteur Posté(e) le 9 janvier 2008 Petit supplément, Les propriétés sont bien en readonly false et si je bouge avec ma jolie souris le bloc, les valeursde ces propriétés changent bien. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Patrick_35 Posté(e) le 9 janvier 2008 Posté(e) le 9 janvier 2008 SalutTu peux simplifier(setq dbp (vla-getdynamicblockproperties e)) (setq dbp (vlax-variant-value dbp)) (setq dbp (vlax-safearray->list dbp))par(setq dbp (vlax-invoke e 'getdynamicblockproperties))Par contre, je ne comprends pas ce que tu veux faire :(Si tu as un exemple avec une explication plus clair qu'en termes techniques avec les Vlax-vbDouble,... (qu'on pourra ensuite aborder, mais il faut déjà comprendre ce que tu souhaites faire comme manip) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bseb67 Posté(e) le 10 janvier 2008 Auteur Posté(e) le 10 janvier 2008 Salut Patrick_35 et merci d'avance pour l'aide. J'ai fait des copies d'écran pour montrer ce que je cherche à faire.Au départ lorsque j'insère mon bloc cotation j'ai ceci: http:// http://bseb67.free.fr/cadxp/bloc_dyn_cotation/bloc_depart.PNG Ce que je cherche à faire c'est un fait coter les hauteurs des réseaux, donc de faire cela: http:// http://bseb67.free.fr/cadxp/bloc_dyn_cotation/modification.PNG Afin d'obtenir à l'arrivée ceci: http:// http://bseb67.free.fr/cadxp/bloc_dyn_cotation/bloc_final.PNG Sauf que, comme je n'arrive pas à modifier les points ORI1 et ORI2, le résultat n'est pas celui voulu: http:// http://bseb67.free.fr/cadxp/bloc_dyn_cotation/demi_resultat.PNG Voilà, j'espère être plus clair ainsi. ;) Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Patrick_35 Posté(e) le 10 janvier 2008 Posté(e) le 10 janvier 2008 SalutC'est plus claire comme illustration :) Testons(vlax-put (nth 8 dbp) 'value (mapcar '- '(840.0 285.0 0.0) (vlax-get e 'insertionpoint)))ou(vla-put-value (nth 8 dbp) (vlax-3d-point (mapcar '- '(840.0 285.0 0.0) (vlax-get e 'insertionpoint))))J'ai aussi cette erreur :( Bon, on va essayer en changeant la distance, mais que nenni(vlax-put (nth 0 dbp) 'value 110.0)ou(vla-put-value (nth 0 dbp) 110.0)J'ai nil en retour et rien n'a changé :casstet: Je continue de chercher @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bseb67 Posté(e) le 10 janvier 2008 Auteur Posté(e) le 10 janvier 2008 Re, moi ce qui m'énerve le plus c'est qu'en le faisant à la souris ca marche, et si cela ne fonctionneavec du code lisp ou vlisp, c'est vraiment pourri! :mad: Lundi j'ai fait mon lisp pour calculer le point d'insertion du bloc , c'est plus facile de développerdes méthodes mathématiques que de modifier les données. Depuis hier je visite toutes les pages possibles sur google pour trouver quelqu'un qui a trouvél'astuce. Merci encore pour l'aide. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Patrick_35 Posté(e) le 10 janvier 2008 Posté(e) le 10 janvier 2008 Re au cas ou, j'ai trouvé ce sujet et celui-ci @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bseb67 Posté(e) le 10 janvier 2008 Auteur Posté(e) le 10 janvier 2008 Re, Ben c'est pratiquement ce que je fais: (while (< cpt lg) ; on test le nom de la propriété (setq propname (vlax-get (nth cpt dbp) 'PropertyName)) (cond ((= (strcase propname) "DISTANCE") (vlax-put-property (nth cpt dbp) 'Value (distance (setq PM (getpoint)) (setq impact (getpoint)))) ) ((and (= (strcase propname) "ORIGIN") (= cpt 1)) (vla-put-value (nth cpt dbp) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 2)) (list 0.0 (* 1000.0 (distance impact PM)) 0.0)))) ) ((= (strcase propname) "POSITION X") (vlax-put-property (nth cpt dbp) 'Value 0.1) ) ((= (strcase propname) "POSITION Y") (vlax-put-property (nth cpt dbp) 'Value (distance impact PM)) ) ((= (strcase propname) "DISTANCE NGF") (vlax-put-property (nth cpt dbp) 'Value 0.0) ) ((and (= (strcase propname) "ORIGIN") (= cpt 5)) (vlax-put-property (nth cpt dbp) 'Value (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 2)) (list 300.0 0.0 0.0)))) ) ) ; cond ; on incrémente cpt (setq cpt (1+ cpt)) ) ; while Ce que je trouve bizarre aussi, c'est que les doubles sont en mètres, alors que les coordonnées des deux points sont apparemment en millimètres. :casstet: a+ Edit:J'ai oublié le test débile qui permet de vérifier: (vla-put-value (nth cpt dbp) (vla-get-value (nth cpt dbp))) Et bien autocad me jette aussi avec le même message :mad: :o [Edité le 10/1/2008 par bseb67] Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Patrick_35 Posté(e) le 11 janvier 2008 Posté(e) le 11 janvier 2008 Re,C'est bon, j'ai réussi. Je n'avais pas vu dans l'exemple que j'avais pris que j'ai comme valeurs imposéesAllowedValues (RO) = (100.0 101.0 103.0 127.0 133.0 140.0 ... )Ce qui fait que si je rentre une de ces valeurs(vlax-put (nth 0 dbp) 'value 100.0)un(vlax-get (nth 8 dbp) 'value)me retourne (44.6926 95.4426 0.0) Pour vérifier, je fais(vlax-put (nth 0 dbp) 'value 140.0)et un(vlax-get (nth 8 dbp) 'value)me retourne (64.6926 95.4426 0.0)Ma valeur X a bien changé :) ps : comme exemple de bloc dynamique, j'ai utilisé le bloc "Poutre à larges ailes - Métrique" du fichier "Structural - Metric.dwg" se trouvant dans le répertoire "Sample\Dynamic Blocks" @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bseb67 Posté(e) le 14 janvier 2008 Auteur Posté(e) le 14 janvier 2008 Re, En changeant la longueur, le point d'origine bouge :o !Ca m'a l'air bizarre, car tu mets 100 puis 140, mais la valeur en X ne bouge pas de 40, mais de 20,la moitié. Donc j'en déduis que les deux poignées bougent de chaque côté, et chacune de 20. ; IAcadDynamicBlockReferenceProperty: Interface Propriétés de blocs dynamiques d'AutoCAD; Valeurs de propriétés:; AllowedValues (RO) = nil; Description (RO) = ""; PropertyName (RO) = "Distance"; ReadOnly (RO) = 0; Show (RO) = -1; UnitsType (RO) = 2; Value = 3.3; Aucune méthode Pour mon bloc, je n'ai aucune valeur définie dans allowedvalues. Quand j'édite le bloc que tu as utilisé, waouh :o ! Je ne piges pas grand chose. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Patrick_35 Posté(e) le 14 janvier 2008 Posté(e) le 14 janvier 2008 Re,D'après ce que je comprends, il faut calculer la distance x et la distance y entre le point d'origine et le point de destination.Puis, il faut additionner ces valeurs à la longueur x et la hauteur (ou largeur) y du bloc via le vlisp et totocad recalcul le nouveau point d'origine. Il aurait plus simple d'entrer directement le nouveau point, mais bon :( , on utilise ce qui marche. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bseb67 Posté(e) le 17 janvier 2008 Auteur Posté(e) le 17 janvier 2008 Re, En fait je vais recréer le bloc dynamique en fintant, j'inverse le point d'origine que je n'arrive pas à bouger avec l'autre point du paramètre linéaire => et ca marche! :D Si j'ai le temps je mettrai un post pour le challenge sur les polygone puis sur le tri. Merci encore pour le soutien ;) Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant