Aller au contenu

Messages recommandés

Posté(e)

bonjour a tous,

bravo pour les programmes ou aides que vous communiqués a tous, c'est super sympas et très formateur

ce qui ne fait pour autant de nous des programmeurs encore aguerris. Grr..

 

comme Autocad et sa programmation me passionne, je me rappel d'un vieux PROGRAMME EN C sur la version 12 qui gérais la gravité,

l'éclate TOTALE, SNIF il n y a plus sur les nouvelles version ce type de jouet programmable.

 

Bon je me mets a la programmation doucement et j'essaye de percuter les script, lisps

qui se ballade un peu partout.

 

bon j'ai vue que l'on pouvais zoomer sur un HANDLE COOoool Géniale cette commande

 

(handent "<Votre maintien>")

(handent "1f7") par exemple

 

Problème Ma planche autocad possède d’innombrable bloc 1000 à 5000 blocS,

j'ai un fichier XLS que je dois importer dans Autocad pour gérer leurs attributs,

bon jusque là je me débrouillerais

 

Par contre serait il possible dans autocad de lancer une commande en LISPS car ce langage m'éclate beaucoup

petit programme qui me lancerais une fenêtre pour zoomer sur le fameux handle que je choisirais dans une liste?

UNE FOIS CES HANDLE IMPORTER OU EXPORTER D'AILLEURS?

si le lisps peu rechercher tous les handle qui l'a dans sa mémoire une fois les blocs posé sur la planche bien sur

SE SERAIT ENORMISSIME.

 

Une fois zoomer sur le bloc qui se réfère aux handle je pourrais LA:

faire ce que je veux avec le bloc et le renommer par exemple, ect..

 

cela m'évitera ce sans cesse aller retour excel AutoCAD

 

Pour mieux comprendre imaginé une carte électronique immense et il faut que je puisse zoomer rapidosse d'un lieu de la carte

ou est le composant qui se retrouve référencé dans un fichier EXCEL,

créer des vues nommé serait un enfer si mêmes trés pratique pour du zonage a grand échelle.

 

En faite ce qui est embêtant c'est que des centaines de bloc porte le même nom seul leur Handle les différencies au départ

j'aurais pus sélectionner les blocs avec zoom objets mais niche possible avec des blocs multiples au mêmes nom, il faut le sélectionner.

 

merci bcp pour votre aide

Posté(e)

Coucou

 

Bienvenue sur CadXP

Certes le handle peut être utile mais si les coordonnées d'insertion ne varient pas ça peut aussi être une piste de recherche dans une colonne cachée d'Excel.

Essaie de faire passer une exemple (léger) de fichier qu'on comprenne.

Je me permets de redonner le conseil rituel aux débutants : ne mets pas la barre trop haut, apprends à marcher avant de vouloir courir.

 

Amicalement

Posté(e)

Bonjour,

 

Pour une fois je vais contredire Didier.

Pour moi la méthode qui utilise les handles est excellente. Aucun risque d'erreur possible pour faire une liaison avec un fichier externe quel qu'il soit. Dans Autocad faire une sélection d'objet grâce a son handle est aussi très fiable, aucun risque de sélectionner un autre objet proche ou surperposé les sélections peuvent se faire hors zone graphique, ce qui n'est pas le cas avec des coordonnées fournies quand on passe par (ssget) avec un point ou liste de points...

J'ai récemment écrit un code qui faisait une liaison entre excel et des handles d'entité. Il en faudrait peu pour l'adapter à ton souhait si tu fournis un exemple (peut être juste un extrait) de ton DWG et XLS

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Coucou

 

Je ne crains pas la contradiction et ce que tu écris est fondé et parfaitement juste.

Je pensais juste "faciliter" la chose avec les coordonnées qui permettent de se situer dans le dessin, le handent étant plus "muet" à ce sujet

En me relisant je viens ici faire mon mea culpa car effectivement le handent permet de faire ce qui est demandé et avec moins de données à exporter qui plus est

 

Par contre je ne comprends pas encore comment sélectionner le bloc dans l'esprit de dc 01, en cliquant dans Excel ?

 

Amicalement

 

Posté(e)

Bonjour,

 

La question principale c'est de savoir si le clic se fait dans Excel ou dans une liste affichée dans AutoCAD.

Le plus simple c'est évidemment la liste dans AutoCAD, mais afficher une liste de 1000 handle nécessite un passage par le DCL et ce n'est pas simple de s'y retrouver (dans le DCL et dans la liste!).

Si on doit pouvoir cliquer dans Excel et zoomer dans AutoCAD, ça nécessite une liaison entre les 2 logiciels et en Lisp, ça ne sera pas forcément simple non plus.

 

 

Olivier

Posté(e)

merci pour vos prompts réponse, les coordonnées Euh! bof non aucun intérêt pour moi,

surtout que le point d'insertion d'un bloc qui sont les coordonnées reprise exporter dans excel ne sont en rien une valeur fiable puisque l'on peu le coller n'importe ou ce point.

 

une fois le fichier excel, importer dans autocad avec tous ces attributs, j'aimerais beaucoup pouvoir si c'est possible,

avoir la liste des handle, car je me rends compte que les noms de blocs n'ont aucun intérêt,

je peux avoir 50 types de blocs placés partout, CTRL+2 aucun intérêt je vois 70 blocs ok

mais j'en ai 2500 sur le plan

Seul le ZOOM sur handle est intéressant, jouer avec la roulette pour trouver un mini bloc je vais perdre un temps de fou.

surtout si le djob est de vérifier les blocs voir les modifier.

 

Je me demandais donc,

Si autocad est capable d'identifier les blocs via des HANDLE comme des ID pour pouvoir les exporter en TXT, xls ect..

donc ne serait il pas possible sous autocad de lancer un lisps qui pourrait faire le ROLE de la boite de dialogue

inserer bloc OU du CTRL +2 qui scrutent ces fameux handle

pour avoir le choix dans une boite de dialogue sur celui que je veux sélectionner pour zoomer dessus directement

mais pas grace a sa tronche, ni a sa nom

mais VIA son ID donc le HANDLE

 

Pour qu'autocad puisse gérer des milliers d'éléments il mets des ID partout qu'il cache soigneusement,

ensuite il place des coordonnées Obligatoire mais qui n'ont dans mon cas aucun intéret,

puis un nom mais le plus important c'est ce fameux HANDLE.

 

J'ai vus que l'on pouvais afficher une boite de dialogue type Microsoft sous autocad via le vba ou le lisps,

salut bienvenue, clic ok ou annuler

on peu pas avoir une liste déroulante avec les noms "handle" stocker dans le DWG pour cliquer sur un nom

une fois cette sélection je pourrais taper la commande cité plus haut,

les plus aguerris d'entre vous peuvent je pensent arriver a lancer la commande cité plus haut directement a la sélection

du handle dans la liste.

 

Bon on en est pas la mais je dirais que la je risque de vous donner du file a retordre,

si je vous dis maintenant est ce que l'on peu forcer les handle ? a porter un numéros plus qu'un autre ?

des exemples protection des droits NICHE POSSIBLE

EX fait un bloc nommer toto avec 1 attribut si vous voulez, copier coller deux trois fois Export/import via excel

vous verrez que ce bloc porte un nom identique oui, mais surtout un IDentifiant,

DONC pour finir

QUESTION a UN millions comment vous faite pour zoomer sur un élément que vous ne voyer pas donc que vous ne pouvez

pas sélectionner ou identique ou par exemple si un bloc est au pole sud et un autre au pole nord mais qui porte

le même nom car vous ne les voyez pas. le zoom objet sur sélection est ok mais j'ai deux blocs

 

dans mon cas au moins 50 types qui portent le mêems nom mais ils ont tous des Handle différent

 

En faite pour répondre a didier, j'ai toujours appris trés vite et comme pour faire du vélo on a pas besoin de dire a

quelqu'un qu'il faut qu'il mette une selle sinon ça fait mal au Cul...

j'utilise autocad et ces concurrents ou fréro depuis qu'ils existent, comme je me mets a la programmation un chouille

 

J'aime bien avoir de bonnes base et le Handle pour moi est Mega important apparemment pour le BLOC

comme les coordonnées X Y Z d'un premier point dans l'espace pour d'autre qui ne sont pas des blocs RAPPEL didier

 

Je fait appel a votre expérience a mon avis ils faut trés peu de ligne de code,

mais l’intérêt est Gigantesque

 

cordialement

Posté(e)

Coucou

 

Ton message est bien long et perso j'ai tendance à perdre le fil des explications, essaie la concision.

 

Tu as l'air de faire une fixette sur le handle, je présente à nouveau mes excuses pour avoir parlé de coordonnées car le handle est plus simple et précis

Qu'est-ce tu attends de nous exactement ?

Une aide pour faire un lisp, pour ça fais passer le code que tu as déjà écrit on verra le niveau et on pourra te guider efficacement

Je ne voudrais t'envoyer sur un coussin à l'hôpital ayant "oublié" de vérifier la présence de la selle avant de monter sur le vélo...

Est-ce que si on te donne moyen de faire un fichier Excel avec dans une colonne le handle du bloc et dans les colonnes mitoyennes les attributs est un début ?

Ce début tu l'as ? tu sais le faire ? tu aimerais le recevoir ?

 

Amicalement

 

 

Posté(e)

Bonjour,Ton post est plus de ta réflexion sur le sujet que d'explications claires et précises de ce que tu veux faire.

 

Comment ton fichier excel est tenu à jour pour mettre en corrélation les handles? Ou alors ton dessin est figé, tu ne bosse plus dessus (rajout de blocs/modifications d'objets) !

Y a des choses qui m'échappent...

 

Cependant un petit exemple de code s'appuyant sur (listbox) créé par (gile), celui doit fonctionner dans n'importe quel dessin existant.

Il permet de zoomer sur une entité en sélectionnant son handle dans la liste.

 

; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur
;;
;; Exemples
;; (str2lst "a b c" " ") -> ("a" "b" "c")
;; (str2lst "1,2,3" ",") -> ("1" "2" "3")
(defun str2lst (str sep / pos)
 (if (setq pos (vl-string-search sep str))
(cons (substr str 1 pos)
 	(str2lst (substr str (+ (strlen sep) pos 1)) sep)
)
(list str)
 )
)
;; ListBox (gile)
;; Boite de dialogue permettant un ou plusieurs choix dans une liste
;;
;; Arguments
;; title : le titre de la boite de dialogue (chaîne)
;; msg ; message (chaîne), "" ou nil pour aucun
;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...)
;; flag : 0 = liste déroulante
;; 1 = liste choix unique
;; 2 = liste choix multipes
;;
;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2)
;;
;; Exemple d'utilisation
;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1)

(defun ListBox (title msg keylab flag / tmp file dcl_id choice)
(setq tmp (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
)
(write-line
(strcat "ListBox:dialog{label=\"" title "\";")
file
)
(if (and msg (/= msg ""))
(write-line (strcat ":text{label=\"" msg "\";}") file)
)
(write-line
(cond
((= 0 flag) "spacer;:popup_list{key=\"lst\";")
((= 1 flag) "spacer;:list_box{key=\"lst\";")
(T "spacer;:list_box{key=\"lst\";multiple_select=true;")
)
file
)
(write-line "}spacer;ok_cancel;}" file)
(close file)
(setq dcl_id (load_dialog tmp))
(if (not (new_dialog "ListBox" dcl_id))
(exit)
)
(start_list "lst")
(mapcar 'add_list (mapcar 'cdr keylab))
(end_list)
(action_tile
"accept"
"(or (= (get_tile \"lst\") \"\")
(if (= 2 flag) (progn
(foreach n (str2lst (get_tile \"lst\") \" \")
(setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice)))
(setq choice (reverse choice)))
(setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab)))))
(done_dialog)"
)
(start_dialog)
(unload_dialog dcl_id)
(vl-file-delete tmp)
choice
)
(defun c:zoombyhandle ( / js n hdt l_hdt)
 (setq js (ssget "_X"))
 (cond
(js
 	(setq l_hdt nil)
 	(repeat (setq n (sslength js))
   	(setq hdt
     	(cdr
       	(assoc 5
         	(entget
           	(ssname js (setq n (1- n)))
         	)
       	)
     	)
   	)
   	(if hdt (setq l_hdt (cons hdt l_hdt)))
 	)
 	(command "_zoom" "_object" (cdar (entget (handent (listbox "HANDLES du dessin" "Choisir UN handle" (mapcar 'cons l_hdt l_hdt) 1)))) "")
)
 )
 (prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut,

 

Je crains que le manque de clarté dans l'exposé de la demande ne provienne, en partie du moins, d'une certaine incompréhension de ce que sont les blocs AutoCAD et les Handles.

 

Le terme "bloc" prête quelque peu à confusion car il recouvre deux concepts.

La définition de bloc qui est un objet non graphique stocké dans la table des blocs. Une définition de bloc a un nom unique dans la table des blocs du dessin (ce nom sert de clé pour le retrouver), c'est une collection d'entités graphiques.

Les références de bloc sont des entités graphiques insérées dans l'espace objet, l'espace papier (ou dans une définition de bloc). Une référence de bloc insérée dans le dessin n'est qu'une représentation de la définition du bloc qui a pu subir des transformations géométriques (déplacement, rotations, mises à l'échelle) mais qui contient affiche toujours les mêmes entités : celles contenu dans la définition du bloc. De même, le "nom" d'une référence de bloc n'est en fait que le reflet de celui de sa définition.

 

En résumé, on ne peut modifier ni le nom, ni les entités d'une référence de bloc, par contre, modifier le nom ou les entités d'une définition de bloc affectera toutes les références insérées.

 

Les choses sont différentes pour les "attributs" de bloc.

Là encore, on va retrouver des définitions d'attributs contenues dans la définition de bloc. Il s'agit d'entité textuelles qui servent de modèle (gabarit) pour la créations des références d'attribut. Les références d'attributs sont ajoutées aux références de bloc lors de leur insertion. Elles sont liées à la référence de bloc, mais contrairement aux autres entités graphiques simplement représentées dans la référence de bloc, elles ont leur existence propre, ce qui permet de les modifier (valeur du texte et position si pas verrouillée).

 

En résumé, on peut modifier des références d'attributs indépendamment dans différentes références de bloc. Modifier, ajouter ou supprimer une définition d'attribut dans une définition de bloc n'affectera pas les références déjà insérées à moins de faire une synchronisation d'attributs (ATTSYNC).

 

Les Handles (ou mainitens) sont des identifiants uniques dans la base données du dessin. Ils sont attribués par AutoCAD à tous les objets graphiques (arc, ligne, référence de bloc, ...) on non graphique (calque, table des blocs, définition de bloc, ...) lors de leur création. Ils sont donc immuables* et pérennes (chaque objet conserve le même Handle pendant toute l'existence du dessin).

 

En résumé, on ne peut pas modifier le Handle d'un objet existant dans un dessin. On peut le stocker dans un fichier externe afin de retrouver l'objet lors d'une prochaine ouverture de ce dessin (s'il n'a pas été effacé).

 

 

* Certains environnements de programmations comme .NET ou ObjectARX permettent toutefois de substituer un nouvel objet à celui auquel était affecté le handle celui-ci étant supprimé de la base données.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

merci beaucoup pour vos réponses, c'est super sympas <_< classe ce forume et les participants

 

je vais regarder Un le programme ci joint deux les explications du mastro Gile..

 

je veux juste récupérer la liste des handle qui sont les entêtes de mes blocs

j'ai le handle le blockname ect..

le blockname ne m'aide pas car je peux en avoir 2500 identique

 

par contre le Handle est COooool

ils sont tous différents.

 

J'aimerais pouvoir ZOOMER dessus après les avoir tous sous les yeux au lieu

d'aller dans excel choisir celui que je veux,

retourner dans AutoCAD et taper la commande joint tout en hait dans le post.

 

donc quand je suis dans autocad mon plan fait, j'aimerais S'il vous plait avoir un moyen

de zoomer objet sur une selection, avec si possible une boite de dialogue avec ces fameux

Handle entête de bloc, que je pourrais faire défiler et sélectionner ça serait géniale

Une sélection me suffirait

 

voila

 

je vais décortiquer Ce programme, a quand même il y a de la ligne

moi qui pensait en deux trois ligne.

 

merci encore, je vous tiens au courant

Posté(e)

merci gile pour cette explication extrêmement claire j'adore !

et merci Beaucoup BONUSCAD, c'est un site internet ça avec des ressources si je ne me trompe ?

 

je me doutais bien que ce Fameux Mainiten était quelque chose d'important,

Ah bon le langage .net peu s'amuser avec ces Mainiten,

AH AH ObjetARX du pure autodesk ça! il peu substituer un objet c'est GENIALE, Excellent

en fait tous les trucs subtiles d'autocad ce trouve dans sa programmation.

 

quand tu dis objet ça s'applique a tous ce qu'autocad définit comme objet?

qui porte ce handle pour le faire exister en somme, Warf_

mais il faut je suppose pour ce faire mettre en mémoire sa définition d'abord,

la récupére pour la traiter et l'écraser, ou il fait ça comme avec une mémoire,

je remplis je vide sans ce soucier réellement du contenue ?

 

plus besoin d'écraser l'objet avec le même nom si un bloc du COUP ?, purger une fois exploser

quand on place une polyligne, puis une autre celle-ci porte obligatoirement un autre Mainiten

c'est cool ça donc tu néttoie super bien avec ce system des contrôles de Handles, récupération,

ce que fait autocad en Gros quand il vérifie l'intégrité du DWG, il trie ces Mainitens,

sa mémoire en somme ou table des HANDLES on dire.

 

la franchement cela me plait, donc en gros tu exporte via un TXT ou xls, tu passe a la moulinette

pour mettre en place ton nouveau bloc en important sa définition, et tu peux mêmes écraser

son Mainiten pour lui en donner un Autre

ça me plait beaucoup et répond a ma question que je me posais

 

Qui était comme j'ai les handles, dans Excel que je l'ai injectes pour définir mes attributs

dans autocad espace objet, si je veux reconstruire ma base de donnés Handle

c'est possible du coup, car le fichier CLient est elle qu je l'ai récupéré,

ça ferait trés pro si je pouvais définir ma propre liste de Handles avec une légende,

Cool bon j'en suis loin.

 

ce Mainiten est Numeric seulement ou alphanumérique ? il y a du texte dans l'alpha numérique ? non ?

comme Micro001, Micro002, Micro003 pour la zone microprocesseur par exemple

ou je suis obligé de mettre que des nombres ?

 

bon je vais tester le code ci dessus, ou la il y a beaucoup de vert,

ça veut dire que cela ne va pas marcher il manque des parenthèses, virgules ou je ne sais encore,

vous êtes dure, dans le style poupées Russe, marrant, ça me rappel le PASCAL

et mon pote qui gérais des intégrales de malade DIXIT Telescope VLT, Keck, la silla

pour créer les mirroirs a courbure paramétrables

 

MERCI beaucoup, j'adore me mettre les neuronnes a l'envers mais je dois être plus conçit OK

désolé

 

je vais tester ça.

 

Ah oui pour les pro, indépendant qui font du code, j'aurais surement du taffe a leur proposer en terme de programmation, j'ai pas mal d'utilisateurs qui bosse avec du autodesk,

souvent un petit programme bien ficelé peu résoudre d'énorme contrainte et vue ce que l'on peu faire avec le noyau d'autocad, ce SOFT est monstreux.

 

MAX peut etre aussi ?

 

Si je vous dis IPAS plugins cela vous parle ? anciennement kinetix pour savoir votre niveau de programmation, tous ça c'est du SDK plus ou moins orienté C++

bonne soirée et encore merci

 

LA FRANCHEMENT JE DIS BRAVO CELA FONCTIONNE SUPER BIEN

ET MILLES MERCI...TROP FORT...

Si c'est giles qui a écrit le Code ce gart est une vraie Bugati

du lisps.

Posté(e)

Il m'avait semblé avoir été clair, mais manifestement, je n'ai pas été compris.

 

Le handle d'un objet est simplement un identifiant unique attribué par AutoCAD au moment où cet objet est ajouté à la base de données du dessin.

 

On ne peut pas changer le handle affecté à un objet par AutoCAD.

 

On ne peut pas choisir le handle d'un objet qu'on ajoute à la base de données.

 

Ce qu'on peut faire, dans certaines conditions seulement, c'est affecter le handle d'un objet existant à un nouvel objet avant qu'il soit ajouté à la base de données, ce qui a pour effet de supprimer l'objet pré-existant. Mais en général, c'est utilisé pour supprimer certains objets personnalisés (proxy) qu'on ne peut effacer autrement.

 

 

PS : une des choses qui font la qualité de ce site c'est (c'était) le fait que chacun essayait d'écrire un français correct, en évitant, tant que possible, les fautes d'orthographes.

Je le redis ici, personnellement, à partir d'un certain nombre de fautes, je n'arrive plus à lire le message et j'abandonne.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)
Ce qu'on peut faire, dans certaines conditions seulement, c'est affecter le handle d'un objet existant à un nouvel objet avant qu'il soit ajouté à la base de données, ce qui a pour effet de supprimer l'objet pré-existant. Mais en général, c'est utilisé pour supprimer certains objets personnalisés (proxy) qu'on ne peut effacer autrement.

Alors la j'apprends quelque chose, je pensais cela totalement impossible.

 

Autrement le jeune Padawan s'emballe très fort, mais ses idées et les moyens à utiliser ont l'air confus.

S'il ne propose pas quelque chose de concret, je ne sais pas si je vais suivre, parce ce que son soliloque...

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Alors la j'apprends quelque chose, je pensais cela totalement impossible.

 

Il y a une méthode ObjectARX / .NET qui s'appelle HandOverTo qui permet ça.

Elle est, par exemple, utilisée par la commande COUPURE (_BREAK). Si on coupe une ligne, la première partie est en fait la ligne raccourcie et conserve donc ses Handle et ObjectId (ENAME) et la seconde partie est un nouvel objet, mais quand on coupe un cercle, on se retrouve avec des arcs. HandOverTo permet alors de réaffecter les identifiants du cercle au premier arc.

Comme je le disais plus haut, j'utilise aussi cette méthode (ZombieKiller, BatchPurge) pour supprimer certains objets proxy récalcitrants qui ne se laissent pas effacer par la méthode classique Erase en substituant un nouveau dictionnaire vide à l'objet proxy (dans ce cas, on n'ajoutera pas le dictionnaire à la base de données).

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Ah ok ! c'est accessible uniquement en ARX/NET.

 

Je pense pas appliquer cette méthode de si tôt, mais merci pour l'info.

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

  • 3 semaines après...
Posté(e)

Je suis retombé sur ce LISP écrit il y a plus de 10 ans qui fait un zoom sur les objets dont les handles sont spécifiés par l'utilisateur.

Si ça peut aider.

Par contre, il y a plus de deux trois lignes de code...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité