Titifonky
Membres-
Compteur de contenus
125 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Titifonky
-
Couper une poutrelle en angle de 14°
Titifonky a répondu à un(e) sujet de Dessinator-Ouahtravers dans SolidWorks
Si ta poutre a été crée à partir de la fonction "Construction soudée", tu peux utiliser la fonction "Ajuster/Prolonger" en séléctionnat ton plan de coupe à 14° -
Bonjour, Sur le site de Lee Mac http://www.lee-mac.com/clockwisep.html Ou sur celui de (Gile) http://gile.pagesperso-orange.fr/LISP/Vecteurs&Matrices.lsp
-
Congé sur une polyligne contenant des arcs
Titifonky a répondu à un(e) sujet de Titifonky dans Pour aller plus loin en LISP
Bon, après avoir un peu galéré et m'être dispersé, j'ai sorti un truc qui fonctionne, un peu à l'arrache. Je l'ai testé sur 200000 entité, ca prend un peu de temps mais ça passe sans bug. Le fonctionnement est simple : Decomposition de la polyligne Raccord des différents segments avec la commande Raccord Convertion des différents segments en une nouvelle polyligne (defun c:tst () (setvar "FILLETRAD" (getdist "Rayon de raccord")) (Raccorder_Polyligne (car (entsel "Selectionnez la polyligne à raccorder")) (getvar "FILLETRAD") ) ) (defun Raccorder_Polyligne (ent rayon / data pts enttmp ferme lst lstPl lent seg1 seg2 ptcomm pt1 pt2 deriv1 deriv2 ss ) ;; Nettoyage de la polyligne ;; On supprime le dernier sommet si celui ci est superposé avec le premier ;; et on la déclare fermée (and (setq data (entget ent) pts (dxf 10 data) ) (and (= (cdr (assoc 0 data)) "LWPOLYLINE") (apply 'and (mapcar (function (lambda (x1 x2) (equal x1 x2 1e-9))) (car pts) (last pts) ) ) ) (setq data (reverse data) data (remove-ele (assoc 10 data) data) data (remove-ele (assoc 40 data) data) data (remove-ele (assoc 41 data) data) data (remove-ele (assoc 42 data) data) data (reverse data) data (subst (cons 70 1) (assoc 70 data) data) ) (entmod data) ) ;; Si elle est fermée, ok ;; Si elle n'est pas fermé mais qu'elle à plus de deux sommets, ok (if (or (= (cdr (assoc 70 data)) 1) (> (length (dxf 10 (entget ent))) 2)) (progn ;; Pour éviter d'avoir des pb de raccord ;; On décale la polyligne dans les deux sens. ;; Cela permet de supprimer les segments qui disparaitront lors du raccord (setq enttmp (Courbe-Decaler ent rayon nil)) (entdel ent) (setq ent (Courbe-Decaler enttmp (* 2.0 rayon) t)) (entdel enttmp) (setq enttmp (Courbe-Decaler ent rayon nil)) (entdel ent) (setq ent enttmp data (entget ent) ferme (= (cdr (assoc 70 data)) 1) ) (setq lent (entlast)) (command "_explode" ent) (setq lent (entnext lent)) (while lent (setq lst (cons lent lst) lent (entnext lent) ) ) (setq lst (reverse lst) lstPl lst ) (mapcar (function (lambda (seg1 seg2) ;; On recherche le point (setq ptcomm (car (common-fuzz (Courbe-PtDepartPtArrive seg1) (Courbe-PtDepartPtArrive seg2) 1e-4 ) ) pt1 (Courbe-PointLePlusProche seg1 ptcomm) pt2 (Courbe-PointLePlusProche seg2 ptcomm) deriv1 (Courbe-Derivee1 seg1 (Courbe-ParamAuPoint seg1 pt1) ) deriv2 (Courbe-Derivee1 seg2 (Courbe-ParamAuPoint seg2 pt2) ) ) (if (not (colinear deriv1 deriv2 1e-5)) (progn (setq pt1 (Courbe-PointALaDistance seg1 0.1 (Courbe-Position seg1 pt1) ) pt2 (Courbe-PointALaDistance seg2 0.1 (Courbe-Position seg2 pt2) ) ) (if (not (or (zerop (apply '+ pt1)) (zerop (apply '+ pt2)))) (progn (setq ent (entlast)) (command "_fillet" (list seg1 pt1) (list seg2 pt2)) (if (not (equal ent (entlast))) (setq lstPl (cons (entlast) lstPl)) ) ) ) ) ) ) ) lst (if ferme (rot1 lst) (cdr lst) ) ) (setq ss (ssadd)) (mapcar (function (lambda (x) (ssadd x ss))) lstPl) (setvar "PEDITACCEPT" 1) (command "pedit" "m" ss "") (command "j" 0.1 "") ) ) (princ) ) ;;; =================== Sous-fonction ====================== ;; DXF ;; Retourne la liste des données associé au code dxf (defun dxf (code alst) (mapcar 'cdr (massoc code alst)) ) ;; MASSOC ;; assoc multiple, retourne toutes les clef key (defun massoc (key alst) (apply 'append (mapcar '(lambda (x) (if (= (car x) key) (list x) ) ) alst ) ) ) ;; REMOVE-ELE ;; Retourne la liste sans la première occurence de l'expression (defun remove-ele (ele lst) (if (equal ele (car lst)) (cdr lst) (cons (car lst) (remove-ele ele (cdr lst))) ) ) ;; COMMON-FUZZ ;; Comme COMMON avec une tolérance dans la comparaison (defun common-fuzz (l1 l2 fuzz) (if l1 (if (member-fuzz (car l1) l2 fuzz) (cons (car l1) (common-fuzz (cdr l1) l2 fuzz)) (common-fuzz (cdr l1) l2 fuzz) ) ) ) ;; MEMBER-FUZZ ;; Comme MEMBER avec une tolérance dans la comparaison (defun member-fuzz (expr lst fuzz) (while (and lst (not (equal (car lst) expr fuzz))) (setq lst (cdr lst)) ) lst ) ;;; ROT1 - mettre le premier élément à la fin, version simple, ;;; (rotation par un) (defun rot1 (lst) (append (cdr lst) (list (car lst)))) ;; COLINEAR (defun colinear (v1 v2 fuzz) (cond ((or (and (equal (car v1) 0 fuzz) (equal (car v2) 0 fuzz)) (and (equal (cadr v1) 0 fuzz) (equal (cadr v2) 0 fuzz)) ) t ) ((or (equal (car v1) 0 fuzz) (equal (car v2) 0 fuzz) ) nil ) (t (equal (/ (cadr v1) (car v1)) (/ (cadr v2) (car v2)) fuzz) ) ) ) ;; V2D ;; Retourne un vecteur 2D ;; ;; Arguments : un vecteur (defun v2d (l) (mapcar '+ (append l '(0.0 0.0)) '(0.0 0.0)) ) ;;; Decaler une courbe (defun Courbe-Decaler (Courbe Dist Cote) (setq Dist (* Dist (if Cote 1 -1 ) ) ) (vl-catch-all-apply 'vla-Offset (list (vlax-ename->vla-object Courbe) Dist) ) (entlast) ) ;;; Renvoi le point de depart et d'arrivé (defun Courbe-PtDepartPtArrive (Courbe) (list (V2D (vlax-curve-getStartPoint (vlax-ename->vla-object Courbe)) ) (V2D (vlax-curve-getEndPoint (vlax-ename->vla-object Courbe)) ) ) ) ;;; Renvoi le coté sur lequel se situe un point ;;; début : T ;;; fin : nil (defun Courbe-Position (Courbe Point) (if (> (Courbe-DistanceAuPoint Courbe (Courbe-PointLePlusProche Courbe Point) 't ) (* (Courbe-Longueur Courbe) 0.5) ) 'nil 't ) ) ;;; Renvoi le point le plus proche (defun Courbe-PointLePlusProche (Courbe lPoint) (V2D (vlax-curve-getClosestPointTo (vlax-ename->vla-object Courbe) lPoint ) ) ) ;;; Renvoi la longueur d'une courbe (defun Courbe-Longueur (Courbe / prop vCourbe) (setq vCourbe (vlax-ename->vla-object Courbe)) (- (vlax-curve-getDistAtParam vCourbe (vlax-curve-getEndParam vCourbe) ) (vlax-curve-getDistAtParam vCourbe (vlax-curve-getStartParam vCourbe) ) ) ) ;;; Renvoi le parametre au point donnée (defun Courbe-ParamAuPoint (Courbe Point) (vlax-curve-getParamAtPoint (vlax-ename->vla-object Courbe) Point ) ) ;;; Renvoi la derivee 1 d'une courbe (defun Courbe-Derivee1 (Courbe Param /) (V2D (vlax-curve-getFirstDeriv (vlax-ename->vla-object Courbe) Param ) ) ) ;;; Renvoi le point à la distance donnée à partir du debut ou de la fin (defun Courbe-PointALaDistance (Courbe Dist Fin) (setq Dist (if Fin Dist (- (Courbe-Longueur Courbe) Dist) ) ) (V2D (vlax-curve-getPointAtDist (vlax-ename->vla-object Courbe) Dist ) ) ) ;;; Renvoi la distance à un point donné à partir du debut ou de la fin (defun Courbe-DistanceAuPoint (Courbe Point Fin / dist) (setq dist (vlax-curve-getDistAtPoint (vlax-ename->vla-object Courbe) Point ) ) (if Fin dist (- (Courbe-Longueur Courbe) dist) ) ) -
Ca m'ai déjà arrivé, j'en avais des dizaines. Dans ma région ils appellent ça des "bêtes d'orage". Du coup j'ai du démonter entièrement l'écran, le nettoyer et le remonter. Une petite heure de boulot avec quelques tournevis.
-
Congé sur une polyligne contenant des arcs
Titifonky a répondu à un(e) sujet de Titifonky dans Pour aller plus loin en LISP
@Didier Bien sur, Creer une polyligne contenant des arcs, creer un raccord entre deux segements d'arc. Autocad ne veux pas. Et il répond l'insolent : Impossible de raccorder les segments arcs d'une polyligne. Il faut décomposer la polyligne, faire le raccord, puis la recréer. Sinon, je crois que j'ai trouvé une solution avec un peu de calcul. Pas encore eu le temps de la tester. Je vais voir ça se we. Voici mon pseudo-code : Une petite illustration Je décale la polyligne de base de la valeur d' un rayon du raccord souhaité de chaque coté. Courbe magenta et courbe bleu Je boucle sur les sommets des deux polylignes ainsi crée et je teste si le rayon jaune partant du sommet A jusqu'au centre c1 de l'arc coupe le segment d'arc 1 et si le rayon vert du sommet A jusqu'au centre c2 de l'arc coupe le segment 2. Si c'est le cas, c'est le bon coté et je récupère le centre de mon arc, le point A, et les points de départ et d'arrivée de mon arc. Sinon, c'est le point B. Je dessine une nouvelle polyligne avec mes nouveaux points. A voir comment je peux implémenter ça. Je cherche une routine qui renvoie les infos d'un segment de polyligne, arc ou ligne, en donnant simplement le no du segment. -
Congé sur une polyligne contenant des arcs
Titifonky a posté un sujet dans Pour aller plus loin en LISP
Bonjour, Je me heurte à une petit pb et ça fait mal !!! :blink: Comme explicité dans le titre, j'essaye de faire des congés sur une polyligne contenant des arcs. La commande RACCORD ne propose pas cette fonctionnalité et renvoie un beau message d'erreur. J'ai plusieurs dizaine de milliers de polyligne à traiter, je ne me vois pas le faire à la main. Avez-vous déjà été confronté à ce pb et avez-vous une solution lisp ? J'ai déjà commencé à developper une solution mais ça bug un peu dans tous les sens, le resultat est assez aléatoire. Une idée ? Merci. -
Déplacer un élement d'une liste
Titifonky a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
C'est vrai que ça fait toujours plaisir ;) Surtout que j'ai un peu abandonné AutoCad ces derniers temps au profit de Solidworks, a part pour le traitement de fichiers en "masse" avec le lisp bien sûr. Tiens, j'ai completement oublié de mettre un lien vers ce forum, j'y vais de ce pas le crier haut et fort sur les toits, enfin sur la toile. Un article pour moi, je suis impatient de le lire !!!!! -
Déplacer un élement d'une liste
Titifonky a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Ok, je comprends, très jolie solution. Merci pour l'explication. Pour résumer, l'élément ele qui était un des arguments de la fonction 'cons' est deplacé dans une fonction équivalente à 'cons' mais ayant comme seul argument le retour de la fonction loop, ce qui permet de différer sont évaluation à la remonté de la récursion. -
Déplacer un élement d'une liste
Titifonky a répondu à un(e) sujet de Clément.a dans Pour aller plus loin en LISP
Je viens de tomber sur ce poste et il y a une remarque que je n'ai pas très bien compris sur l'usage du lambda : Cela veut dire que lors de l'utilisation d'un lambda dans une boucle récursive celui ci est évalué qu'au retour ? -
Bonjour, Je post ici un petit morceau de code pour associer un champ avec un autre objet que celui de base. Dans mes présentations, j'ai un mtext contenant un champs pointant sur l'echelle de la fenêtre. Je l'utilise pour changer la fenêtre pointée par le champs. Si ca peut aider quelqu'un. (defun c:ReassocierChamps (/ entTexte entFenetre strChamps) (vl-load-com) (setq entTexte (car (entsel "Selectionnez le texte :")) entFenetre (car (entsel "Selectionnez la fenêtre :")) ;; Recupere l'entité champs strChamps (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget entTexte))))))))))))) ;; Pour eviter que la fonction subst modifie le nom du champs ;; passe le premier code 330 à 1000 strChamps (subst (cons 1000 (cdr (assoc 330 strChamps))) (assoc 330 strChamps) strChamps) ;; Modifie l'entité pointée strChamps (subst (cons 330 entFenetre) (assoc 330 strChamps) strChamps) strChamps (subst (cons 331 entFenetre) (assoc 331 strChamps) strChamps) ;; Remet le code 1000 à 330 strChamps (subst (cons 330 (cdr (assoc 1000 strChamps))) (assoc 1000 strChamps) strChamps) ) ;; Met à jour l'entité (entmod strChamps) (princ) )
-
Double parametre dans une cellule d'une table
Titifonky a répondu à un(e) sujet de ben_libout dans SolidWorks
Bonjour, Oui, c'est possible. Il suffit d’insérer un équation dans la colonne avec les deux champs. Dès que j'ai accès à SW je te fais une copie d'écran. -
Bonjour, Voici l'adresse d'un site où tu trouvera les principales intersections et leurs développés ici
-
Bonjour, Il n'existe pas de développé standard pour chaque diamètre de tube, le développé dépend du diamètre du diamètre des deux tubes et de l'angle entre les deux tubes. Par contre il existe des méthodes de traçage pour obtenir les développés en fonction de tout ces paramètres.
-
draftsight, ou avoir une quasi-LT à l\'oeil
Titifonky a répondu à un(e) sujet de Chanoine dans CAO, généralités
Par contre, la gestion des présentations est assez limité -
Bonjour, Tu peux également créer une propriété personnalisée dans ton dessin et insérer un champ dans ton bloc récupérant cette information Etienne
-
Bonjour, Je souhaite récupérer la liste de toutes les barres contenues dans un modèle. Le problème : Si cette barre est contenu dans une "construction soudée", la nomenclature est "indivisible" donc il ne prend pas en compte la barre, à moins de mettre le style de nomenclature en "normal". Y a t-il une solution pour avoir cette liste sans modifier le style de toutes les nomenclatures de mes "construction soudé" ?
-
Bonjour, Il s'agit bien de créer une mise en plan de la partie sous-traitée. J'ai une centaine de garde-corps sur une structure. Si je les mets en référence, ça va modifier tous mes plans de garde-corps. La seule solution est de créer un sous assemblage de ma structure mais ca va compliquer les modification ultérieures. Toute la structure n'est pas sous-traitée, une partie est même existante. J'ai donc des liaisons entre la structure existante et la nouvelle qui vont sauter si je crée un sous-assemblage. Je pense que c'est quand même cette solution que je vais utiliser, elle m'évitera de bidouiller mon cartouche et mes nomenclatures. Dommage que l'on ne puisse pas avoir la masse en fonction des objets affichés.
-
Bonjour, Je suis en train de faire la mise en page d'une structure dont une partie est sous-traitée. Dans mon cartouche, j'ai un champ qui inscrit automatiquement la masse de l'assemblage. J'ai donc fait une vue de la partie à sous-traiter et masqué des éléments mais le poids ne change pas dans mon cartouche. Dans mon dessin je sélectionne ma vue correspondant à la sous-traitance ainsi que le niveau de détail. Quand je masque un élément et lance la "mise à jour des propriétés physiques" il me dit qu'il ne va prendre en compte que les éléments actif, mais dans mon cartouche la masse affiche "N/D" Si je regarde les iPropriétés de mon assemblage, la masse est bien "N/D" Y a t-il une solution à mon problème ou dois-je faire la somme de mes masses "à la main" ?
-
Bonjour, Ou tu peux utiliser cette fonction qui retourne le jeu de sélection ss sous forme de liste (defun ss_list (ss) (if ss (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))) Tu peux ensuite utiliser un mapcar ou un foreach pour itérer sur chacun des élément. Etienne
-
Création d\'une selection de calque
Titifonky a répondu à un(e) sujet de harksin dans Débuter en LISP
Bonjour, Il ne faut pas ecrire (cons 8 MAT_* ) mais (cons 8 [surligneur]"[/surligneur]MAT_*[surligneur]"[/surligneur] ) Normalement, cela fonctionne. Etienne -
Bonjour, Je ne connais pas AutocadMAP mais je sais qu'il existe plusieurs commandes Autocad utilisant une boîte de dialogue n'ayant pas d'équivalent en ligne de commande tel "_qselect" Donc ton problème n'a peut être pas de solution en passant par la commande "_AecPublishToMapGuide" Amicalement
-
Bonjour, Si l'option "cycle de sélection" est activée, dans le cas ou l'on clique sur des objets superposés, une petite fenêtre s'ouvre et permet de sélectionner l'objet voulu. Voilà, c'est tout simple et bien pratique. Etienne
-
probleme barre d\'outils /navigateur sur inventor9
Titifonky a répondu à un(e) sujet de superkart dans Inventor
Bonjour, J'ai eu un problème du même genre il y a quelques temps : voir ici Bonne soirée -
Impression dans espace objet, probleme bloc dynamique
Titifonky a répondu à un sujet dans Routines LISP
Bonjour, C'est normal, ton Lisp sélectionne toutes les occurrences de bloc dont le nom est "FOND_DE_PLAN". Dans le cas d'un bloc "normal", le nom de l'occurrence du bloc correspond bien au nom du bloc, cad "FOND_DE_PLAN" dans ta situation. Mais dans le cas d'un bloc dynamique, le nom de l'occurrence du bloc est plutôt du type "*U5". Il faudrait faire une petite modification dans le Lisp pour aller rechercher les noms des blocs dynamique liés aux occurrences que tu as sélectionnées. Je n'ai jamais travaillé avec les blocs dynamique donc je ne pourrais pas t'aider dans ce domaine. Désolé Etienne PS: Pour plus de lisibilité, peux tu mettre ton code entre les balises \[code\] \[/code\] [Edité le 13/12/2010 par Titifonky] -
lire une propriété personnalisée
Titifonky a répondu à un(e) sujet de PHILPHIL dans Pour aller plus loin en LISP
Bonjour, Une routine trouvée sur internet http://www.cadtutor.net/forum/showthread.php?32034-Drawing-Properties (defun GetInfo(Key / sInf cPrp pVal) (vl-load-com) (setq sInf(vla-get-SummaryInfo (vla-get-ActiveDocument (vlax-get-acad-object)))) (if(vl-catch-all-error-p (vl-catch-all-apply 'vla-GetCustomByKey (list sInf Key 'pVal))) (princ(strcat "\n*** ERROR. Key '" Key "' not fouund! ")) (princ(strcat "\n" Key " = " pVal)) ) (princ) )
