Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

Je ne comprend pas d'où peut venir mon erreur :

 

Insertion de bloc tout les 2.00 vers les Z, avec rotation de 180° à chaque fois :

 

(defun c:insb ()

(setq bloc "mon_bloc")

(setq h (getint "\n Hauteur :"))

(initget 1)

(setq pt (getpoint "\n Point d'insertion :"))

(setq Rot 0)

(repeat (fix h)

(InsBlocdec pt bloc Rot)

(setq pt (list (car pt) (cadr pt) (+ (caddr pt) 2.00))

Rot (+ Rot 180)))

)

;;;;;;;;; Insert bloc rotation Rot + DECOMPOSER;;;;;;;;;;;

(defun InsBlocdec (pt chem Rot)

(command "-inserer" chem pt "1" "1" Rot

"_explode" (ssget "_L"))

)

 

==> ça fonctionne selon la hauteur, puis sa bug si la hauteur est un peu grande (ex : 20), en refusant de décomposer le 2 derniers blocs....

 

merci de vos conseils...

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Le problème vient de la visibilité à l'écran à mon avis,.... et d'expérience.

 

(defun InsBlocdec (pt chem Rot)
 (command "-inserer" chem pt "1" "1" Rot)
 (vla-explode  (vlax-ename->vla-object(entlast)))
 )

 

Avec le VLA, l'explosion n'a pas besoin de se faire en plein écran

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Encore mieux, avec un

 (command "-inserer" (strcat "*" chem) pt "1" "1" Rot)

c'est décomposé, ou en vla

(vla-explode (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point pt) chem 1 1 1 rot))

 

@+

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)

merci... mais :

 

- le "*mon_bloc" je l'avais testé, et le souci est que le bloc est constitué de plusieurs blocs imbriqué, ce qui donne un résultat bizarre pour les points d'insertion...

 

- en vla de Patrick_35 : ça à l'air de fonctionner, sauf que j'ai des choses bizarre si mon scu n'est pas en général... + remarque ci-dessous

 

- en vla de Tramber : ça fonctionne, sauf que j'ai le bloc non explosé qui reste sous le bloc explosé...

 

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

ou alors prendre la controle de la variable EXPLMODE

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

ou alors prendre la controle de la variable EXPLMODE

 

 

... Alors là je ne comprend vraiment pas la raison (j'ai vraiment l'impression d'être largué moi...)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Ah oui, c'est un peu plus compliqué

 

(defun InsBlocdecl(pt nom rot / a b c d)
 (setq a (vla-InsertBlock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point pt) nom 1 1 1 rot) b T)
 (setq b (vlax-safearray->list (vlax-variant-value (vla-explode a))))
 (vla-delete a)
 (while b
   (setq d nil)
   (foreach n b
     (if (eq (vla-get-objectname n) "AcDbBlockReference")
       (progn
         (setq c (vlax-safearray->list (vlax-variant-value (vla-explode n))) d (append d c))
         (vla-delete n)
       )
     )
   )
   (setq b d)
 )
 (princ)
)

 

La variable qu'a donné Tramber sert pour décomposer un bloc qui n'a pas une échelle X uniforme avec l'échelle Y

 

@+

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)

- en vla de Patrick_35 : ça à l'air de fonctionner, sauf que j'ai des choses bizarre si mon scu n'est pas en général...

 

Le fautif:

(setq pt (getpoint "\n Point d'insertion :"))

 

changer pour:

(setq pt (trans (getpoint "\n Point d'insertion :") 1 0))

 

EXPLMODE te permet suivant sa valeur (0 ou 1), d'exploser des blocs insérés à une échelle non uniforme.

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

Posté(e)

Toutes mes excuses, je ne pensais pas à EXPLMODE mais à l'autre, celle qui permet de décomposer les blocs en les insérant (pourquoi se compliquer la vie).

 

Mais je ne retrouve plus ce nom !

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Merci à tous (ce n'est pas encore ça mais ça vient ...)

en adaptant les réponses de tout le monde j'arrive presque à ce que je veux :

(pour info je suis en °)

 

(defun c:insb ()

(setq bloc "mon_bloc")

(setq h (getint "\n Hauteur :"))

(initget 1)

(setq pt (trans (getpoint "\n Point d'insertion :") 1 0))

(setq Rot 0)

(repeat (fix h)

(InsBlocdec pt bloc Rot)

(setq pt (list (car pt) (cadr pt) (+ (caddr pt) 2.00))

Rot (+ Rot 180)))

)

;;;;;;;;; Insert bloc rotation Rot + DECOMPOSER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun InsBlocdec (pt chem Rot / a)

(setq a (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))

(vlax-3d-point pt) chem 1 1 1 (/ (* pi Rot) 180)))

(vla-explode a)

(vla-delete a)

)

 

L'insertion des blocs se fait super bien (merci patrick)

La décomposition aussi (merci général)

... le seul souci étant que je récupère bien le bon point d'insertion maitenant (grâce au (setq pt (trans (getpoint "\n Point d'insertion :") 1 0)) .... (merci bonuscad) mais que je n'est pas la DIRECTION (ou le sens) !!! ...

 

merci

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

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é