Iu63
Membres-
Compteur de contenus
27 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Iu63
-
problème largeur avec une boîte de dialogue
Iu63 a répondu à un(e) sujet de Loïc MICHEL dans Débuter en LISP
3 semaines après, Y'a pas de délai sur ps4 -
Merci pour ta réponse cela fonctionne. Cependant c'est vrai que maintenant pour ce qui est des échelles c'est une autre affaire.
-
Bonjour @didier, Je te remercie pour ta réponse, cependant, le entmod que je lui applique semble ne pas bien fonctionner, est-il mal placé ? Voici la fonction : (defun c:AnnotBloc ( / blo ename) (vl-load-com) (setq blo (tblsearch "BLOCK" "test1")) (if blo (entmod (append (entget (cdr (assoc 330 (entget blo)))) '((-3 ("AcadAnnotative" (1000 . "AnnotativeData") (1002 . "{") (1070 . 1) (1070 . 1) (1002 . "}") ) ) ) ) ) ) )
-
Problème de l'utilisation d'un LISP avec une fonction if
Iu63 a répondu à un(e) sujet de Loïc MICHEL dans Visual LISP
Bonjour @Loïc MICHEL Je comprends que tu sois un peu perdu avec tout ça, mais il y a des points que tu sembles ignorer. D'abord, concernant la casse des chaînes de caractères, Didier a parfaitement raison de souligner ce point, et je vais même en rajouter une couche. Si tu compares "PROJET" à "projet", par exemple, cela renverra nil à chaque fois, ce qui rendrait ta condition if incorrecte. Assure-toi donc de bien respecter la casse partout où tu utilises des chaînes de caractères. Je sais, c’est une petite chose, mais parfois même les plus simples semblent nous échapper quand on est un peu trop pressé. Ensuite, pour la partie technique, il semble que tu n'aies pas bien saisi l’importance de définir correctement tes blocs avant de les manipuler dans AutoLISP. Si tu n’as pas les bons blocs définis, le programme échouera, peu importe la logique de ton if. C’est comme essayer de bâtir un château de cartes sans cartes, il ne tiendra pas debout. Didier a tout à fait raison là-dessus, et franchement, il n'y a pas de place pour l'improvisation ici. Pour ta condition if, si type_rsx et config_nom sont des fonctions, assure-toi qu'elles renvoient bien les valeurs attendues avant de faire la comparaison. Si ce sont des variables, il faudra les appeler sans parenthèses. Et si la logique de ton if n’est pas bonne, eh bien, la condition ne sera jamais satisfaite, et là tu risques de tourner en rond sans avancer. Un petit peu d'attention, ça fait toute la différence ! Je te conseille donc de tester ta fonction type_rsx pour être sûr qu’elle renvoie bien "PROJET", comme tu t’y attends. Idem pour config_nom. Vraiment, il ne faut pas négliger ces détails, même si je sais qu’on aime parfois se dire "ça va passer", mais non, ça ne passe pas toujours. Comme Didier te l'a bien expliqué, rien ne sert de courir si tu n'as pas bien mis un pied devant l'autre. Bon courage, et essaie de ne pas t'égarer dans les petits détails, parfois, ce sont eux qui font tout capoter ! Autocadement, -
Merci pour ta suggestion. Cependant, la variable ANNOTATIVEDWG est en lecture seule de mon coté, ce qui empêche sa modification directe de son contenu. J’ai du mal à obtenir exactement ce que je souhaite. Si tu as d'autres idées ou suggestions, je suis preneur !
-
Bonjour à tous, Je voulais savoir s’il existe un moyen, lorsqu’on est dans l’éditeur de blocs, de passer un bloc standard en bloc annotatif directement, sans passer par la palette des propriétés (comme on le fait habituellement à la main, voir image jointe). Plus précisément, je cherche à modifier la propriété "Annotatif" d’un bloc via LISP. Est-ce que c’est possible ? Et si oui, comment y accéder et la modifier en LISP tout en étant dans l’édition du bloc ? Merci d’avance pour vos retours !
-
Bonjour, Je suis en train de réaliser un programme qui me permet de calculer une hauteur spécifique en fonction de plein de paramètre. J'ai fais en parallèle de cela une boite de dialogue. Cependant, j'ai l'impression que la fonction me permettant d'afficher la hauteur marche de manière aléatoire, c'est à dire qu'elle me renvoie "erreur: type d'argument incorrect: numberp: nil" 1 fois sur 5 et je n'arrive pas à voir l'origine du problème. Voici le lisp : ; -------------------------------------------------------------------------------------------------- (defun c:BoiteVa () (setq dcl_id (load_dialog "boiteneo.DCL")) ;; Charger le fichier DCL (if (new_dialog "boite1" dcl_id) ;; Ouvrir la boîte de dialogue (progn ;; Variables pour stocker les choix (setq choixFE "") ;; Initialisation de choixFE (setq choix "") ;; Initialisation de choix ;; Choix de la sélection Demi-feuillet ou Enrobage (visible ou non visible) (action_tile "btn_demi_feuillet" "(setq choixFE \"Demi feuillet\") (mode_tile \"enrobage\" 1) (princ (strcat \"\\nChoix sélectionné : \" choixFE)) (setq dernier_choixFE choixFE)" ) (action_tile "btn_enrobage" "(setq choixFE \"Enrobage\") (mode_tile \"enrobage\" 0) (princ (strcat \"\\nChoix sélectionné : \" choixFE)) (setq dernier_choixFE choixFE)" ) ;; Actions des boutons radio pour les vues possibles (action_tile "a" "(setq choix \"Coupe Longitudinale\")") (action_tile "b" "(setq choix \"Coupe Transversale\")") (action_tile "c" "(setq choix \"Vue en Plan\")") ;; Action du bouton OK pour récupérer les valeurs (action_tile "accept" (strcat "(setq ep_feuillet (/ (atof (get_tile \"ep_feuillet\")) 1000)) " ;; Conversion en mètres "(setq ep_frette (/ (atof (get_tile \"ep_frette\")) 1000)) " ;; Conversion en mètres "(setq nb_feuillet (atoi (get_tile \"nb_feuillet\"))) " ;; Récupérer le nombre de feuillets "(setq valeur_a (/ (atof (get_tile \"valeur_a\")) 1000)) " ;; Conversion en mètres "(setq valeur_b (/ (atof (get_tile \"valeur_b\")) 1000)) " ;; Conversion en mètres ;; Récupérer la valeur d'enrobage seulement si le choix est "Enrobage" "(if (equal choixFE \"Enrobage\") " " (setq enrobage (/ (atof (get_tile \"enrobage\")) 1000)) " " (setq enrobage nil)) " ;; Sauvegarder les valeurs pour les reprendre plus tard "(setq dernier_ep_feuillet (* ep_feuillet 1000)) " "(setq dernier_ep_frette (* ep_frette 1000)) " "(setq dernier_nb_feuillet nb_feuillet) " "(setq dernier_valeur_a (* valeur_a 1000)) " "(setq dernier_valeur_b (* valeur_b 1000)) " "(if (equal choixFE \"Enrobage\") (setq dernier_enrobage (* enrobage 1000))) " "(done_dialog)" ) ) ;; Action du bouton Reprendre les dernières valeurs (action_tile "recuperer_valeurs" "(progn (set_tile \"ep_feuillet\" (rtos dernier_ep_feuillet 2 3)) ; Remplir la case avec l'épaisseur du feuillet (set_tile \"ep_frette\" (rtos dernier_ep_frette 2 3)) ; Remplir la case avec l'épaisseur de la frette (set_tile \"nb_feuillet\" (itoa dernier_nb_feuillet)) ; Remplir la case avec le nombre de feuillets (set_tile \"valeur_a\" (rtos dernier_valeur_a 2 3)) ; Remplir la case avec la valeur de a (set_tile \"valeur_b\" (rtos dernier_valeur_b 2 3)) ; Remplir la case avec la valeur de b ;; Récupérer le dernier choix pour la sélection de feuillet (if (equal dernier_choixFE \"Demi feuillet\") (progn (set_tile \"btn_demi_feuillet\" \"1\") ;; Sélectionner le bouton Demi-feuillet (mode_tile \"enrobage\" 1) ;; Afficher le champ d'enrobage ) (progn (set_tile \"btn_enrobage\" \"1\") ;; Sélectionner le bouton Enrobage (mode_tile \"enrobage\" 0) ;; Masquer le champ d'enrobage (set_tile \"enrobage\" (rtos dernier_enrobage 2 3)) ;; Restaurer la valeur d'enrobage ) ) (princ (strcat \"\\nDernier choix de feuillet restauré : \" dernier_choixFE)) )" ) ;; Réinitialiser les variables si annulation (action_tile "cancel" (strcat "(setq ep_feuillet nil ep_frette nil nb_feuillet nil valeur_a nil valeur_b nil enrobage nil choixFE nil choix nil dernier_choixFE nil dernier_enrobage nil) " ;; Réinitialiser les variables "(done_dialog)" ) ) ;; Démarrer la boîte de dialogue (start_dialog) ) ) ;; Décharger le fichier DCL après utilisation (unload_dialog dcl_id) ;; Vérifier si les valeurs sont valides avant d'afficher les résultats (if (and ep_feuillet ep_frette nb_feuillet valeur_a valeur_b) (progn (princ (strcat "\n[BoiteNeo] Epaisseur du feuillet (m) : " (rtos ep_feuillet 2 3))) (princ (strcat "\n[BoiteNeo] Epaisseur de la frette (m) : " (rtos ep_frette 2 3))) (princ (strcat "\n[BoiteNeo] Nombre de feuillets : " (itoa nb_feuillet))) (princ (strcat "\n[BoiteNeo] Valeur de a (m) : " (rtos valeur_a 2 3))) (princ (strcat "\n[BoiteNeo] Valeur de b (m) : " (rtos valeur_b 2 3))) (if (numberp enrobage) (princ (strcat "\n[BoiteNeo] Valeur d'enrobage (m) : " (rtos enrobage 2 3))) (princ "\n[BoiteNeo] Valeur d'enrobage (m) : N/A") ) ) (princ "\nOpération annulée.") ) ;; Ajouter un message (princ "\nCalcul de la hauteur et des frettes en cours.") (princ) ;; Calcul de nb_frette et hauteurAp et espacement entre frettes (setq nb_frette (+ nb_feuillet 1)) (setq espfret (- (+ ep_feuillet ep_frette))) ;; Condition pour la hauteur car variable en fonction des choixFE (setq hauteurAp (cond ((equal choixFE "Demi feuillet") (+ (* nb_feuillet ep_feuillet) (* nb_frette ep_frette) ep_feuillet)) (t (+ (* nb_feuillet ep_feuillet) (* nb_frette ep_frette) (* enrobage 2)))) ) ;; Afficher les résultats (princ (strcat "\nhauteurAp = " (rtos hauteurAp 2 3))) (princ (strcat "\nnb_frette = " (rtos nb_frette 2 3))) (princ (strcat "\nespfret = " (rtos espfret 2 3))) ;; Afficher le choix sélectionné dans la console (princ (strcat "\nChoix de feuillet : " choixFE)) (princ (strcat "\nChoix : " choix)) ) et voila ce que me renvoie Autocad : Commande: BOITEVA Dernier choix de feuillet restauré : Enrobage [BoiteNeo] Epaisseur du feuillet (m) : .008 [BoiteNeo] Epaisseur de la frette (m) : .004 [BoiteNeo] Nombre de feuillets : 6 [BoiteNeo] Valeur de a (m) : .200 [BoiteNeo] Valeur de b (m) : .100 [BoiteNeo] Valeur d'enrobage (m) : N/A Calcul de la hauteur et des frettes en cours.; erreur: type d'argument incorrect: numberp: nil Mon problème vient surement d'ici : ;; Condition pour la hauteur car vairiable en fonction des choixFE (setq hauteurAp (cond ((equal choixFE "Demi feuillet") (+ (* nb_feuillet ep_feuillet) (* nb_frette ep_frette) ep_feuillet)) (t (+ (* nb_feuillet ep_feuillet) (* nb_frette ep_frette) (* enrobage 2)))) ) car lorsque j'ai pas de condition et que j'ai uniquement (setq hauteurAp (+ (* nb_feuillet ep_feuillet) (* nb_frette ep_frette) ep_feuillet)) Alors tout fonctionne, j'ai essayer aussi en de mettre if au lieu de cond mais pareil j'ai le même problème.
-
Autant pour moi, j'ai trouvé mon erreur, merci quand même pour votre réponse
-
Bonjour, J'ai un problème avec ma boucle "repeat", cette boucle me permet de dupliquer des présentions dans lequel j'ai 2 viewports à chaque fois. Ainsi si je lui dis par exemple que j'ai 5 pages, il va me faire 2 copies, 4 pages 1 copie etc, jusqu’à là tout fonctionne. De plus j'ai fais en sorte d'avoir un décalage avec la fonction pan dans chaque viewports, de manière linéaire. c'est à dire dans le viewport 2 j'ai 1 x "valeur decalage" dans le viewport 3 j'ai 2x"valeur decalage" etc L'élément problématique ici est le fait qu'avec, 3,4,5,6 pages cela fonctionne très bien mais à partir de 7 pages donc 4 copies les décalages de pan sont complétement déréglés. Et je comprends pas pourquoi c'est à partir de ce moment là alors que tout fonctionne par paire (5 et 6; 7 et 8 ; 9 et 10 etc...) De plus je tiens à dire que les duplications de layout se passent bien comme je le souhaite. Voici le lisp : (setq nb (atoi nombre_pages)) ;; Convertir en entier si nécessaire (if (< nb 3) (princ "\nMoins de 3, donc pas de copie.") (progn ;; Calcul du nombre de copies en fonction du nombre saisi (if (<= nb 4) (setq copies 1) (setq copies (+ 2 (fix (/ (- nb 5) 2))))) (princ (strcat "\nLa commande sera exécutée " (itoa copies) " fois.")) ;; échelle (setq ptpan1 (list 0 0)) ;; Point de départ fixe (setq ptpandecal1 (cond ((or (= choix_echelle "1/50")) (list 0 (* (/ Latab 20) copies))) ((or (= choix_echelle "1/100")) (list 0 (* (/ Latab 10) copies))) ((or (= choix_echelle "1/25")) (list 0 (* (/ Latab 40) copies))) (T (list 0 0)) ;; Échelle non reconnue : pas de décalage ) (princ (strcat "\nValeur du décalage : " (itoa copies))) ) (setq i 0) (repeat copies ; LE PROBLEME ARRIVE DANS CETTE BOUCLE (progn ;; Construit un nom dynamique pour la présentation : ;; la première copie s'appellera "n", puis "n1", "n2", etc. (setq nameSuffix (if (= i 0) "n" (strcat "n" (itoa i)))) (princ (strcat "\nCréation de la présentation : " nameSuffix)) ;; --- Copie et établissement de la présentation actuelle avec un nom unique --- (command "-presentation" "c" "" nameSuffix) (command "-presentation" "E" nameSuffix) ;; --- Sélection des viewports dans le layout actif --- (setq ss (ssget "X" (list (cons 0 "VIEWPORT") (cons 410 (getvar "CTAB"))))) (if ss (progn (princ (strcat "\n" (itoa (sslength ss)) " viewport(s) sélectionné(s).")) ;; Si plusieurs viewports existent, on sélectionne le premier (if (> (sslength ss) 1) (progn (setq viewport1 (ssname ss 0)) (princ "\nPremier viewport sélectionné.") ) ) ) (princ "\nAucun viewport trouvé.") ) ;; Passage en espace objet (command "_MSPACE") ; Deverrouillage VIEWPORT (command "_mview" "V" "I" "TOUT" "") ;; --- Déplacement de la vue (PAN) --- (command "-pan" ptpan1 ptpandecal1) ;; --- Sélection et modification du viewport actif --- (setq ss (ssget "X" (list (cons 0 "VIEWPORT") (cons 410 (getvar "CTAB"))))) (if ss (progn (setq num (sslength ss)) (princ (strcat "\nNombre de viewports trouvés : " (itoa num))) (if (>= num 3) (progn ;; Sélection directe du troisième viewport (index = 3) (setq vp-index 3) (command-s "_MSPACE") (setvar "CVPORT" vp-index) (princ (strcat "\nViewport " (itoa vp-index) " activé.")) ) (princ "\nIl n'y a pas assez de viewports.") ) ) (princ "\nAucun viewport trouvé.") ) ;; --- Réexécution du déplacement (PAN) --- (command "-pan" ptpan1 ptpandecal1) (princ "\n--- Exécution de la copie terminée ---") ; Deverrouillage VIEWPORT (command "_mview" "V" "A" "TOUT" "") (setq i (1+ i)) ) ) ) )
-
Convertir des coordonnées d'un point de l'espace object à des coordonnées de l'espace papier
Iu63 a répondu à un(e) sujet de Iu63 dans Pour aller plus loin en LISP
merci -
Sélection d'une fenetre spécifique (viewport) dans une présentation (layout)
Iu63 a répondu à un(e) sujet de Iu63 dans Débuter en LISP
merci -
Bonjour, je me demande si c'était possible de convertir des coordonnées d'un point de l'espace objet à des coordonnées de l'espace papier. J'ai cru comprendre qu'il fallait utiliser l'outil "trans". (defun c:convert_objet_papier () (if (= (getvar "TILEMODE") 1) (princ "\nVous êtes en espace objet. Passez en espace papier pour utiliser cette commande.") (progn ;; Sélectionner la fenêtre de présentation (setq vp_ent (car (entsel "\nSélectionnez une fenêtre de présentation : "))) (if (and vp_ent (eq (cdr (assoc 0 (entget vp_ent))) "VIEWPORT")) (progn ;; Basculer en espace objet (command "_MSPACE") ;; Sélectionner un point en espace objet (setq point_objet (getpoint "\nSélectionnez un point en espace objet : ")) ;; Conversion du point en espace papier en tenant compte du viewport (setq point_papier (trans point_objet 0 2 vp_ent)) ; 0 = WCS (World Coordinate System), 2 = DCS (Display Coordinate System) ;; Retourner en espace papier (command "_PSPACE") ;; Affichage des coordonnées (princ (strcat "\nCoordonnées en espace objet : " (rtos (car point_objet) 2 2) ", " (rtos (cadr point_objet) 2 2))) (princ (strcat "\nCoordonnées en espace papier : " (rtos (car point_papier) 2 2) ", " (rtos (cadr point_papier) 2 2)))) ) (princ "\nSélection invalide. Veuillez sélectionner une fenêtre de présentation.") ) ) ) J'ai donc commencer à faire ceci mais le problème est qu'il me renvoie les coordonnées que l’espace objet, alors que cela n'est pas le cas.
-
Sélection d'une fenetre spécifique (viewport) dans une présentation (layout)
Iu63 a répondu à un(e) sujet de Iu63 dans Débuter en LISP
J'ai trouvé une solution qui marche mais je n'arrive pas à la faire fonctionner. Cela serait de redéfinir les coordonnées des 4 points du rectangle du viewport, pour ainsi placer le viewport au bon endroit, au fait merci de prendre le temps de me répondre gile. J'ai testé cela mais en vain : (defun c:etirer-vp2 () (command "_PSPACE") ; Passer en espace papier (princ "\nPassage en espace papier...") ;; Sélectionner tous les viewports du layout actif (setq ss (ssget "X" (list (cons 0 "VIEWPORT") (cons 410 (getvar "CTAB"))))) (if ss (princ (strcat "\nNombre de viewports trouvés : " (itoa (sslength ss)))) (princ "\nAucun viewport trouvé.") ) (if (and ss (> (sslength ss) 1)) ; Vérifier qu'il y a au moins deux viewports (progn (princ "\nSélection du viewport 2...") (setq vp2 (ssname ss 1)) ; Récupérer le viewport 2 (if vp2 (progn (princ "\nViewport 2 trouvé ! Redéfinition des coordonnées...") ;; Obtenir les données du viewport 2 (setq vp2data (entget vp2)) ;; Extraire les points actuels du viewport (c'est le cadre du viewport) (setq vp2pts (cdr (assoc 10 vp2data))) ; Extraction des points du viewport ;; Si les points sont disponibles, on peut redéfinir les coordonnées (if vp2pts (progn ;; Définir les nouvelles coordonnées pour chaque coin du rectangle ;; Par exemple, supposons que vous voulez les définir manuellement : (setq new-pt1 (list 0 0)) ; Nouveau coin inférieur gauche (setq new-pt2 (list 250 0)) ; Nouveau coin inférieur droit (setq new-pt3 (list 250 200)) ; Nouveau coin supérieur droit (setq new-pt4 (list 0 200)) ; Nouveau coin supérieur gauche ;; Appliquer les nouvelles coordonnées avec la commande _CVPORT (command "_CVPORT" (car new-pt1) (cadr new-pt1) (car new-pt3) (cadr new-pt3)) (princ "\nLes coordonnées du viewport ont été redéfinies avec succès !") ) (princ "\nLes points du viewport ne sont pas disponibles.") ) ) (princ "\nImpossible d'obtenir le viewport 2.") ) ) (princ "\nImpossible de trouver le viewport 2 (moins de deux viewports présents).") ) (princ) ) Il me renvoie cela : Commande: ETIRER-VP2 Passage en espace papier... Nombre de viewports trouvés : 2 Sélection du viewport 2... Viewport 2 trouvé ! Redéfinition des coordonnées... Impossible de mettre CVPORT à cette valeur. *Incorrect* -
Sélection d'une fenetre spécifique (viewport) dans une présentation (layout)
Iu63 a répondu à un(e) sujet de Iu63 dans Débuter en LISP
En effet il trouve bien 3 viewports cependant, lorsque je spécifie viewport 2 ou viewport 3, il me sélectionne toujours le même. Est ce que cela vient du fait que en amont, j'ai copier le viewport 1 que je suis venu coller juste à coté pour obtenir mes 2 fenêtres ? Je crois savoir d’où vient le problème. En fait quand je vais faire "créer une nouvelle présentation" puis que je vais copier coller la fenêtre déjà présente, cela fonctionne, il m'identifie bien quel viewport est le 2 ou 3. (sachant que le 1 est bien le viewport de la presentation) Cependant dans mon cas, je vais créer une nouvelle présentation puis SUPPRIMER le viewport présent, pour ensuite recréer deux fenêtres. Et je pense que le fait de supprimer le viewport de base présent (donc le vp 2) me pertube l’identification du bon viewport. -
Sélection d'une fenetre spécifique (viewport) dans une présentation (layout)
Iu63 a répondu à un(e) sujet de Iu63 dans Débuter en LISP
Merci pour ton retour, cependant, il y a encore des présentations ou cela ne fonctionne pas, voici ce que me renvoie autocad : Commande: SELECT-VP Nombre de viewports trouvés : 2 Sélectionnez un viewport (1-2) : 1 (ici que je mette 1 ou 2 j'ai toujours le même viewport de sélectionné qui correspond au dernier viewport sur lequel je suis allé) Je precise que sur ma page de presentation(layout)j'ai deux viewport (2 fenêtres de presentation) Exemple : admettons que je rentre dans l’espace objet du viewport 2 manuellement sur autocad, lorsque je vais lancer la commande, même si je spécifie 1, il va me sélectionner le 2 ème viewport. Y'a t'il un moyen de forcer le truc avec ActiveX ou autre chose ? -
Sélection d'une fenetre spécifique (viewport) dans une présentation (layout)
Iu63 a posté un sujet dans Débuter en LISP
Bonjour, J'ai un problème avec la sélection d'une fenêtre (parmi 3) dans un layout via lisp. En effet à chaque fois, il vient me sélectionner la même fenêtre ( peut importe que je mette viewport 1,2, ou 3 etc...) cependant il comprend bien qu'il y a plusieurs fenêtres. voici le lisp : (defun c:select-vp () ;; Sélectionner tous les viewports dans le layout actif (setq ss (ssget "X" (list (cons 0 "VIEWPORT") (cons 410 (getvar "CTAB"))))) (if ss (progn (setq num (sslength ss)) (princ (strcat "\nNombre de viewports trouvés : " (itoa num))) ;; Demander à l'utilisateur de choisir un viewport (setq vp-index (getint (strcat "\nSélectionnez un viewport (1-" (itoa num) ") : "))) ;; Vérifier si l'index est valide (if (and vp-index (> vp-index 0) (<= vp-index num)) (progn ;; Définir le viewport actif (setvar "CVPORT" vp-index) (princ (strcat "\nViewport " (itoa vp-index) " activé.")) ;; Passer en espace objet (command "_MSPACE") ) (princ "\nIndex invalide.") ) ) (princ "\nAucun viewport trouvé.") ) (princ) ) -
Merci infiniment gile, cela fonctionne !
-
Malheureusement, la fonction "ZOOM"ne me permet pas de faire cela, car à chaque fois que je vais créer une nouvelle fenetre, celle-ci aura une échelle variable à chaque fois, exemple, 1.2424 ; 2.2492 etc... donc je ne peux pas vraiment definir un facteur d'echelle car mon echelle initaile n'est pas fixe. Et pour ce qui est de passer par DXF, je n'y connais pas grand chose non plus malheureusement.
-
Même en rentrant l'échelle 1:1, la commande ne fonctionne pas. (command "_CANNOSCALE" "1:1")
-
Bonjour, Je fait face à un problème, je souhaite changer l'échelle de ma fenetre(viewport) dans mon espace PRESENTATION j'ai donc utilisé la fonction _CANNOSCALE. Mais cette commande ne s'effectue pas correctement, il ne reconnait pas les echelles prédefini, peu importe si j'écris 1/50 ou 1:50 ou meme 50. voici le lisp : (command "_CANNOSCALE" "1:50") Ceci dit, meme en lancant directement la commande CANNOSCALE dans autocad il ne comprend pas les valeurs 1:50 ou 1/50. Si quelqu'un sait d'ou vient le problème. Merci
-
Selectionner le centre des fenetres (viewport) d'une page de présentation (layout)
Iu63 a répondu à un(e) sujet de Iu63 dans Débuter en LISP
Merci beaucoup pour ta réponse Olivier, cela fonctionne cependant, il m'ajoute toujours un centre d'une fenetre(qui n'existe pas) qui est en dehors de ma page de presentation (layout) je ne comprends pas pourquoi. Mais c'est déjà bien mieux merci ! Voici ce qui me renvoie : Commande: CENTERSOFALLVIEWPORTS Nombre de viewports trouvés : 3 (Alors que j'en ai que 2 ici) Centre du viewport 1 : X = 25.38, Y = 141.92 Centre du viewport 2 : X = -179.62, Y = 141.92 Centre du viewport 3 : X = 344.50, Y = 229.49 -
Bonjour, Je cherche à Obtenir le centre des fenetres (viewport) d'une page de présentation (layout) en utilisant lisp. Le problème étant que cela me selectionne le centre de chaque fenetres mais pour l'ensemble de mes presentations (layout) alors que moi je souhaiterai uniquement le centre des fenetres du layout ACTIF soit celui sur lequel je suis, celui qui est selectionné. Voici mon lisp : (defun c:CentersOfAllViewports () (vl-load-com) ; Charger la bibliothèque COM pour interagir avec AutoCAD ;; Sélectionner tous les viewports dans l'espace de présentation (setq ss (ssget "X" '((0 . "VIEWPORT")))) ; Sélectionner tous les viewports (if ss (progn (setq i 0) ; Initialiser un compteur pour les viewports (setq num (sslength ss)) ; Récupérer le nombre total de viewports (princ (strcat "\nNombre de viewports trouvés : " (itoa num))) ; Afficher le nombre de viewports ;; Parcourir tous les viewports (while (< i num) (setq obj (ssname ss i)) ; Récupérer l'objet viewport à l'index i (setq vlaObj (vlax-ename->vla-object obj)) ; Convertir en objet VLA ;; Obtenir les coordonnées des coins du viewport (setq pt1 (vlax-get vlaObj 'Center)) ; Récupérer les coordonnées du centre directement ;; Afficher les coordonnées du centre de ce viewport (princ (strcat "\nCentre du viewport " (itoa (1+ i)) " : X = " (rtos (car pt1) 2 2) ", Y = " (rtos (cadr pt1) 2 2))) (setq i (1+ i)) ; Passer au viewport suivant ) ) (princ "\nAucun viewport trouvé.") ) (princ) ; Terminer proprement la fonction ) et voici ce que autocad me renvoie : Nombre de viewports trouvés dans le layout 05 (4) : 18 Centre du viewport 1 : X = -77.12, Y = 141.92 Centre du viewport 2 : X = 42.59, Y = 171.05 Centre du viewport 3 : X = -77.12, Y = 141.92 Centre du viewport 4 : X = -12.53, Y = 69.92 Centre du viewport 5 : X = -77.12, Y = 141.92 Centre du viewport 6 : X = 41.18, Y = 64.59 Centre du viewport 7 : X = 25.38, Y = 141.92 Centre du viewport 8 : X = -179.62, Y = 141.92 Centre du viewport 9 : X = 34.88, Y = 82.78 Centre du viewport 10 : X = -77.12, Y = 141.92 Centre du viewport 11 : X = -11.61, Y = 116.53 Centre du viewport 12 : X = -77.12, Y = 141.92 Centre du viewport 13 : X = 20.74, Y = 147.38 Centre du viewport 14 : X = 30.62, Y = 66.45 Centre du viewport 15 : X = 28.00, Y = 209.95 Centre du viewport 16 : X = -177.00, Y = 209.95 Centre du viewport 17 : X = -7.96, Y = 198.22 Centre du viewport 18 : X = 14.50, Y = 129.11 Sachant que cela n'est pas cohérant car dans le layout 05 (4) j'ai uniquement 3 viewports Merci d'avance.
-
LISP Selection automatique d'objet à déplacer
Iu63 a répondu à un(e) sujet de Iu63 dans Débuter en LISP
En effet, il y a plusieurs objets. Et pour ce qui est du DWG c'est juste un fichier vierge dans lequel j'ai juste fait un rectangle pour tester mon pogramme Lisp. J'ai donc ensuite centré la page de presentation sur le rectangle rien de plus. -
LISP Selection automatique d'objet à déplacer
Iu63 a répondu à un(e) sujet de Iu63 dans Débuter en LISP
Excusez moi pour l'imprécision, je souhaite que la selection de l'objet se fasse automatiquement c'est à dire que je n'ai pas a venir cliquer pour selectionner l'object. Et je souhaite selectionner la fenetre de presentation ainsi que l'objet dans cette fenetre. J'avais donc fait ceci dans un premier temps : (setq ss (ssget "C" point_inf_gauche point_sup_droit) mais une fois de plus autocad m'invite à saisir avec la souris des objects, moi je veux que le programme se fasse d'un coup sans être interrompu -
LISP Selection automatique d'objet à déplacer
Iu63 a répondu à un(e) sujet de Iu63 dans Débuter en LISP
Hélas, meme avec cette méthode (ssget) autocad me demande une saisie manuelle des objets c'est ça que je ne trouve pas normal
