Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

:exclam: Je suis nouveau sur ce site et il a l'air pas mal du tout.

 

Mais trève de bavardages, j'ai un petit problème de division.

J'explique :

Lorsque j'utilise la fonction "DIVISER" (Autocad 2004 Fr), celle-ci me demande si je veux utiliser un objet ou pas, s'il faut l'aligner sur le tracé sélectionné puis me demande le nombre de divisions qu'il faut placer.

Enfin, elle place le nombre de divisions souhaitées à EGALE DISTANCE l'une de l'autre.

 

:casstet: Mais moi je voudrais avoir la possibilité d'organiser la disposition des points de division selon une progression arithmétique (en pouvant définir la valeur de la progression ainsi que leur sens + ou -), géométrique (avec possibilité de définir les valeurs de progression ainsi que leur sens + ou -), trigonométrique (mêmes remarques), logarythmique (mêmes remarques). :casstet:

 

Qui peut m'aider ?

Merci d'avance. :red:

Connaître ses limites est déjà preuve d'intelligence.

Posté(e)

La commande DIVISER est très basique, il n'y a pas d'options possibles.

 

Tu vas être obligé de te tourner vers un language de prog.

Script (le plus simple)

Lisp assez facile malgré les parenthèses dont je suis assez fervent (vous avez remarqué?!!) ;)

VisualLisp&ActiveX super, mais déjà plus complexe

VBA (VisualBAsic) là c'est pas mon fort, plus structuré et rigide, mais interfacage avec d'autres applic. pouvant être interressantes mais a mon avis plus ch..t à faire évoluer a travers les versions et ce language est surveillé par les AntiVirus car très répandu dans le monde Windows ce qui rend sont usage quelque peu agacant (bien que son usage dans le monde de la DAO ne soit pas sournoi, enfin pas encore)

Et enfin le plus gros morceau

CC+ là j'y connais que dalle mais je crois qu'il donne au bout du compte de l'ARX après compilation.

 

Donc tout est possible, mais il faut faire son choix!

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

Posté(e)

(defun c:arit(/ vent delta prog dep lis compt *osmode*)
 (vl-load-com)(setq *osmode*(getvar "OSMODE"))(setvar "OSMODE" 0)
 (setq vent(vlax-ename->vla-object (car(entsel"\nSelectionnez une poly, ligne, arc, ou autre spline : "))))
 (setq delta(getreal "\nSpécifiez la distance de base : ")
prog(getreal "\nSpécifiez un réel (+ ou -) de progression arithmétique : "))
 (setq dep delta lis nil lisvoir nil	compt -1)
 (while(and
        (vlax-curve-getPointAtDist vent dep)
  (/=(car(vlax-curve-getPointAtDist vent 0.0))(car(vlax-curve-getPointAtDist vent dep)))
  (/=(cadr(vlax-curve-getPointAtDist vent 0.0))(cadr(vlax-curve-getPointAtDist vent dep))))
   (setq lis(append lis (list(vlax-curve-getPointAtDist vent dep))))
   (setq compt(1+ compt))
   (setq dep(+ delta(* compt prog) dep))
   (setq lisvoir(append lisvoir(list dep)))
 )
 (foreach p lis(command "point" p))(command)
 (setvar "OSMODE" *osmode*)
 )

 

Charge ce lisp et lance ARIT

 

Tu peux taper !lisvoir après coup pour te renseigner sur la liste de ditance générée

 

Ce prog a été érit rapidement, donc, à part les accrochages aux objets, il n'y a aucune garantie antibug (mauvaise selection, saisie de zéro,etc,...). Donc méfiance et enregistrement du travail avant. Et gaffe aux arithmétiques en négatif, ca peut ne jamais finir...

 

[Edité le 1/9/2005 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Merci Tramber,

Je vais essayer de lire ... et de comprendre ton script parce que je n'ai jamais programmé en script. Je pratique C, C++ ou VB. Et si j'y arrive, je tenterai de l'adapter à VB ou VBA.

 

Merci à tou Bonuscad pour ton avis.

:cool: Pour ce qui est du VBA, il est préférable, depuis l'apparition de Visual .net de travailler avec .net et d'abandonner les autres "Visual xxx" qui vont progressivement être abandonnés par Kro ! :cool:

 

Je vais essayer ça.

A bientôt et merci. :)

Connaître ses limites est déjà preuve d'intelligence.

Posté(e)

Salut undertaker4121,

 

Permet moi une petite précision, ce que te propose Tramber n'est pas du script mais du LISP, plus précisément du VisualLisip (en gros du Lisp + ActiveX).

 

Et oui, ta demande met tout de suite la barre assez haut, parmi les langages présentés par Bonuscad, seul les plus élaborés vont permettre de répondre à tes attentes.

 

Le script est une succession d'instructions envoyées à AutoCAD et ne permet pas de demander à l'utilisateur d'entrer des données.

 

Le langage macro, même avec du Diesel, reste aussi assez limité.

 

AutoLisp pourait suffire pour répondre à ta demande en ce qui concerne les entités simples (ligne, arcs) mais va trouver sa limite (ou peut-être la mienne) avec les splines et polylignes complexes (en tous cas nécessite un traitement différencié pour chaque type d'entité et des accrobaties avec les commandes AutoCAD pour placer des points sur une spline ou une polyligne).

 

VisualLisp en intégrant ActiveX permet plus facilement d'accéder aux propriétés des objets et de les modifier (fonctions "vlax-curve-..." dans le cas présent).

 

Le VBA doit permettre peu près la même chose mais je ne connais pas.

 

Quant à C++ je ne connais pas du tout !

 

La routine proposée par Tramber s'apparente plutôt à la commande "Mesurer" je te propose une version qui fonctionne plus comme "Diviser" (toujours en Vlisp):

 

(defun c:div_arithm (/ AcDoc ModSp obj dist n_div inc n_inc l_inc count)
 (setq AcDoc (vla-get-activedocument (vlax-get-acad-object))
ModSp (vla-get-ModelSpace AcDoc))
;; Démarre un groupe "undo"
 (vla-startundomark AcDoc)
;; Demande la sélection d'une entité jusqu'à ce qu'elle soit du type recherché
 (while
   (or
     (not obj)
     (not
(member
  (vla-get-ObjectName (setq obj (vlax-ename->vla-object obj)))
  (list "AcDbArc" "AcDbLine" " AcDbPolyline" "AcDbSpline")
)
     )
   )
    (setq obj (car
	 (entsel
	   "\nSelectionnez un objet à diviser: "
	 )
       )
    )
 )
 (setq	dist  (vlax-curve-getDistAtPoint obj (vlax-curve-getEndPoint obj)) ; longueur de l'entité
n_div (getint "\nSpécifiez le nombre de divisions: ")
inc   (getreal "\nSpécifiez la progression arithmétique :")
n_inc 0
count 0
 )
 (repeat n_div
   (setq n_inc	(+ n_inc count); nombre d'incrémentations
  l_inc	(cons n_inc l_inc); liste des sommes de nombres d'incrémentations par point
  count	(1+ count); compteur
   )
 )
 (setq	l_inc (reverse l_inc)
div   (/ (- dist (* n_inc inc)) n_div); distance des divisions sans incréments
count 0
 )
;; création des points
 (repeat (1- n_div)
   (setq pt_dist (+ (* (1+ count) div) (* (nth count l_inc) inc)))
   (vla-addPoint
     ModSp
     (vlax-3d-point (vlax-curve-getPointAtDist obj pt_dist))
   )
   (setq count (1+ count))
 )
;; fin du groupe undo
 (vla-endUndoMark AcDoc)
 (princ)
) 

[Edité le 6/9/2005 par (gile)]

commentaires ajoutés à 20h45

 

[Edité le 6/9/2005 par (gile)]

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

Posté(e)

Merci (gile),

;) Avec ces deux propositions, je vais tenter de omprendre comment fonctionne Autocad au niveau de la programmation puis j'essayerai d'utiliser VBA, pour voir comment ça marche et quelles sont les limites avec lui. Je me suis toujours contenté d'utiliser les outils d'Autocad sans jamais avoir eu besoin, professionnellement de créer des programmes, d'autres s'en chargeaient en secret et nous installaient les fonctions en catimini. Mais là, comme c'était mon patron qui payait, je n'avais pas à faire autre chose que ce poiur quoi j'étais payé ! ;)

 

;) Une petite question : est-il possible de faire tourner ton listing ligne par ligne pour suivre sont déroulement "à la trace" ?

 

A+

Connaître ses limites est déjà preuve d'intelligence.

Posté(e)

Salut,

 

Tu peux suivre à la trace l'évolution l'évolution de la valeurs des variables.

 

Il faut ouvrir le fichier dans l'Éditeur Visual LISP (Outils -> AutoLISP -> Editeur Visual LISP)

 

Tu peux commencer par Formater la fenêtre d'édition (icone page blanche+équerre ou menu Outils) pour rendre le code plus lisible (les paranthèses non refermées décalent la ligne suivante)

 

Ajouter un espion (icone lunettes ou menu Débogage) sur les chacune des variables à suivre ( par exemple obj dist n_div inc n_inc l_inc count)

 

Mettre un point d'arrêt (Basculer le point d'arrêt icone main ou menu Débogage) avant la paranthèse du while par exemple (placer le curseur avant de cilquer sur le bouton).

 

Charger la fenêtre d'edition active (icone flèche+feuille blanche ou menu Outils)

 

Ouvrir la fenêtre de la Console Visual LISP (si ce n'est déjà fait) et taper (c:div_arithm) après le dernier _$ pour lancer la fonction.

L'interprétation s'arrête au point d'arrêt, pour continuer l'interprétation "pas à pas" Pas à pas détaillé ou Pas à pas principal (icone flèche dans la paire de paranthèses / après les paranthèses ou menu Débogage ou F8 / shift+F8) la partie de code interprétée apparait en grisé dans la fenêtre d'édition et les valeurs des variables dans celle de l'espion.

 

Je vais éditer le code pour y rajouter quelques commentaires.

 

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

Posté(e)

:) Merci (gile),

 

Je vais étudier ton listing et essayer d'en comprendre toutes les subtilités.

 

Tiens, une p'tite explication sur le pourquoi de ma demande ?

 

A mon boulot, je travaille dans un bureau de mise au point (Arcelor-Cockerill-Sambre).

 

Mais dans le privé, je dessine et je rélise de [surligneur] LA DENTELLE AUX FUSEAUX ! [/surligneur] Pour ajouter des effets visuels dans le tissage, je suis souvent (par goût personnel) amené à jouer sur la distance séparant les épingles en lisière du tissage. Réaliser des variations de distances "au pif", c'est pas toujours très joli !

 

Il ne me reste plus qu'à adapter, à mes envies (et au VBA que je connais), toutes les idées qui m'ont été proposées.

 

Merci à vous tous pour votre aide.

Si vous avez encore d'autres idées, je serai ravi d'en profiter.

 

A+

Connaître ses limites est déjà preuve d'intelligence.

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é