Novice_python Posté(e) le 16 mars 2015 Posté(e) le 16 mars 2015 Bonjour à tous, Je suis confronté à un problème sous AutoCAD. En effet, je dispose d'un fichier TXT (voir ci-dessous) avec plusieurs colonnes respectant un certain formalisme:- nom du bloc- nom du calque d'insertion- Couleur du bloc- Echelle X- Echelle Y- Echelle Z- Position X- Position Y- Position Z- Rotation. Je voudrais ainsi insérer les différents blocs dans le dessin à partir d'un LISP et/ou de PYTHON. Tout d'abord, existe il un lien entre PYTHON et AUTOCAD ? Si oui, comment pourrais y parvenir ? Ensuite, je maîtrise depuis peu le langage LISP pour AUTOCAD. Je souhaite ainsi insérer les blocs dans le plan DWG en tenant compte des différentes contraintes énoncées précédemment. Après avoir lu différentes discussions, j'ai toujours du mal à parvenir à créer ce script. Voici un extrait de mon fichier txt : Nom,Calque,Couleur,Echelle X,Echelle Y,Echelle Z,Position X,Position Y,Position Z,Rotation101_extrem_garde_corps,SIGNS,blanc,1.0000,1.0000,1.0000,-179.4869,188.1703,0.0000,100.0000g102_bouche_a_cle,AEPS,cyan,1.0000,1.0000,1.0000,-200.4781,162.0923,0.0000,100.0000g105_regard_AEP,AEPS,cyan,1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,100.0000g106_support_affichage,URBS,blanc,1.0000,1.0000,1.0000,-116.7551,184.4099,0.0000,100.0000g108_rocher,SIGNS,blanc,1.0000,1.0000,1.0000,-179.3882,181.5267,0.0000,100.0000g Merci d'avance pour votre aide !! :)
vincentp010 Posté(e) le 16 mars 2015 Posté(e) le 16 mars 2015 Voici un exemple d'insertion de bloc en python.Il te faut importer win32com et que ton bloc soit définis dans le dessinAvec win32com tu as accès à l'interface com/ActiveX d'autocad import win32com.client import pythoncom def AcadPoint(pt): """ Take 2D or 3D point (x, y, [z]) and return a variant array of double to deal with autocad com interface """ if len(pt) == 2: pt = Point2D3D(pt) return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, pt) ## type: 8192 + 5 = 8197 def Point2D3D(pt): """ Take a 2D point (x, y) and return a 3D point (x, y, 0) """ return (pt[0],pt[1], 0) acad = win32com.client.Dispatch("AutoCAD.Application") if AutoCAD != None: doc = acad.ActiveDocument ms = doc.ModelSpace pt = AcadPoint((0,0,0)) # RetVal = object.InsertBlock(InsertionPoint, Name, Xscale, Yscale, ZScale, Rotation [, Password]) blk = ms.InsertBlock(pt,"monblock", 1, 1, 1, 0) blk.Layer = "moncalque" Aide au téléchargement du cadastre dgfip-download-helper Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0 Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js
Novice_python Posté(e) le 23 mars 2015 Auteur Posté(e) le 23 mars 2015 Bonjour Vincentp010, Merci tout d'abord pour ta réponse ! J'ai essayé de comprendre ton script, mais j'ai un message d'erreur lorsque je l'exécute. import win32com.clientimport pythoncom def AcadPoint(pt): """ Take 2D or 3D point (x, y, [z]) and return a variant array of double to deal with autocad com interface """ if len(pt) == 2: pt = Point2D3D(pt) return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, pt) ## type: 8192 + 5 = 8197 def Point2D3D(pt): """ Take a 2D point (x, y) and return a 3D point (x, y, 0) """ return (pt[0],pt[1], 0) acad = win32com.client.Dispatch("TEST_PLANCHE.dwg")if TEST_PLANCHE != None: doc = acad.ActiveDocument ms = doc.ModelSpace pt = AcadPoint((0,0,0)) # RetVal = object.InsertBlock(InsertionPoint, Name, Xscale, Yscale, ZScale, Rotation [, Password]) blk = ms.InsertBlock(pt,"106", 1, 1, 1, 0) blk.Layer = "VEG" J'ai modifié ton script afin que j'insère le bloc "106" défini dans le dessin, dans le calque "VEG". Est-ce bien la bonne méthode ? Merci d'avance
vincentp010 Posté(e) le 23 mars 2015 Posté(e) le 23 mars 2015 Il ne faut pas mettre le nom du dessin dans la commande Dispatch, le dessin doit être ouvert dans autocad avant de lancer le script. La bonne syntaxe est bien celle ci sans modificationsaccad = win32com.client.Dispatch("AutoCAD.Application") if accad != None: (J'ai mis accad car le forum remplace automatiquement "acad" par "Autocad" à cet endroit :angry: ) Ton bloc doit être définit dans le dessin et le calque doit exister. N’hésite pas si tu as des questions. Aide au téléchargement du cadastre dgfip-download-helper Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0 Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js
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