Aller au contenu

détermination de points et calcul du barycentre et +


Messages recommandés

Posté(e)

Bonjour à tous,

 

et surtout merci à ceux qui mon répondu,

me permettant ainsi d'avancer grandement dans l'écriture de mon progrmme.

 

je poursuis donc mon programme,

celui ci doit permettre de générer des boîtes au final;

la première étape était à partir d'une trajectoire représentée par une polyligne non rectiligne

de tracer par un double décalage de part et d'autre de celle ci de constituer un corridor.

 

la seconde étape réside dans l'insertion de bloc à intervalle régulier sur la trajectoire par la commande mesurer.

 

ces blocs sont des segments correspondant à la largeur de notre corridor.

il seront toujours insérés perpendiculairement à la trajectoire.

 

Nous arrivons à mon soucis :

 

en effet la commande mesurer insère bien mes blocs, seulement elle ne le fait pas sur les extrémités de la trajectoire.

 

j'ai bien essayé de les insérer mais ils ne s'insèrent pas perpendiculairement à la trajectoire.

 

la troisième étape de mon programme se décompose en 3 sous étapes :

 

- sélectionner tous les blocs pour les décomposer seulement il faudrait que je puisse les remettre dans le bon calque et non pas dans le calque 0 comme par défaut.

 

- puis par l'équivalent de la commande de covadis "" création des intersections "" dont je ne trouve pas les correspondances.

 

_ 1°/ création des intersections

paramètres:

- choix des calques des objets : le calque contenant les (LIMITE), et le calque contenant les 2 polylignes précédemment décalées (CORRIDOR),

 

_ 2°/ reconstitutions des contours

paramètres:

- objets constituant les limites : choix de l'objet référencé par le nom du calque le contenant les blocs décomposés et les polylignes de contour du corridor.

 

- objets identifiants : sélection de chacun des barycentres des futures boîtes pour le choix du contour à créer.

- Nouveaux contours créés : le nom du calque de destination.

 

 

voilà en quelques lignes exposé le travail que je dois réaliser, cependant comme je début en lisp je me perds un peu dans l'enchainement et l'écriture des lignes de commande

 

je joins la partie que j'ai déjà réalisé grâce aux trés bons conseils des uns et des autres que je remercie encore.

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;; ; CORRIDOR.LSP

;;; ;

;;; ; Création des boîtes le long de la Trajectoire de vol de l'hélicoptère.

;;; ; Ces boîtes correspondent aux limites du Perimètre du Corridor.

;;; ; Ces limites sont composées de boîtes juxtaposées toujours perpendiculaires à la trajectoire,

;;; ; dont les paramètres de longueur des boîtes et de largeur du corridor sont réglables,

;;; ; par une simple entrée au clavier dans la ligne de commande d'AutoCAD.

;;; ; Après chargement, l'exécution de la fonction "boite" est obtenu par :

;;; ; -> commande : (boite)

;;; ; selection polyligne, coordonnées des sommet & calcul longueur

;;;

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boite DCL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

 

(defun c:corridor ()

 

(setq dcl_id (load_dialog "Boite de dialogue corridor.dcl"))

(if

(not (new_dialog "boite_de_dialogue_corridor" dcl_id))

(exit)

)

;si il n'y a pas de boite de dialogue alors on lance le programme sans elle

 

;largeur du corridor

 

(action_tile "larg_corridor" "(setq largeur_corridor $value)")

 

;armature de peau

 

(action_tile "cas0" "(setq cas \"0\")")

(action_tile "cas1" "(setq cas \"1\")")

 

 

;j'établit la liste des blocs qui seront insérés dans les listes déroulantes

(setq liste_bloc '("li3" "lib" "b600"))

 

(start_list "bloc")

(mapcar 'add_list liste_bloc)

(end_list)

;;; (action_tile "bloc" "(setq bloc_largeur (nth (atoi $value) liste_bloc))")

 

;aide autoLISP done_dialog

 

(action_tile "accept" "(done_dialog 1)") ;1 pour OK ; (setq userclick T)

(action_tile "cancel" "(done_dialog 0)") ;o pour Cancel ; (setq userclick nil)

 

(start_dialog)

(unload_dialog dcl_id)

 

(setq ok (start_dialog))

 

(boite) ; on lance le programme boite

 

(princ)

)

 

 

(defun boite ()

 

(setq largeur_corridor (atoi largeur_corridor))

(setq cas (atoi cas))

 

(command "-calque" "e" "LIMITE" "co" "bleu" "LIMITE" "")

;;; (setq largeur_corridor (getdist "\n Donner la largeur du corridor ?:"))

 

 

; double décalage à gauche et à droite.

;(attribut du double décalage (ddllpp) (/ Vdist entité1 pt1 pt2 entitépoints anglepl PtGauche PtDroite)

 

; la largeur du corridor = distance de decalage.

(setq

entité1 (entget

(car (entsel "Selectionner la ligne ou la polyligne:"))

)

)

(if

(eq (cdr (assoc 0 entité1)) "LINE")

;;; determine si l'objet est ligne ou polyligne

(progn (Setq P1 (cdr (assoc 10 entité1)))

(setq P2 (cdr (assoc 11 entité1)))

)

(progn (setq entitépoints

(mapcar 'cdr

(vl-remove-if-not '(lambda (x) (= (car x) 10)) entité1)

)

)

(progn (progn (setq P1 (car entitépoints)))

(progn (setq P2 (cadr entitépoints)))

)

)

)

(setq anglepl (angle P1 P2))

(setq PtGauche (polar P1 (+ anglepl (/ pi 2)) largeur_corridor))

(setq PtDroite (polar P1 (- anglepl (/ pi 2)) largeur_corridor))

;;; commande appelant la fonction " decaler ".

 

(command "_offset" (/ largeur_corridor 2) P1 PtGauche "")

(command "_.chprop" (entlast) "" "_layer" "LIMITE" "_color" "_blue" "")

 

(command "_offset" (/ largeur_corridor 2) P1 PtDroite "")

(command "_.chprop" (entlast) "" "_layer" "LIMITE" "_color" "_blue" "")

 

(princ)

; fin de la fonction de double décalage.

 

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

 

; selection des limites.

 

;;; (setq e (entget (car (entsel)))) ;......................................... obtenir la liste de l'entité

(setq len (length entité1)) ;.................................................... longueur de la liste

(setq n 0)

(setq liste nil) ;......................................................... compteur à zero

(repeat len ;.............................................................. repeter pour chaque element de la liste

(setq e1 (car (nth n entité1))) ;.............................................. prendre chaque element de la liste et en retirer le code (1 er item)

(if (= e1 10) ;.......................................................... tester le code 10

(progn ;............................................................... si c'est le groupe 10 alors faire

(terpri) ;........................................................... nouvelle ligne

(princ (cdr (nth n entité1)))

(setq liste (cons (cdr (nth n entité1)) liste))

;........................................................................... ecriture des coordonnées

;(princ (cadr (nth n e)));.................................................. ecrit les valeurs de X

;(princ (caddr (nth n e)));................................................. ecrit les valeurs de Y

;........................................................................... (nth n e) : sort l'element n de la liste e (n=0,1,2,...)

) ;.................................................................... fin de progn

) ;...................................................................... fin de if

(setq n (+ n 1)) ;......................................................... incrementer le compteur

) ;........................................................................ fin repeat

(setq nbsommets (length liste))

(setq long 0)

(repeat (- nbsommets 1)

(setq P1 (car liste))

(setq P2 (cadr liste))

(setq D (distance P1 P2))

(setq long (+ D long))

(setq liste (cdr liste))

)

(prin1 long)

(princ)

 

(command "-calque" "e" "pk" "co" "magenta" "pk" "ch" "pk" "")

 

(setq point_debut (car liste))

(setq liste1 (reverse entitépoints))

(setq point_fin (car liste1))

 

(cond

((= cas 0) (command "mesurer" pause "b" "b600" "o" 1000 ""))

((= cas 1) (command "mesurer" pause "b" "b600" "o" 5000 ""))

)

 

(command "-inserer" "b600" p2 1 1 0 "")

(command "-inserer" "b600" point_fin 1 1 0 "")

; (nom de la commande / retour à covadis / b pour bloc / position orthogonale / grandeur numérique de la longueur de la boîte.

 

)

 

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fin temporaire du programme ;;;;;;;;;;;;;;;;;;;

 

à + denis.

 

 

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é