Aller au contenu

Varaible \"UCSXDIR\" pour activePviewport ?


Messages recommandés

Posté(e)

Salut,

(gile) - encore lui - il y a quelque temps maintenant, m'avait permis de m'arranger le coup du problème d'orientation d'insertion de blocs en passant par vla-insertblock .... (ici)

 

Mais maintenant mon problème est le suivant : lorsque je veux insérer un bloc dans une fenêtre active de l'EP, dans laquelle j'aurais orienter mon SCU différement du SCU de l'EO "onglet", cette orientation n'est pas pris en compte.... faute à UCSXDIR je pense....

 

(defun getSpace ()
 (if (= (getvar "CVPORT") 1)
   (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
   (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
   )
)

(vla-insertblock (getSpace)									;
(vlax-3d-point (trans pt 1 0)) NomB 1 1 1						;
(angle '(0 0 0) (trans [b](getvar "UCSXDIR")[/b] 0 (trans '(0 0 1) 1 0 T))))

 

merci de votre aide !!!

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

Posté(e)
c'est bien le SC de la fenêtre active, et pas celui de la présentation que tu as changé ?

oui oui...

exemple :

Le SCG en espace objet "onglet"

je tourne mon SCU dans la fenêtre de 22 sur les X et de 33 sur les Z.

l'orsque le bloc s'insert, il est en SCG.

 

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

Posté(e)

Le SCG en espace objet "onglet"

je tourne mon SCU dans la fenêtre de 22 sur les X et de 33 sur les Z.

l'orsque le bloc s'insert, il est en SCG.

 

Je fais :

 

(vla-insertblock (getSpace)
(vlax-3d-point (trans (getpoint) 1 0)) "Bloc" 1 1 1
(angle '(0 0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T)))) 

 

J'ai :

 

http://img137.imageshack.us/img137/9054/insscurg9.png

http://img523.imageshack.us/img523/4212/insscu2eb1.png

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

Posté(e)

Re,

en repiquant ton ancien exemple :

 

(defun Ins_BlocImb (NomB pt)
(vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
(vlax-3d-point (trans pt 1 0)) NomB 1 1 1
(angle '(0 0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T))))
)

(defun c:test ()  
(setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Bloc (vla-add (vla-get-Blocks AcDoc)
(vlax-3d-point '(0 0 0))
"Bloc"
)
Bloc_1 (vla-add (vla-get-Blocks AcDoc)
(vlax-3d-point '(0 0 0))
"Bloc_1"
)
Bloc_2 (vla-add (vla-get-Blocks AcDoc)
(vlax-3d-point '(0 0 0))
"Bloc_2"
)
)
(vla-addcircle
Bloc_1
(vlax-3d-point '(0 0 0))
10
)
(vla-addcircle
Bloc_1
(vlax-3d-point '(0 0 0))
5
)
(vla-addline
Bloc_2
(vlax-3d-point '(-10 -10 0))
(vlax-3d-point '(10 10 0))
)
(vla-addline
Bloc_2
(vlax-3d-point '(-10 10 0))
(vlax-3d-point '(10 -10 0))
)  
(Ins_BlocImb "Bloc_1" '(0 0 0))  
(Ins_BlocImb "Bloc_2" '(0 0 0))
)

 

En EO (SCG) :

http://xs221.xs.to/xs221/07465/testscg.jpg

 

En EP, fenêtre active, SCU 90 sur X (dans la fenêtre uniquement):

http://xs121.xs.to/xs121/07465/testscuEP.jpg

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

Posté(e)

J'ai compris ton souci.

 

L'expression :

(angle '(0 0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T))))

c'est pour la rotation du bloc, c'est à dire l'angle par rapport à l'axe X du SCO du bloc.

 

Si tu veux insérer le bloc dans un plan non parallèle au SCG il faut aussi forcer sa normale (direction d'extrusion)

 

(setq norm (trans '(0 0 1) 1 0 T))

(vla-put-Normal
 (vla-insertblock
   (vla-get-modelspace
     (vla-get-activedocument (vlax-get-acad-object))
   )
   (vlax-3d-point (trans (getpoint) 1 norm))
   "bloc"
   1
   1
   1
   (angle '(0 0 0)
   (trans (getvar "UCSXDIR") 0 norm)
   )
 )
 (vlax-3d-point norm)
) 

 

PS : dans le code que tu donnes tu ne crée pas de bloc imbriqué, tu insères 2 blocs. Pour imbriquer les blocs bloc_1 et bloc_2 dans bloc, pui insérer bloc dans le dessin il faudrait faire :

 

(defun Ins_BlocImb (NomB pt)
 (vla-insertblock
   (vla-get-modelspace
     (vla-get-activedocument (vlax-get-acad-object))
   )
   (vlax-3d-point (trans pt 1 0))
   NomB
   1
   1
   1
   (angle '(0 0 0)
   (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T))
   )
 )
)


(defun c:test (/ acdoc bloc bloc_1 bloc_2)
 (setq	AcDoc  (vla-get-ActiveDocument (vlax-get-acad-object))
Bloc   (vla-add	(vla-get-Blocks AcDoc)
		(vlax-3d-point '(0 0 0))
		"Bloc"
       )
Bloc_1 (vla-add	(vla-get-Blocks AcDoc)
		(vlax-3d-point '(0 0 0))
		"Bloc_1"
       )
Bloc_2 (vla-add	(vla-get-Blocks AcDoc)
		(vlax-3d-point '(0 0 0))
		"Bloc_2"
       )
 )
 (vla-addcircle
   Bloc_1
   (vlax-3d-point '(0 0 0))
   10
 )
 (vla-addcircle
   Bloc_1
   (vlax-3d-point '(0 0 0))
   5
 )
 (vla-addline
   Bloc_2
   (vlax-3d-point '(-10 -10 0))
   (vlax-3d-point '(10 10 0))
 )
 (vla-addline
   Bloc_2
   (vlax-3d-point '(-10 10 0))
   (vlax-3d-point '(10 -10 0))
 )
(vla-insertBlock
   Bloc
   (vlax-3d-point '(0 0 0))
   "bloc_2"
   1
   1
   1
   0
   )
 (vla-insertBlock
   Bloc
   (vlax-3d-point '(0 0 0))
   "bloc_1"
   1
   1
   1
   0
   )
 (Ins_BlocImb "Bloc" '(0 0 0))
) 

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

Posté(e)
Si tu veux insérer le bloc dans un plan non parallèle au SCG il faut aussi forcer sa normale (direction d'extrusion)

ça me parait évident !...... maintenant que tu me le dits !!!!...

merci une fois encore (gile).

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é