-
Compteur de contenus
2 764 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Bred
-
Bonjour, Je ne vais pas vous écrire le programme, (pas le temps), mais vous devriez peut-être regarder du côté de l'échelle d'image. Vous affichez une image de base avec une échelle 1 dans les 2 sens, et vos modifications entraine un changement d'échelle de l'image correspondant à vos dimensions.
-
(vla-add (vla-get-Blocks... SCU ???
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
... bon, c'est vraiment trop tordu pour mon cas, afin d'avoir un truc propre j'insert des entités diverses (texte, bloc de biblio...) dans des blocs qu'ensuite j'insert dans un bloc final pour l'inserer dans AutoCAD... Et ces entitées je les oriente et bascule selon pas mal de paramètres... Solution : je bascule en SCG après la sélection des points... Merci pour votre temps. -
(vla-add (vla-get-Blocks... SCU ???
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
OK, merci ! -
(vla-add (vla-get-Blocks... SCU ???
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
OK, je vais approfondir ça. Merci Tes codes semblent fonctionner, mais pas pour le texte il me semble. -
Ah oui ! bien, je ne savais pas. Encore une fois merci. (... tu es tout seul dans le forum maintenant ?)
-
... je me répond tout seul : (ssget "C" p1 p1)
-
Bonjour, Sans passer par entsel, existe t'il un moyen de récupérer un entité en ayant des coordonnées ? Un "entpoint" ou un "ssget '( x y z)"... Merci d'avance.
-
(vla-add (vla-get-Blocks... SCU ???
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
Re, Alors voilà un principe qui, que l'on soit en SCG ou en SCU ne donne pas le même résultat alors que je pense ne travailler qu'en SCG... (defun c:eee ( / ANG BLOC_FINAL NOM-BLOC-FINAL P1 P1SCG P2 P2SCG TXT VECT-P1P2 VECT-Z CIRCLE PLAN-P1) (setq p1 (getpoint) p2 (getpoint p1) ang (angle p1 p2) p1scg (trans p1 1 0) vect-p1p2 (mapcar '- p2 p1) vect-Z '(0.0 0.0 1.0)) (setq plan-p1.p2.Z (list (- (* (cadr vect-p1p2) (caddr vect-Z)) (* (caddr vect-p1p2) (cadr vect-Z))) (- (* (caddr vect-p1p2) (car vect-Z)) (* (car vect-p1p2) (caddr vect-Z))) (- (* (car vect-p1p2) (cadr vect-Z)) (* (cadr vect-p1p2) (car vect-Z))) )) ;;; Crée Bloc-final dans collection (setq Nom-Bloc-final (strcat "Bloc-final" (itoa (fix (* (getvar "TDUSRTIMER") 10000000)))) Bloc_final (vla-add (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0 0 0)) Nom-Bloc-final)) ;;; Ecrit Texte dans Bloc-Final (setq txt (vla-AddMText Bloc_final (vlax-3d-point '(0 0 0)) 0.01 "<---- SENS P1 P2----->")) ;;; rotation txt vers p2 (vla-put-rotation txt ang) ;;; bascule txt sur le plan p1/p2/sens Z SCG (vla-put-normal txt (vlax-3d-point plan-p1.p2.Z)) ;;; cercle dans Bloc-Final (setq circle (vla-AddCircle Bloc_final (vlax-3d-point (polar '(0 0 0) ang (/ (distance p1 p2) 2))) (/ (distance p1 p2) 2))) ;;; bascule cercle sur le plan p1/p2/sens Z SCG (vla-put-normal circle (vlax-3d-point plan-p1.p2.Z)) (vla-insertblock (vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point p1scg) Nom-Bloc-final 1 1 1 0) ) -
(vla-add (vla-get-Blocks... SCU ???
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
Je fais pas mal de rotation de bloc (vla-rotate3d), de bascule (vla-put-normale) dans mon lisp, à l'interieur du bloc "(vla-add (vla-get-Blocks" et de création de texte avec "(vla-AddMText Bloc..." et j'ai l'impression que ça prend en compte compte le SCU, car j'ai vraiment une différence à l'insertion avec vla-insertblock entre le SCG et le SCU. Dès que je trouve un moment, j’essaye de coder un exemple simple pour le mettre ici. Merci -
Bonjour, Je créé un bloc grâce à (vla-add (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)))... Je "travail" dedans ensuite par rapport à un point '(0 0 0) et 2 point p1 et p2 que j'ai pris soin de transformer en SCG avec (trans p1 1 0).... J'insert ensuite le bloc grâce à vla-insertblock Quand je suis en SCG, pas de problème. Par contre, si je suis en SCU, dans mon bloc inséré c'est le bordel.... Bosser dans un "vla-get-Blocks" ne se passe pas uniquement en SCG ? Merci d'avance
-
Vecteur perpendiculaire à... "2 points"
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
Re, OK, j'ai bricoler mon bonheur e nrécuperant l'axe du plan pour faire une rotation 3 sans toucher directement à la normal. Merci ! (setq p1 (getpoint)) (setq p2 (getpoint p1)) (setq vla-sel (vlax-ename->vla-object (car (entsel "\n Choix de l'objet :")))) (setq ang-2D (angle p1 p2)) (setq vecteur-p1-p2 (mapcar '- p2 p1)) (setq norm-plan.p1p2 (gc:CrossProduct '(0. 0. 1.) vecteur-p1-p2)) (vla-rotate3d vla-sel (vlax-3d-point '(0 0 0)) (vlax-3d-point norm-plan.p1p2) (- (asin (/ (- (caddr p2) (caddr p1)) (distance p1 p2))))) -
Vecteur perpendiculaire à... "2 points"
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
Ah, oui, merci ! je pressentais que c'était une multiplication de vecteur mais je n'ai pas cette logique du tout. Sauf que je suis ecoeuré car ça ne résous en pas mon problème, ce n'est pas entièrement la solution : Si j'ai une polyligne horizontal du point A dans le sens de B donc qui a bien une normal (0 0 1), le fait de changer sa normal en le rendant perpendiculaire à A B ne fait pas ce que je voudrais... Je voudrais que la polyligne s'aligne à A B dans son sens de longueur, mais en fait elle "bascule"... polilygne de '(0 0 0) à '(4 0 0) avec normal de (0 0 1) (polyligne ou bloc au point d'insert 0 et normal (0 0 1)) point A (0 0 0) et B (2 0 2) la normal calculé donne (-4.0 0.0 4.0) mais bascule la polygne en la laissant sur le plan XY... donc il faut que je fasse une rotation de l'angle "3D" en +. -
Vecteur perpendiculaire à... "2 points"
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
Bonjour, Non, merci mais je ne suis en effet pas clair. Je connais v1, A et B, je cherche v2. A et B étant sur n'importe quel plan autour de v1 qui a pour vecteur (0 0 1) -
Vecteur perpendiculaire à... "2 points"
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
J'ai utilisé les fonctions de (gile) pour bricoler un truc, mais je ne comprends pas pourquoi ça ne fonctionne pas. (setq p1 (getpoint) p2 (getpoint p1)) ; vecteur p1>p2 (setq vec (mapcar '- p2 p1)) ;;; axe de rotation (setq axis (polar p1 (+ (angle p1 p2) (/ pi 2)) 1)) (gc:Rotate vec axis (/ pi 2)) Avec ;; gc:Rotate ;; Retourne le vecteur après rotation sur l'axe défini par le vecteur axis ;; ;; Arguments ;; vec : le vecteur devant subir la rotation ;; axis : l'axe de rotation (vecteur) ;; ang : l'angle en radians (defun gc:rotate (vec axis ang) (trans (mxv (list (list (cos ang) (- (sin ang)) 0.) (list (sin ang) (cos ang) 0.) '(0. 0. 1.) ) (trans vec 0 axis) ) axis 0 ) ) ;; TRP ;; Transpose une matrice -Doug Wilson- ;; ;; Argument ;; m : une matrice (defun trp (m) (apply 'mapcar (cons 'list m))) ;; MXV ;; Applique une matrice de transformation à un vecteur -Vladimir Nesterovsky- ;; ;; Arguments- ;; m : une matrice ;; v : un vecteur (defun mxv (m v) (mapcar (function (lambda (r) (apply '+ (mapcar '* r v)))) m ) ) -
Vecteur perpendiculaire à... "2 points"
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
... j'ai oublier de rajouter qu'en 2D la fonction est, si je ne me trompe pas. (polar p1 (+ (angle p1 p2) (/ pi 2)) 1) ... mais en 3D.... -
Bonjour, Je sais qu'un vecteur normal à un plan est perpendiculaire à ce plan, donc défini par 3 points... Sous AutoCAD, j'essaye de trouver le calcul permettant avec 2 points de calculer le vecteur perpendiculaire à ces 2 points, en sachant que c'est le plan du triangle formé par les Z (SCG) et ces 2 points qui doit "basculer"... Comme je ne pense pas être clair, un truc que je fais à mon bureau pour essayer de trouver : J'ai une feuille A4 verticale un côté 29.7 posé sur le bureau, les 2 points sont la diagonale, je tourne ma feuille autour du premier point pour que le coin posé sur le bureau s'aligne au second point : je cherche comment trouver le vecteur représenté par le côté perpendiculaire au côté qui est maintenant aligné (lg 21cm) entre le 1er point et le second. En 2D, pas de problème c'est de la trigo, mais en 3D je dois louper un truc... Merci d'avance pour votre aide.
-
2 point avec affichage style Fenêtre de sélection
Bred a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
Salut, merci, je vérifierai demain mais getcorner propose une option pour colorer le rectangle de sélection ? -
2 point avec affichage style Fenêtre de sélection
Bred a posté un sujet dans Pour aller plus loin en LISP
Bonjour, J'essaye de rendre mes outils un peu plus "graphique" et visible. Dans l'un d'eux, je dois sélectionner une surface par 2 points. Je récupère cette surface en passant par getpoint. Je voudrais qu'à l'écran, quand je demande 1er et second point, un rectangle "plein ou hachuré" soit visible, comme le cadre de sélection basique. Je n'ai rien à faire de ce qu'il y a dans le rectangle, c'est uniquement les 2 points qui m’intéresse. Je pensais trouver une option dans ssget, ou pouvoir lancer la sélection à la suite de mon premier getpoint, mais je n'y arrive pas. Peut-être auriez-vous une astuce à m'offrir. Vous remerciant pas avance. -
.. et non, je ne valide pas par clic droit quand je rentres une chaine au clavier, mais l'erreur precedente était dû par le clic droit. Là, ça à l'air de fonctionner nickel. Merci !
-
... la version "plus robuste" fonctionne avec la validation clic droit... (je pige pas)
-
J'ai trouvé ce qui cloche : je valide avec le clic droit !... (je suis un vieux)...
-
.... pas "l'appel au clavier" mais la possibilité de rentrer une chaine à la question.
-
(cadr gr) = (1.13884 -0.333956 0.0) .... donc (chr (cadr gr)) plante forcément J'ai remplacé par car (tu t'es auto-corrigé dans ta question !) les deux (chr (cadr ...) qui se suivent.... ... sauf que l'appel au clavier ne fonctionne plus (ce n'est plus un message d'erreur, c'est un "gel")
-
testé sur 2014 et 2018 Source dernière interuption : (defun getstringorentity (cr msg / break result gr pt ent str) (prompt msg) (while (and (not break) (setq gr (grread t 4 2))) (cond ;; récupération du point sous le curseur ((= (car gr) 5) (setq pt (cadr gr)) ) ;; clic gauche ((= 3 (car gr)) (setq ent (nentselp pt) result (cond ((null ent) nil) ((= (length ent) 2) ent) (T (list (last (last ent)) pt)) ) break T ) ) ;; validation par Entrée ((equal gr '(2 13)) (setq result str break T ) ) ;; validation par espace ((and (not cr) (equal gr '(2 32))) (setq result str break T ) ) ;; récupération des entrées au clavier (T (if (= (cadr gr) 8) ;_ 8 = retour/effacer (or (and str (/= str "") (setq str (substr str 1 (1- (strlen str)))) (princ (chr 8)) (princ (chr 32)) ) (setq str nil) ) (or (and str (setq str (strcat str (chr (cadr gr))))) (setq str (chr (cadr gr))) ) ) (and str (princ (chr (cadr gr)))) ;_ affichage sur la ligne de commande ) ) ) result )
-
Ah, zut, bug. Si il y a un ssget avant la fonction ça plante... j'essaye d'en comprendre la raison, mais je n'y arrive pas. (defun c:tt (/ ent) (ssget) (setq ent (getstringorentity t "\n Entrez un nom ou Sélectionnez : ")) )
