Aller au contenu

importer un bloc sans la commande _insert


Messages recommandés

Posté(e)

Bonjour à tous.

Je n'arrive pas à importer un bloc qui n'existe pas dans les tables mais qui se trouve sur mon disque dans autocad en vlisp sans passer par la commande _insert :casstet:

J'arrive bien à pointer sur les blocs par ce biais

(vl-load-com)
(setq a (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))

Et un (vla-add a (vlax-3d-point '(0.0 0.0 0.0)) "MON_BLOC") me permet bien de créer mon_bloc, mais un (vla-add a (vlax-3d-point '(0.0 0.0 0.0)) "c:/rep1/rep2/MON_BLOC.dwg") ne fonctionne pas :mad:

J’ai pensé au début que ça ne créé que le nom et qu’ensuite il fallait lui ajouter les éléments, mais je n’arrive pas à importer un bloc :(

 

Merci d'avance et en espérant avoir été clair

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Je crois qu'il va rester mort! :mad:

 

malgré le nombre de visite personne n'as de solution à apporter.

pour l'instant j'exporte mes blocs de première nécéssité en DXF que je met dans un fichier bibliothèque j'ai la syntaxe à mofifier quelque peu (dotted List "(" en "[", "." en ":" et ")" en "]"). mais bon ca fait lourd au delà de la dizaine de bloc.

 

Pourl'instatn pas encore trouvé de solution aussi simple que celle que tu cite.

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Posté(e)

Merci pour ton aide, mais je garde espoir. Je vois passer certaines personnes qui ont un très bon niveau en autolisp ainsi qu’en visual lisp. Ce qui ne m’empêche pas de continuer à chercher au cas ou…

Accéder aux tables d’autocad n’est pas si simple que cela. J’avais déjà fait une manip sur les styles de traits et j’avais trouvé un vla-load dans LineTypes d’ActiveDocument d’AcadObject mais rien sur ce coup là. :casstet:

 

@+

 

 

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Patrick_35,

 

Et quel fromage amèreras-tu ?

 

;;; my-vla-Insert

;;; Permet d'insérer un fichier de dessin via les méthodes vla.

;;;

;;; Compatibilité: AutoCAD 2000 et plus

;;;

;;; Instructions:

;;; 1) Charger ce fichier

;;; 2) Taper la commande TEST

;;;

;;; Par Serge Camiré, CadNovation, 2005/02/25

;;; http://www.cadnovation.com/fr

;;;

 

 

;;; my-vla-Insert

;;; Permet d'insérer un fichier

;;; Reçoit:

;;; blockName: 'STR, le nom du fichier avec chemin complet ou relatif, avec ou sans extension

;;; et insensible à la casse.

;;; insPt: 'LIST, Point2D ou Poin3D (contenant des entiers ou des réels)

;;; x, y, z: 'REAL, les échelles non nulles

;;; ang: 'REAL, angle en radians

(defun my-vla-Insert (

blockName insPt x y z ang

/

)

(if (and

;; assertion

blockName (= (type blockName) 'STR) (/= "*" (substr blockName 1 1))

insPt (= (type insPt) 'LIST) (member (length insPt) '(2 3)) (and (mapcar 'numberp insPt))

(and (mapcar 'numberp (list x y z ang)))

(not (member t (mapcar 'zerop (list x y z))))

)

(progn

(if (= (length insPt) 2) (setq insPt (reverse (cons 0.0 (reverse insPt)))))

(setq insPt (mapcar '* insPt '(1.0 1.0 1.0)))

(my-vla-Insert-validated blockName insPt x y z ang)

))

)

 

;;; my-vla-Insert-validated

;;; Insère le bloc. Doit obligatoirement être appellé par my-vla-Insert

;;; Les paramètres sont les mêmes.

(defun my-vla-Insert-validated (

blockName insPt x y z ang

/ blocksTable definedBlockName found ucBlockName vlathisDrawing vlaCurrentSpace

)

(vl-load-com)

(setq ucBlockName (strcase blockName)) ; Upper case

 

;; Nous n'utiliserons pas (tblsearch "block" blockName)

(setq vlathisDrawing (vla-get-activedocument (vlax-get-acad-object)))

(setq vlaCurrentSpace (if (= acModelSpace (vla-get-ActiveSpace vlathisDrawing))

(vla-get-ModelSpace vlathisDrawing)

(vla-get-PaperSpace vlathisDrawing)

))

(setq blocksTable (vla-get-blocks vlathisDrawing))

(setq found nil)

(vlax-for block blocksTable

(setq definedBlockName (strcase (vla-get-name block)))

(if (= definedBlockName ucBlockName) (setq found t))

)

(if (not found)

(progn

(cond

((setq filename (findfile blockName)) nil)

((setq filename (findfile (strcat blockName ".dwg"))) nil)

(t (setq filename nil))

)

(if filename (vla-InsertBlock vlaCurrentSpace (PointToVariant insPt) fileName x y z ang))

)

(progn

(vla-InsertBlock vlaCurrentSpace (PointToVariant insPt) blockName x y z ang)

))

nil

)

 

;;; PointToVariant

;;; Conversion de Point2D ou Point3D en variant

(defun PointToVariant (

point

/ arraySpace sArray

)

(setq arraySpace (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length point)))))

(setq sArray (vlax-safearray-fill arraySpace point))

(vlax-make-variant sArray)

)

 

(defun c:test ()

; Insérer un des dessins dans le répertoire Sample

(my-vla-Insert "sample/colorwh" '(0 0) 1 1 1 0)

(princ)

)

(princ "\nTapez TEST pour tester avec le fichier \"Sample/Colorwh.dwg\".")

(princ)

 

 

Serge

 

Posté(e)

Eureka.........J'ai trouvé......

 

Ah, Serge tu viens de me couper l'herbe sous le pied. Bon je vais regarder de plus prés ton lisp et merci beaucoup

 

Voici quand même ce que je cherchais

(vl-load-com)
(vla-delete (vla-InsertBlock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0.0 0.0 0.0)) (findfile "MON_BLOC.DWG") 1 1 1 0))

 

ps : je ne fonctionne pas au fromage, mais au cidre, voir du chouchenne ;)

 

Et puisque que tu es de retour parmis nous en ce moment ,je n'ai pas eu de réponse sur ce lien

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Patrick_35,

 

On peux faire comme Astérix et Obélix dans le livre du tour de Gaule (et si Bernard Flavignard vient, il va nous en faire un en vélo).

 

Serge

 

Posté(e)

Du moment que ça ne se transforme pas en douze travaux.

C’est quand tu veux que tu passes dans ma région, et je me ferai un plaisir de t’indiquer les coins à visiter

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é