Insertions de bloc

Insertions de bloc

Kevin_Megel
Mentor Mentor
2 136 Visites
24 Réponses
Message 1 sur 25

Insertions de bloc

Kevin_Megel
Mentor
Mentor

Bonjour a tous,

 

comme la sugéré Patrick, j'ouvre un nouveau sujet, pour un lisp. Et je vais tenté d'être le plus claire possible. Cela fait suite au lisp sur la cration automatique des baie.

 

Le besoin : Ajouter des blocs a l'insertion de bloc particulié.

 

Lorsque l'on créer une baie 19" pour de l'audio visuel on a besoin parfois d'avoir entre certain element des plaques de ventilation.

 

Je cherche donc dans un premier temps lorsque j'insert le bloc A, B, C,... etc. une plaque de ventilation s'insert automatiquement au dessus de celui ci, tout en nous permettant la possibilité de la supprimé a tout moment.

 

Par la suite, j'aimerais pouvoir décliné ça avec d'autres types de materiel et d'autres types de plaques ( j'insert un bloc et automatiquement plusieur plaques s'insert aussi, avoir le choix de plusieur possibilité de plaques ect...)

 

Donc on revient au début :

 

1 - J'insert certain bloc, préalablement définit

2 - un autre bloc s'insert au dessus de celui si a une position définit par rappost au point d'insertion du premier bloc

 

 

Je rapelle, que je suis néophite au language lisp (même si j'ai quelque notions) et que je me suis embrouillé la tête tout seul en voulant faire trop compliqué.

 

Si le code marche, on verra pour le faire évoluer.

 

D'avance Merci.

 

Megeon

 

 

 

 

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Solutions acceptées (3)
2 137 Visites
24 Réponses
Replies (24)
Message 21 sur 25

Kevin_Megel
Mentor
Mentor

c'est exactement se que je voulais, un grand merci grand maître du lisp

 

( dans l'absolu j'aimerais que le code se lance tout seul a chaque fois que j'insert ces blocs mais point trop n'en faut)

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 22 sur 25

patrick_35
Collaborator
Collaborator

De rien. Le principal est d'y arriver. Smiley heureux

 

> dans l'absolu j'aimerais que le code se lance tout seul a chaque fois que j'insert ces blocs mais point trop n'en faut

J'y ai pensé, mais je me suis dit, dans l'absolu, que lancer un lisp ou une commande, cela revient au même et si on peut éviter les réacteurs (pour éviter d'alourdirAutocad) et en plus être plus clair en autolisp.

 

On peut l'améliorer avec une boite de dialogue pour la sélection des blocs, utiliser la variable cmdecho pour ne pas voir les commandes défiler, intégrer une gestion des erreurs et regrouper la fonction mins dans 1 undo.

Tu as la base.

 

@+

0 J'aime
Message 23 sur 25

Kevin_Megel
Mentor
Mentor

le truc c'est que a therme ce sera des non utilisateur d'autocad qui exploiterons le lisp donc j'essai de voir pour simpliffier au maximum l'utilisation (il servira a faire les baie en amond rapidement pour le client), même si ça doit alourdire autocad. De mon coté, bien sur j'utiliserais le lisp, (plus en phase exe quand tout sera definit pour le montage et les DOEs) mais je modifierais surtout les lignes pour ajouter des blocs lors de la sortie de nouveau materiel, ou elvolution.

 

ensuite le bloc de dialogue, on verra ça plus tard, mais la commande cmdecho m'interesse

 

mais oui j'ai la base, j'ai déjà de quoi m'éclater.

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 24 sur 25

patrick_35
Collaborator
Collaborator
Solution acceptée

Salut

Le lisp construit sur la base des réacteurs.
Fonctionne avec la commande inserer ou avec le DesignCenter

La routine pour le réacteur

(defun patrick:reacteur_inserer_mins(rea cde / ajout deplace der new nom nombl)

  (defun ajout(blo / doc)
    (setq new nil)
    (or (tblsearch "block" blo)
      (setq blo (findfile (strcat blo ".dwg")))
    )
    (and blo
      (progn
	(setq doc (vla-get-activedocument (vlax-get-acad-object)))
	(setq new (vla-insertblock (if (eq (getvar "cvport") 1)
				     (vla-get-paperspace doc)
				     (vla-get-modelspace doc)
				   )
				   (vla-get-insertionpoint der)
				   blo
				   (vla-get-xscalefactor der)
				   (vla-get-yscalefactor der)
				   (vla-get-zscalefactor der)
				   (vla-get-rotation der)
		  )
	)
      )
    )
  )

  (defun deplace(pos)
    (and new (vla-move new (vlax-3d-point (trans '(0.0 0.0 0.0) 0 1)) (vlax-3d-point (trans pos 0 1))))
  )

  (defun nombl(blo)
    (if (vlax-property-available-p blo 'effectivename)
      (vla-get-effectivename blo)
      (vla-get-name blo)
    )
  )

  (and	(vl-position (car cde) '("INSERT" "ACDCINSERTBLOCK" "DROPGEOM"))
    (progn
      (setq der (vlax-ename->vla-object (entlast))
	    nom (strcase (nombl der))
      )
      (cond
	((vl-position nom '("NXAMP4X4" "NXAMP4X1" "LA8"))
	  (ajout "plaqueventil")
	  (deplace '(100.0 100.0 0.0))
	)
	((vl-position nom '("BIM"))
	  (ajout "PLAQUEDEPROTECTION")
	  (deplace '(100.0 100.0 0.0))
	  (ajout "2U")
	  (deplace '(100.0 100.0 0.0))
	)
      )
    )
  )
)

Pour créer le réacteur

(defun c:minson()
  (or reacteur_inserer_mins
    (setq reacteur_inserer_mins (vlr-command-reactor nil (list (cons :vlr-commandended (function patrick:reacteur_inserer_mins)))))
  )
  (princ)
)

 

Pour supprimer le réacteur (revenir au mode normal)

(defun c:minsoff()
  (and reacteur_inserer_mins
    (vlr-remove reacteur_inserer_mins)
  )
  (setq reacteur_inserer_mins nil)
  (princ)
)

 

@+

Message 25 sur 25

Kevin_Megel
Mentor
Mentor

Merci mille fois patrick. C'est jsute parfait !

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime