Aller au contenu

Conserver objets ou parties d'objets internes à un contour?


stugeol

Messages recommandés

Bonjour,

Je suis à la recherche d'une routine équivalente à la fonction covaclipping de Covadis.

 

En deux mot, on selectionne un contour (Une polyligne fermée) :

-Les objets externes au contour et n'intersectant pas le contour sont supprimés

-Les objets intersectant le contour sont ajustés, les parties internes au contour sont conservés, les parties externes sont suprimés

-Les objets entiérement contenus dans le contour sont conservés.

 

Aurriez vous cela dans vos tirroires, ou des partie de routines efféctuant une partie des taches?

 

Actuellement j'essait de développer une tel routine en VBA, je pêche sur la méthode pour ajuster les objets intersectants le contour et conserver la partie interne au contour.

Si vous avez des idées, des méthodes, je suis prenneur.

Cordialement.

Petit à petit on devient moins petit

Lien vers le commentaire
Partager sur d’autres sites

Aurriez vous une astuce pour ajuster une fenêtre à un contour. Je m'explique :

Dans l'espace objet je créer une polyligne fermée. je la copie avec un point de base (0,0,0) et la colle dans l'espace papier et je transforme cette polyligne en fenêtre.

Pour des polylignes sans arc de cercle, je calcul l'isobarycentre des sommets de ma polyligne. Dans l'onglet propriétée de la fenetre je renseigne les coordonnées calculés. Dans ce cas pas de problème mon contour et la fenêtre coïncide.

Si la polyligne contient des arcs, la fenêtre et la polyligne sont décalées...

Auriez vous une astuce pour que les deux se supperposent?

cordialement.

Petit à petit on devient moins petit

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Tu peux transformer ta polyligne en région, puis avec la commande PROPMECA récupérer les coordonnées du centre de gravité.

 

Voici un petit lisp qui pourra te faciliter ça:

 

(defun c:PLCG ( / *error* acdoc as po region)
(vl-load-com)
;~~~~~~~ SOUS-FONCTIONS ~~~~~~~~~~~
(defun gc:VariantToLispData (var)
; par (gile)
 (cond
   ((= (type var) 'variant)
    (gc:VariantToLispData (vlax-variant-value var)))
   ((= (type var) 'safearray)
    (mapcar 'gc:VariantToLispData (vlax-safearray->list var))
   )
   (T var)
 )
)
;~~~~~~~ FIN SOUS-FONCTIONS ~~~~~~~~~~~
(setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(if (= (getvar "CVPORT") 1)
 (setq as (vla-get-paperspace acdoc))
 (setq as (vla-get-modelspace acdoc))
)

(defun *error* (msg)
 (and msg
   (or
     (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON"))
     (princ (strcat "\nErreur : " msg))
   )
 )
 (if region (vla-delete region))
 (vla-endundomark acdoc)
 (princ)
)

(vla-startundomark acdoc)

(setq po (vlax-ename->vla-object (car (entsel "\nChoix de la polyligne : "))))
(if (and
     po
     (member (vla-get-objectname po) '("AcDb2dPolyline" "AcDbPolyline"))
     (= :vlax-true (vla-get-closed po))
   )
 (progn
     (setq region (car (vlax-invoke as 'Addregion (list po))))
     (setq cg (gc:VariantToLispData (vla-get-centroid region)))
     (vla-delete region)
     (setq region nil)
     (princ (strcat "\nCoordonnées du centre de gravité dans le SCU courant : " (rtos (car cg)) "," (rtos (cadr cg))))
 );progn
 (princ "\nObjet non supporté")
);if
(*error* nil)
);

(princ "\nCommande à utiliser: PLCG, entrer !cg pour utiliser les coordonnées du CG.")
(princ)

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é