Titifonky
Membres-
Compteur de contenus
125 -
Inscription
-
Dernière visite
Contact Methods
-
Website URL
http://www.le-metal.net
Profile Information
-
Gender
Male
Titifonky's Achievements
Newbie (1/14)
1
Réputation sur la communauté
-
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
