Aller au contenu

Vérification de vla-offset


fabcad

Messages recommandés

Bonjour amis Lispeurs,

 

J'ai créé une routine pour "monter" des polylignes en solides 3d.

Pour les RDC et Niveaux pas de problème, mais pour les attiques, je suis obligé de décaler via vla-offset avec une distance de 2.8m, mais sur certaines polylignes le décalage est impossible car la distance d'un segment est trop petite.

 

Mes interrogations sont :

- Savoir si le décalage a bien fonctionné auquel cas je peux récupérer la dernière polyligne décalée sinon message d'erreur.

 

Merci pour votre aide,

 

Fabcad Le Rennais Métropolitain.

 

(defun Attique (Pline_en_cours /)
	(setq vlaobjet_pline (vlax-ename->vla-object Pline_en_cours))
	(setq
		code_attique (nth 1 liste_elements)
		hauteur_rdc 3.5
		hauteur_attique 2.8
		altitude_attique 3.5
	);fin setq variables

;Creation de l'attique
(if
	(and
		(eq "AcDbPolyline"  (vla-get-objectname vlaobjet_pline))
		(LM:ListClockwise-p (_group (vlax-get vlaobjet_pline 'coordinates)))
	)
	(setq tableau_attique (vla-offset vlaobjet_pline dist_attique))
	(setq tableau_attique (vla-offset vlaobjet_pline (- dist_attique)))
);fin if

;;; Etape 1 Récupération de la polyligne Attique.
(setq objet_attique (vlax-safearray-get-element (vlax-variant-value tableau_attique) 0))
;;; Affectation du calque et la couleur à la polyligne en cours
(vla-put-color objet_attique acRed)
(vla-put-Layer objet_attique calque_Attiques)

(vla-put-Elevation objet_attique altitude_attique)

;;; Etape 2 Changer l'épaisseur (pseudo-extrusion)
(vla-put-Thickness objet_attique 2.8)

;;; Etape 3 Conversion de l'objet Attique epaissi en objet Attique solide
;;; Conversion de l'objet vlisp en objet AutoCAD et sa conversion en solide 3D
(setq acad_objet_Attique (vlax-vla-object->ename objet_attique))
(command "_convtosolid" acad_objet_Attique "")
);fin defun Attique

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Si tableau_attique est nil, c'est que le décalage n'a rien donné. ;)

 

(defun Attique (Pline_en_cours / vlaobjet_pline tableau_attique objet_attique ) ; il vaut mieux déclarer certaines variables en local !
               (setq vlaobjet_pline (vlax-ename->vla-object Pline_en_cours))
               (setq
                       code_attique (nth 1 liste_elements) ; variable inutilisée, et liste_elements n'existe pas ?
                       hauteur_rdc 3.5 ; variable inutilisée ?
                       hauteur_attique 2.8
                       altitude_attique 3.5
               );fin setq variables

       ;Creation de l'attique
       (if
               (and
                       (eq "AcDbPolyline"  (vla-get-objectname vlaobjet_pline))
                       (LM:ListClockwise-p (_group (vlax-get vlaobjet_pline 'coordinates)))
               )
               (setq tableau_attique (vla-offset vlaobjet_pline dist_attique))
               (setq tableau_attique (vla-offset vlaobjet_pline (- dist_attique)))
       );fin if
       
       (if tableau_attique
         (progn
           ;;; Etape 1 Récupération de la polyligne Attique.
           (setq objet_attique (vlax-safearray-get-element (vlax-variant-value tableau_attique) 0))
           ;;; Affectation du calque et la couleur à la polyligne en cours
           (vla-put-color objet_attique acRed)
           (vla-put-Layer objet_attique calque_Attiques)

           (vla-put-Elevation objet_attique altitude_attique)

           ;;; Etape 2 Changer l'épaisseur (pseudo-extrusion)
           (vla-put-Thickness objet_attique 2.8) ; remplacer 2.8 par hauteur_attique ?

           ;;; Etape 3 Conversion de l'objet Attique epaissi en objet Attique solide
           ;;; Conversion de l'objet vlisp en objet AutoCAD et sa conversion en solide 3D
           (setq acad_objet_Attique (vlax-vla-object->ename objet_attique))
           (command "_convtosolid" acad_objet_Attique "")
         );fin progn
         (princ "\nLe décalage a échoué !")
       );fin if
);fin defun Attique

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Le décalage peut aussi générer plus d'un objet (par ex décalage d'un papillon vers l'intérieur => 2 polylignes).

Donc en règle générale, je récupère la dernière entité de la base de données avec (entlast), puis je lance la fonction de création de nouvelles entités, puis je balaie depuis l'ancienne dernière entité jusqu'à la fin avec (entnext ) ce qui me donne toutes les nouvelles entités crées.

C'est un peu barbare, mais ça marche assez bien.

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

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é