Aller au contenu

rom1_am

Membres
  • Compteur de contenus

    101
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Tout ce qui a été posté par rom1_am

  1. rom1_am

    Style Garde corps

    Bonjour, Merci pour vos réponses. Par contre, vous ne semblez pas vraiment d'accord.... Mon but est de faire des plans de calepinage de garde-corps ainsi que des coupes en élévation, des nomenclatures et fiches de fabrication (débit et colisage): - Rungis, si tu as d'autres logiciels à me conseiller, je suis preneur (j'avais un peu regardé le logiciel cover3d qui me semblait bien) - Curcis, j'ai en effet un petit peu regardé ce qu'il est possible de faire avec AutoCAD Architecture, mais j'ai l'impression que si l'on veut obtenir un résultat précis et détaillé ce n'est pas gagné :question: Merci pour vos lumières.
  2. Bonjour, J'essaye de tester AutoCAD Architecture (2010) afin de tracer du garde-corps. - Pour l'instant, j'ai un peu de mal à paramétrer les styles de garde-corps. Vous semble-t-il possible de paramétrer de façon précise un garde-corps comme dans l'exemple ci-dessous? http://img156.imageshack.us/i/exemplegc.jpg/ http://img156.imageshack.us/img156/3413/exemplegc.jpg Faut-il créer des blocs personnalisés pour créer les montants avec leurs sabots ainsi que le remplissage tolé avec des lisses différentes en haut et en bas du remplissage? - Concernant la représentation en plan, est-il possible de créer automatiquement des modules qui prennent en compte des longueurs de barre différentes pour les mains courantes et pour les modules comprenant le remplissage? - Concernant la création de nomenclatures, est-il possible de paramétrer le style de garde-corps afin de générer directement les quantités nécessaires de visserie et d'accessoires (plat de serrage,... )? Cela fait beaucoup de questions mais je vous remercie par avance de tout élément de réponse qui pourrait me donner des pistes...
  3. Merci bien. Ca marche avec cette méthode. La ligne reste à la bonne échelle. ;) Il reste un problème par contre: - lorsque je copie-colle le bloc avec la commande copier d'AutoCAD, l'attribut indiquant l'angle donne la bonne valeur et se met à jour dès que j'étire le bloc. - lorsque je fais un ctrl-c ctrl-v du bloc, l'attribut n'indique plus la valeur car il perd l'objet ligne auquel il fait référence.
  4. Il faut télécharger le fichier sur un site type http://dl.free.fr/ ou http://cjoint.com/ et coller le lien qui sera généré dans ton post. Merci par avance
  5. Bonjour, Merci pour ta réponse. J'ai essayé de faire la manip mais j'ai du la faire incorrectement car j'ai toujours le problème. Est-ce que tu pourrais mettre ton bloc en pièce jointe? Merci beaucoup
  6. Merci bien Tramber. Par contre, je suis désolé mais je ne pense pas que je vais essayer de mettre en place cette méthode: je connais très mal le lisp, en particulier les réacteurs.... donc ça me paraît un peu trop compliqué pour moi et un peu trop compliqué pour le résultat à obtenir. (En plus - j'insiste au cas où quelqu'un d'AutoCAD lise ce post... - , je comprend toujours pas pourquoi il faut faire quelque chose d'aussi compliqué pour un besoin aussi simple.) J'avais également essayé une deuxième méthode si jamais ça inspire quelqu'un : utiliser un paramètre de coordonnées XY qui serait étiré par les différentes actions d'étirement puis récupérer la distance x dans l'attribut de bloc mais je n'ai pas réussi à paramètrer les choses comme il faut pour que la distance x corresponde vraiment à la longueur maxi du bloc.
  7. Ok Tramber. Merci. Moi aussi je doute que ce soit réalisable. Mais, je ne comprend vraiment pas pourquoi il n'est pas possible d'utiliser une syntaxe du type Diesel dans ces formules??? :casstet:
  8. Bonjour, J'ai un problème avec un bloc dynamique. Mon bloc est un rectangle avec des actions d'étirement aux extrémités. J'aimerais récupérer dans un attribut de bloc l'angle de l'extrémité du rectangle une fois étiré. J'ai donc mis un attribut de bloc qui reprend l'angle de la ligne représentant le côté du rectangle. Jusque là, il me semble qu'il n'y a rien d'extraordinaire. Losrque j'insère mon bloc dans un dessin, en lui affectant une échelle 1/100e, le bloc se comporte correctement. Ensuite, si je fais un copier-coller du bloc et que j'agis de nouveau sur les poignées d'étirement, lorsque je régénère le dessin, la ligne dont l'angle est repris dans l'attribut de bloc se trouve à l'échelle 1/10000e alors que le reste du bloc est à la bonne échelle. Voici le bloc en question: http://cjoint.com/?lfijSwyyCc et un exemple de fichier montrant le problème: http:// http://cjoint.com/?lfikS2WBCs Merci par avance si vous voyez d'où peut venir le problème car je bloque là-dessus en vain depuis un bon bout de temps.
  9. rom1_am

    Liste de boite...

    Je n'avais pas essayé, en effet, on ne peut pas appeler directement "Entity.Layer.Freeze", il faut remplacer l'instruction par : If ThisDrawing.Layers.Item(Entity.Layer).Freeze = False Then... Ca marche mieux comme ça.
  10. Désolé, en effet, Firefox n'aime pas cjoint. Par contre, ça marche bien avec chrome ou safari. Vous auriez un autre site de partage de fichier à me conseiller? Merci
  11. rom1_am

    Liste de boite...

    Bonjour Pour ne prendre en compte que les éléments sur les calques actifs, tu peux rajouter un test avant d'écrire tes valeurs dans le fichier: If Entity.Layer.Freeze=False Then... (Il est sûrement possible de rajouter également une condition au moment de la sélection mais je ne sais pas quelle est la syntaxe à utiliser) Pour avoir la valeur arrondie, tu peux utiliser la fonction Round(valeur, nombre de décimales): Round((MaxPt(0) - MinPt(0)),2) Pour trier tes dimensions, le mieux est de reporter toutes tes valeurs dans un tableau ou une collection, de le trier et ensuite d'écrire le contenu du fichier. a+
  12. Bonjour, Désolé si ce n'était pas clair. Mon problème est le suivant: J'ai un bloc dynamique en forme de trapèze avec des actions d'étirement afin de pouvoir ajuster chaque longueur. J'aimerais pouvoir récupérer dans un attribut de bloc la longueur maximale entre les 2 bases du trapèze. Ces longueurs pouvant être récupérées dans les paramètres de distance de chaque action d'étirement, je ne rencontre pas de problème pour récupérer une des 2 longueurs dans un attribut mais j'aimerais avoir un attribut qui afficherait la plus grande des 2 longueurs. Mon idée était donc d'utiliser une formule dans le champ de l'attribut de bloc mais je ne sais pas s'il est possible d'utiliser un opérateur du type "max(valeur1,valeur2)". Merci Ci-joint un exemple de bloc: http://cjoint.com/?lenJqBJIYi ou: http://dl.free.fr/qaY6PflJf [Edité le 4/11/2009 par rom1_am] [Edité le 4/11/2009 par rom1_am]
  13. Bonjour, Je ne trouve pas d'infos sur la syntaxe à utiliser dans les champs des attributs de bloc. :exclam: Je souhaiterais utiliser une formule pour avoir dans un de mes attributs de bloc la valeur maximum entre 2 paramètres de distance. (formule du type: max(distance_objet1 , distance_objet2) ) Savez-vous si cela est possible? Merci
  14. Bonjour, Je crois que là, il ne s'agit plus vraiment de bruits de couloirs... http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=12729484&linkID=9240618 Cependant, le vba et le vb.net semble présenter pas mal de similitudes. Si tu dois développer beaucoup de boites de dialogues, le vb.net peut être à envisager. Pour des routines relativement simples, le lisp sera sûrement plus facile à aborder et tu trouveras plus d'aide avec ce langage. Dans le forum, il y a beaucoup d'autres discussions relativement longues qui traitent du sujet. A+
  15. rom1_am

    Selection d\'objets proches

    Bonjour, Si tu veux récupérer un seul objet, il vaut mieux utiliser "GetEntity" à la place de "SelectOnScreen". "SelectOnScreen" te renvoie un jeu de sélection, si tu veux les coordonnées du 1er objet du jeu de sélection, l'instruction est : StartPoint = objSet.Item(0).StartPoint StartPoint est un tableau 3d et non une valeur, pour avoir X, il faut écrire: MsgBox ("X = " & StartPoint(0)) A+
  16. rom1_am

    Selection d\'objets proches

    Bonjour, Oui, il suffit d'utiliser line.startpoint et line.endpoint
  17. rom1_am

    Selection d\'objets proches

    Bonjour, L'exemple de l'aide sur la fonction Select montre le principe. Si tu utilises l'option acSelectionSetCrossing, les objets sélectionnés sont ceux qui sont à l'intérieur ou qui traverse la zone définie par les 2 points que tu mets en paramètres de la fonction Select. Sub Example_Select() ' This example adds members to a selection set, first by crossing and ' then by filtering for circles. ' Create the selection set Dim ssetObj As AcadSelectionSet Set ssetObj = ThisDrawing.SelectionSets.Add("SSET") ' Add all object to the selection set that lie within a crossing of (28,17,0) and ' (-3.3, -3.6,0) Dim mode As Integer Dim corner1(0 To 2) As Double Dim corner2(0 To 2) As Double mode = acSelectionSetCrossing corner1(0) = 28: corner1(1) = 17: corner1(2) = 0 corner2(0) = -3.3: corner2(1) = -3.6: corner2(2) = 0 ssetObj.Select mode, corner1, corner2 ' Add all the Circles to the selection set that lie within the crossing of (28,17,0) and ' (-3.3, -3.6,0) by filtering from the current drawing Dim gpCode(0) As Integer Dim dataValue(0) As Variant gpCode(0) = 0 dataValue(0) = "Circle" Dim groupCode As Variant, dataCode As Variant groupCode = gpCode dataCode = dataValue ssetObj.Select mode, corner1, corner2, groupCode, dataCode End Sub
  18. rom1_am

    Selection d\'objets proches

    Bonjour, Si tu définis les points de début et de fin de ta polyligne, tu dois pouvoir utiliser la méthode Select avec l'option acSelectionSetCrossing?
  19. Pareil avec Chrome et Safari. :(
  20. rom1_am

    Evenement en vb.net

    Bonjour, Pour récupérer une entrée clavier, tu peux également utiliser la fonction suivante: Public Function GetAsyncKeyState(ByVal vkey As Integer) As Short End Function J'ai essayé et ça marche de la même façon qu'en vba.
  21. Bonjour, Il me semble que ce n'est pas possible en passant par la commande "InsertBlock". Par contre, si tu connais à l'avance l'échelle d'insertion et la rotation du bloc, tu peux utiliser "SendCommand -Inserer" de la façon suivante: Sub test_bloc() Dim BlocObj As AcadBlockReference Dim pins As Variant 'FrmOutils.Hide 'pins = ThisDrawing.Utility.GetPoint(, "Veuillez choisir un point : ") ' 'Set BlocObj = ThisDrawing.ModelSpace.InsertBlock(pins, "OUTILS100", 1#, 1#, 1#, 0) ThisDrawing.SendCommand "-INSERER OUTILS100" & vbCr & "Echelle" & vbCr & Replace(CStr(1), ",", ".") & vbCr & "Rotation" & vbCr & "0" & vbCr 'Unload FrmOutils End Sub
  22. rom1_am

    Fichier illisible pdf

    Bonjour, J'ai essayé et le code ci-dessus fonctionne bien. Le problème est que le but était d'imprimer plusieurs onglets de plan et ensuite de les fusionner en un seul fichier pdf. C'est ce que fait le code ci-dessus, par contre, pour que la fonction soit fiable, il faut être sûr que PdfCreator n'ait pas d'autres impressions en file d'attente. Il me semble qu'il est possible de vérifier cela par programmation mais ça devenait un peu compliqué à programmer par rapport au besoin que l'on avait. a+
  23. rom1_am

    Fichier illisible pdf

    Bonjour, J'avais également essayé d'utiliser PDF Creator et PlotToFile ne marchait pas non plus avec ce logiciel. La méthode PlotToDevice marche bien. Si tu ne veux pas qu'il y ait de boite de dialogue qui apparaisse, il est possible de programmer PDF Creator. Il faut ajouter dans les références de ton projet dvb une référence à pdfcreator.exe. Il y a des exemples de code dans le répertoire d'installation "C:\Program Files\PDFCreator\COM". J'avais commencé à faire une fonction en vba pour imprimer plusieurs onglets de présentation dans un pdf mais j'avais abandonné parce que ça plantait assez souvent. Voici le code si ça peut t'aider (désolé, le code n'est pas très propre et je ne suis pas sûr qu'il marche car j'avais fait pas mal d'essais et de modifs. Si tu arrive à en faire quelque chose, ça m'intéresse... Merci) Function Example_SetLayoutsToPlot2() As Integer ' This example plots the layouts of a drawing. Dim oPlot As AcadPlot Dim AddedLayouts() As String Dim LayoutList As Variant Dim oLayout As AcadLayout Dim ArraySize As Integer, BatchCount As Integer Dim plotFileName As String plotFileName = "MyPlot" For Each oLayout In ThisDrawing.Layouts If Left(oLayout.Name, 4) = "Plan" Then ArraySize = ArraySize + 1 ReDim Preserve AddedLayouts(1 To ArraySize) AddedLayouts(ArraySize) = oLayout.Name End If Next LayoutList = AddedLayouts Set oPlot = ThisDrawing.Plot oPlot.SetLayoutsToPlot LayoutList oPlot.PlotToDevice "PDFCreator" ' oPlot.PlotToFile plotFileName, "DWG To PDF.pc3" Example_SetLayoutsToPlot2 = CInt(ArraySize) End Function Sub scriptpdf() Const maxTime = 30 ' in seconds Const sleepTime = 250 ' in milliseconds Dim PDFCreator, DefaultPrinter, ReadyState, fso, c, opath, AppTitle, ScriptBasename, WshShell ScriptBasename = ThisDrawing.FullName 'fso.GetBaseName(Wscript.ScriptFullname) AppTitle = "PDFCreator - " & ScriptBasename opath = ThisDrawing.Path ' CompletePath(fso.GetParentFolderName(Wscript.ScriptFullname)) Set PDFCreator = CreateObject("PDFCreator.clsPDFCreator") PDFCreator.cStart "/NoProcessingAtStartup" PDFCreator.cVisible = True PDFCreator.cWindowState = 1 With PDFCreator .cPrinterStop = True 'APPEL DE LA PROCEDURE D'IMPRESSION DES ONGLETS c = Example_SetLayoutsToPlot2 Do While (.cCountOfPrintjobs < c) c = c + 1 DoEvents Loop 'FUSION DES DOCUMENTS .cCombineAll c = 0 Do While (.cCountOfPrintjobs <> 1) And (c < (maxTime * 1000 / sleepTime)) c = c + 1 DoEvents Loop 'IMPRESSION: .cOption("UseAutosave") = 1 .cOption("UseAutosaveDirectory") = 1 .cOption("AutosaveFormat") = 0 .cDefaultprinter = "PDFCreator" .cOption("AutosaveDirectory") = opath .cOption("AutosaveFilename") = opath .cPrinterStop = False .cPrintfile (.cPrintjobInfo(CStr(.cPrintjobFilename(1)), "SPOOLFILENAME")) c = 0 ReadyState = 0 ' Do While (.cCountOfPrintjobs <> 0) 'andc < (maxTime * 1000 / sleepTime)) ' c = c + 1 ' DoEvents ' 'Wscript.Sleep sleepTime ' Loop ' .cClose End With End Sub
  24. Salut, "Getpoint" renvoie un point mais tu peux utiliser d'autres méthodes pour demander des infos à l'utilisateur (Getreal, Getinput...) Si tu veux demander les coordonnées pour définir ton point d'insertion, tu peux utiliser par exemple Getreal: Dim returnRealX As Double Dim returnRealY As Double ' Return the value entered by user. A prompt is provided. returnRealX = ThisDrawing.Utility.GetReal("X=: ") returnRealY = ThisDrawing.Utility.GetReal("Y=: ") Dim insertionPnt(0 To 2) As Double insertionPnt(0) = returnRealX: insertionPnt(1) = returnRealY: insertionPnt(2) = 0
  25. Bonjour, Si tu veux que l'utilisateur clique un point, tu peux utiliser la méthode "Getpoint". Sub inser_bloc() ' Insert the block Dim blockRefObj As AcadBlockReference Dim returnPnt As Variant ' Return a point using a prompt returnPnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ") Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(returnPnt, "monbloc", 1#, 1#, 1#, 0) End Sub
×
×
  • 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é