Chris24 Posté(e) le 28 avril 2009 Posté(e) le 28 avril 2009 Bonjour à toutes et à tous Serait-il possible de réaliser 2 commandes.Une pour les gaines circulaire et l'autre pour les gaine rectangulaire.Ces commade seraient de réaliser partiellement du calorifuge d'épaisseur différent sur les gaines.Je voudrait qu'il est<1er Point>:<2ème point>:Epaisseur du Calorifuge: J'espère que j'ai été clair Merçi d'avance a tous Cordialement @+ [Edité le 28/4/2009 par Chris24]
stephd Posté(e) le 29 avril 2009 Posté(e) le 29 avril 2009 Salut, Avec quel logiciel travail tu? a+ Mon site... Mon forum...
Chris24 Posté(e) le 4 mai 2009 Auteur Posté(e) le 4 mai 2009 Bonjour à toutes et à tous Je voudrait qu'il est1er Point:2ème point:Epaisseur du Calorifuge: Voilà, à quoi je voudrai que les commandes ressemble. Merçi d'avance a tous pour votre disponibilité Cordialement @+
sechanbask Posté(e) le 12 mai 2009 Posté(e) le 12 mai 2009 Ici, le premier problème n'est pas la programmation mais la facilité de trouver un algorithme avec les arguments que tu souhaites. Je m'explique, je ne vois pas comment en se repérant de manière géométrique/mathématiquement il est possible de donner un résultat avec les points que tu fournis à autocad. Je pense que la manière la plus simple c'est de considérer les points le long de l'axe. Ça fait longtemps que je ne me suis pas pencher sur un problème graphique (problème vraiment très compliquer si l'on ne programme pas à plein temps et si on est une buse comme moi on math matricielle) : Je te propose donc un bout du code vraiment brute sans commentaire, mais je pourrais te fournir tous les explications que tu souhaites : Sub PVC() Dim pt As Variant Dim pt1 As Variant Dim ligne As acadline Dim ptAvt As Variant Dim teta As Double Dim deltX As Double Dim strReduc As String Dim strCoude As String Dim blockObj As AcadBlockReference Dim strpropo As String Dim keywordList As String Dim ptgarde As Variant Dim offsetvar As Variant Dim VarpinsTr As Variant Dim strMonG As String Dim strEntree As String Dim strTaille_reduc As String Dim strCalquecourant As String strCalquecourant = ThisDrawing.ActiveLayer.Name calque_units sngDiametre = ThisDrawing.Utility.GetReal("sngDiametre du pvc en mm : ") sngDiametre = sngDiametre * coef pt = ThisDrawing.Utility.GetPoint(, "Point de départ :") 'garder ce pt ptgarde = pt Do pt1 = ThisDrawing.Utility.GetPoint(pt, "Extrémité :") Set ligne = ThisDrawing.ModelSpace.AddLine(pt, pt1) offsetvar = ligne.Offset(sngDiametre / 2) offsetvar = ligne.Offset(-sngDiametre / 2) With ligne .layer = actlayer & "-A" End With On Error Resume Next 'faire un getpoint mais avec choix du texte et si le getpoint echoue faire une 'selection du texte sinon ajouter au segment la ligne 'Définition des mots-clés keywordList = "Keyword1 Keyword2" ThisDrawing.Utility.InitializeUserInput 128, keywordList pt = ThisDrawing.Utility.GetPoint(pt1, "té Droite/té Gauche/Monter/Descendre/Texte diamètre/Clore") 'récupère ce que l'itulisateur a rentré grâce à 'on error resume next strEntree = ThisDrawing.Utility.GetInput strMonG = VBA.Left(ThisDrawing.Utility.GetInput, 1) Select Case Err.Numbertu veux Case "-2147352567" 'l'utilisateur à fait "Échap" On Error GoTo 0 'le calque courant avant la commande et rendu actif ThisDrawing.ActiveLayer = ThisDrawing.layers(strCalquecourant) 'l'utilisateur est informé de son annulation ThisDrawing.Utility.Prompt " Annulée par l'utilisateur." 'le programme est arrété Exit Sub Case "-2145320928" 'l'utilisateur a entré un mot clé On Error GoTo 0 'Debug.Print strMonG & "strMonG" 'test du mot clé Select Case strMonG Case "" Debug.Print "l'utilisateur vient de rentrer un espace" Exit Sub Case "d", "D" 'insérer une culotte à direction à droite ThisDrawing.Utility.Prompt "insérer une culotte à direction à droite" & teta Exit Sub Case "g", "G" 'insérer une culotte à direction à gauche ThisDrawing.Utility.Prompt "insérer une culotte à direction à gauche" & teta '************** strReduc = "nettoy_culotte_bt14_back.dwg" Set blockObj = ThisDrawing.ModelSpace.InsertBlock(pt1, strReduc, 1#, 1#, 1#, teta) Exit Sub Case "c", "C" strpropo = ThisDrawing.Utility.GetString(False, "Monter") Select Case strpropo Case "m", "M" Insertion_coude90_montant End Select Case "r", "R" 'lancer la funciton ou sub pour faire une réduction 'Insertion_reduction 'faire procédure pour le calcul du dblModule strTaille_reduc = ThisDrawing.Utility.GetString(False, "donner le diamètre réduit : ") Dim dblModule As Double dblModule = Sqr((pt1(0) - pt(0)) ^ 2 + (pt1(1) - pt(1)) ^ 2) deltX = pt1(0) - pt(0) Debug.Print deltX Dim deltY As Double deltY = pt1(1) - pt(1) Debug.Print deltY If deltX = 0 And deltY > 0 Then teta = ArcCos(deltX / dblModule) End If If deltX = 0 And deltY < 0 Then teta = -ArcCos(deltX / dblModule) End If If deltX > 0 And deltY > 0 Then teta = ArcCos(deltX / dblModule) End If If deltX < 0 And deltY > 0 Then teta = ArcCos(deltX / dblModule) End If If deltX > 0 And deltY < 0 Then teta = -ArcCos(deltX / dblModule) End If If deltX < 0 And deltY = 0 Then teta = -ArcCos(deltX / dblModule) End If If deltX < 0 And deltY < 0 Then teta = -ArcCos(deltX / dblModule) End If '************** strReduc = "Rcc_" & sngDiametre & "-" & strTaille_reduc & ".dwg" Set blockObj = ThisDrawing.ModelSpace.InsertBlock(pt1, strReduc, 1#, 1#, 1#, teta) 'blockObj.GetXData = If blockObj.ObjectName = "AcDbBlockReference" Then 'enregistrer l'entité en tant que IAcadBlockReference2 Dim oBkRef As IAcadBlockReference Dim varAttributes As Variant 'On Error GoTo gestion Set oBkRef = blockObj Debug.Print oBkRef.Name On Error GoTo 0 If oBkRef.HasAttributes Then 'hasattribut 'Debug.Print oBkRef.Name varAttributes = oBkRef.GetAttributes Dim n As Integer 'pour chaque attribut For n = LBound(varAttributes) To UBound(varAttributes) 'si l'étiquette de l'attribut est coordonnees If varAttributes(n).TagString = "HAUTEUR_TRAPEZE" Then Dim sngLongueur As Single Debug.Print varAttributes(n).TextString 'sngLongueur = End If 'varAttributes(n).TagString = "HAUTEUR_TRAPEZE" Then Next n 'pour chaque attribut End If 'hasattribut End If 'blockObj.ObjectName = "AcDbBlockReference" Then pt(1) = pt1(1) + sngLongueur * Sin(teta) pt(0) = pt1(0) + sngLongueur * Cos(teta) 'pt = pt1 sngDiametre = strTaille_reduc sngDiametre = sngDiametre * coef Case Else End Select Case Else ptgarde = pt deltX = pt1(0) - pt(0) deltY = pt1(1) - pt(1) 'Debug.Print deltY dblModule = Sqr((pt1(0) - pt(0)) ^ 2 + (pt1(1) - pt(1)) ^ 2) If deltX = 0 And deltY > 0 Then teta = ArcCos(deltX / dblModule) End If If deltX = 0 And deltY < 0 Then teta = -ArcCos(deltX / dblModule) End If If deltX > 0 And deltY > 0 Then teta = ArcCos(deltX / dblModule) End If If deltX < 0 And deltY > 0 Then teta = ArcCos(deltX / dblModule) End If If deltX > 0 And deltY < 0 Then teta = -ArcCos(deltX / dblModule) End If If deltX < 0 And deltY = 0 Then teta = -ArcCos(deltX / dblModule) End If If deltX < 0 And deltY < 0 Then teta = -ArcCos(deltX / dblModule) End If Dim strTeta As String strTeta = teta If VBA.Left(strTeta, 15) = "1,5707963267949" Or VBA.Left(strTeta, 15) = "-1,570796326794" Then strCoude = "C-90d_" & sngDiametre & "_c.dwg" End If Set blockObj = ThisDrawing.ModelSpace.InsertBlock(pt1, strCoude, 1#, 1#, 1#, teta) Set ligne = ThisDrawing.ModelSpace.AddLine(pt1, pt) offsetvar = ligne.Offset(sngDiametre / 2) offsetvar = ligne.Offset(-sngDiametre / 2) With ligne .layer = actlayer & "-A" End With 'calculer langle entre la droite tracée et le point pt 'si l'angle est remarquable, insérer l coude qu'il faut pour le diamètre et l'angle 'str = "C-" & sngAngle & "d_" & sngDiametre & "_c" End Select Loop Until strReduc = "n" End Sub Je fais cette demande, mais normalement, je ne suis pas du genre à réclamer : Comme tu peux le voir, on bosse plus ou moins dans le même domaine, j'avais commencé ce code pour dessiner de la gaine galva, des réseaux d'évacuation PVC...etc ça n'a pas pu aboutir car j'ai eu beaucoup d'autre occupation et surtout parce que je me suis découragé devant le problème de l'orientation secondaire des blocs pour les coudes, culotte etc... Si jamais, tu as l'intention de poursuivre un tel projet, tu pourras compter sur moi pour l'aide mais j'aimerais que ton code soit libre comme ceux que j'ai posté afin que les vendeurs de logiciel souvent mal fini arrête de VOLER de l'argent au BE. Merci de ta compréhension. [Edité le 20/5/2009 par sechanbask] ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
Chris24 Posté(e) le 13 mai 2009 Auteur Posté(e) le 13 mai 2009 Salut Sechanbask. Et merçi pour ce code. Malheuresement je ne suis pas un programmeur, et comme tu le dit si bien, il est vrai que les logiciels sont relativement cher. Et si un jour je le devients mes codes seront libres. Et encore merçi, je vais l' essayer. @+
Chris24 Posté(e) le 20 mai 2009 Auteur Posté(e) le 20 mai 2009 Bonjour à toutes et à tous. Salut sechanbask. Excuse moi de te répondre en retard, j'aimerais que tu me donne la marche à suivre pour ce code, Merçi encore Cordialement @+
sechanbask Posté(e) le 20 mai 2009 Posté(e) le 20 mai 2009 tu veux la marche à suivre pour faire ton code en utilisant le mien ? Si c'est le cas, il faut avant toute chose définir les besoins : quelle est la ou les versions d'autocad ? si plusieurs faire un teste sur les versions (si tu as une 2007, je ne peux pas insérer de blocs)est-ce les utilisateurs travaillent dans les SCU ou toujours dans le SCG ?pour un même diamètre de tube ou de gaine, la taille du calorifuge est-elle toujours la même ? si non, il faut demander à l'utilisateur de la saisir ou lui demander de choisi dans un tableau...saisi dynamiques des points ? oui mais dans quel ordre ? je vois ça comme ça point 1 = debut du calo sur axe, point 2 = fin du calo sur l'axe, point 3 = bord de la gaine. avec VBA beaucoup de chose sont possibles et la prise de tête en fait parti si on ne définit pas le sens des choses. Défini tes envies en commençant par tes besoins les plus primaires. P.S. tu as testé mon code, tu as compris ou pas, tu arrives à le faire fonctionner ? Si tu veux de l'aide vu le peut de temps que j'ai en ce moment, faut pas hésiter, et être réactif. On est sur internet, la timidité n'existe pas pas. Alors soit ça bouge, ça c'est mort. Car j'ai de l'huile sur le feu avec le nettoyeur, avec la charte graphique de mon BE, et en plus je suis en train de monter une association (voir ma signature)...Si tu veux t'investir dans le calorifuge, et m'y faire participer, faut que ça bouge !! si oui contacte moi par MP je te filerai mon adresse persos pour que nos échange soient plus vifs. ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
Chris24 Posté(e) le 29 mai 2009 Auteur Posté(e) le 29 mai 2009 Bonjour à toutes et à tous. Salut sechanbask. Il semble que tu soit une personne trés occupé, je vais dons essayer d'être bref et réctif et de ne pas tros te faire perdre ton temps. Ma version d'AutoCAD est la 2004, la marche à suivre que je souhaité conserne ton code, je n'arrive pas à le faire fonctionner. J'ai plusieurs messages d'erreurs:Erreur de compilation: Sub ou Function non défini. Ces erreurs concernent "calque_units"; "Insertion_coude90_montant" et "ArcCos", je les aient donc définie avec Dim... As ..., ensuite quand j'ai sur ma ligne de Commande d'AutoCADCommande: sngDiametre du pvc en mm :Commande: point de départ :Commande: Extrémité :J'ai se message d'erreur: Erreur d'execution '-2145386476 (80200014)': clé introuvable.j'ai donc cliqué sur débogage, je tombe sur:.Layer = actlayer & "-A".Je ne suis pas du tous doué en VBA. Consernant ma commande pour le calorifuge, je souhaite que l'utilisateur est 3 options: mettre un 1er point sur la gaine, mettre un 2ème point sur la gaine et le choix de saisir l'épaisseur du calorifuge.Je voudrait qu'il estCommande:1er Point:Commande: 2ème point:Commande: Epaisseur du Calorifuge: Comme illustré sur les captures d'écran que j'ai posté. Si tu connait le Logiciel Autogaine, il existe une commade de se type. En espérant avoir été clair. et merçi de ta disponibilité. Cordialement. PS: Concernant le nettoyeur, j'ai fait quelques essais, je trouve se code intéressant. Par contre le dernier lien "http://cjoint/?bmxWsT3U38" ne fonctionne pas.
Raph_38 Posté(e) le 29 mai 2009 Posté(e) le 29 mai 2009 Je vais surement dire une ânerie mais de mémoire (ça fais quelques années), ce que demande Chris24 (dans la réponse n°3) est exactement ce que réalise Fisacad. Dans FISACAD, tu choisissais, le type de conduit (gaine carrée ou circulaire), l'épaisseur du calo ensuite tu cliquais les 2 extrémités opposée du tube ou de la gaine et le logiciel coupais le conduit en réalisant le calo tels que réalisé dans les images de la réponse n°3. C'est donc faisable mais comment, je suis absolument pas calé pour cela ??? Raph. Celui qui pose une question est bête 5 minutes, celui qui n'en pose pas l'est toute sa vie !
sechanbask Posté(e) le 1 juin 2009 Posté(e) le 1 juin 2009 je connais un peu AUTOGAINE, beaucoup trop FISACAD (plein de bugs) je vois ce que tu veux dire, mais il faut forcément que tu indiques l'épaisseur du calo + la dimension du conduit sinon je ne sais pas faire le "décalage" donc il faut soit demande à l'utilisateur de donnée la dimension de son tuyau soit lui demander de pointer un 3ième point entre le bord du tube... ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
micheld Posté(e) le 3 juin 2009 Posté(e) le 3 juin 2009 Bonjour à tous,Dans la demande chris24, je pense qu'il souhaite ajouter du calorifuge à un tuyau existant. Dans cette hypothèse, est-ce que tu n'obtiens pas la valeur du diamètre par la différence entre les valeurs selon l'axe des y des points 1 et 2? C'est ce qui est possible dans Autofluid. En effet, AutoFluid demande les deux points sur la diagonale, d'un tube ou d'une gaine déjà représenté; il oriente alors le scu pour obetnir celui-ci toujours sur l'axe, et selon la direction de celui-ci. La différence entre la valeur y des des deux points est alors récupérable, dans le nouveau scu. Le diamètre est alors connu, idem pour la largeur d'une gaine rectangulaire. J'ai cru comprendre que la manipulation de coordonnées sous un nouveau scu est facile en lisp, mais je sèche un peu sur le sujet en VBA. Hé!Hé! Moi aussi j'essaye de faire ma propre version d'AutoFluid. Chapeau au développeur Laurent M. Au sujet des coûts des applications, sans polémique aucune, je pense qu'il s'agit de la politique commerciale des éditeurs, plus que l'appétit des développeurs. Regardons le temps que nous passons à développer nos routines. Quand on veut en vivre, à plein temps, cela se chiffre vite. Bon courage à tous Michel D.
micheld Posté(e) le 3 juin 2009 Posté(e) le 3 juin 2009 Sechanbask,Peux-tu me préciser la valeur de la variable "coef" de ton code, je ne la trouve pas. A quoi sert-elle?Merci par avance pour ta réponse. Michel D.
sechanbask Posté(e) le 3 juin 2009 Posté(e) le 3 juin 2009 salut, Le code est vraiment sale... depuis que j'ai comencé ce code, j'ai compris beaucoup de chose (et vaut mieux vous aller me dire) le code doit être scindé en mini procédure pour limiter les problème de maintenance. MaDXP > coef est une variable qui me sert pour mettre à l'échelle le réseau en fonction des unités de plan. comme ça l'utilisateur donne toujours au logiciel des dimension en mm... Si j'ai un pu de temps entre mon apprentissage de GNU/Linux et les grosses modifications de mon nettoyeur, je reviendrai dessus pour faire le ménage... ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
Chris24 Posté(e) le 4 juin 2009 Auteur Posté(e) le 4 juin 2009 Bonjour à toutes et à tous Merçi MaDXP pour les explications données pour sechanbask, je ne pense pas que j'aurais été plus clair sans connaitre les routines AutoLISP. Prend ton temps sechanbask, je ne suis pas pressé. Merçi encore @+
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant