| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Länge einer Linie mit Variablen (1720 / mal gelesen)
|
Silentwolf Mitglied Selbständig
Beiträge: 4 Registriert: 20.06.2018
|
erstellt am: 20. Jun. 2018 09:34 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin neu hier und interessiere mich für Autocad VBA.. Einige Beiträge habe ich schon angesehen aber leider noch nicht das passende gefunden. Zu meiner Frage.. Ich habe Code gefunden um Linien auszuwählen und mittels msgbox werden mir diese Längen angezeigt.. diesen Code habe ich im Netz gefunden und läuft super. Nun möchte ich diese Längen in variablen speichern und dann andere Linien mit diesen Längen "lengthen" also Total Länge bearbeiten. Es geht hier um eine Abwicklung die ich selbst programmieren möchte. Kann mir bitte hier jemand ein bissl Unterstützung geben wie ich am besten anfange? Vielen Danke Silentwolf
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 20. Jun. 2018 11:43 <-- editieren / zitieren --> Unities abgeben: Nur für Silentwolf
Hallo Silentwolf, so grundsätzliche Dinge über ein Forum zu diskutieren wird schwierig. Man benötigt ja eine minimale Basis für den Austausch - die Begriffe sollten klar sein sonst werden dir die Antworten auch nicht helfen. Ich entwickle meine Software immer erst auf dem Papier. Du solltest dir also einen grundsätzlichen Ablauf deines Programms überlegen, welche Objekte brauchst du, was müssen die Objekte für Eigenschaften haben, was müssen die Objekte können? Welche Prozesse/Teilprozesse gibt es, welche Objekte sind daran beteiligt ... . Wenn das klar ist, dann kannst du mit dem Code beginnen. (1) Objekte/Klassen definieren, Eigenschaften und Methoden implementieren. (2) Prozesse im Code umsetzen. Wie weit bist du allein gekommen? An welcher Stelle hakt es? Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Silentwolf Mitglied Selbständig
Beiträge: 4 Registriert: 20.06.2018
|
erstellt am: 20. Jun. 2018 15:32 <-- editieren / zitieren --> Unities abgeben:
Hallo Brischke, danke erstmal für Deine Antwort! Ja ich kann Dich schon verstehen aber da ich ziehmlich neu mit Autocad VBA bin ist es schwierig die richtigen Methoden und Begriffe zu definieren.
Code: Sub GetLengths() Dim SOS As AcadSelectionSet Dim objSS As AcadSelectionSet Dim intCode(0) As Integer Dim varData(0) As Variant Dim objEnt As AcadEntity Dim entLine As AcadLine Dim entPoly As AcadPolyline Dim entLWPoly As AcadLWPolyline For Each SOS In ThisDrawing.SelectionSets If SOS.Name = "MySS" Then ThisDrawing.SelectionSets("MySS").Delete Exit For End If Next intCode(0) = 0: varData(0) = "LINE,POLYLINE,LWPOLYLINE" ThisDrawing.SelectionSets.Add ("MySS") Set objSS = ThisDrawing.SelectionSets("MySS") objSS.SelectOnScreen intCode, varData If objSS.Count < 1 Then MsgBox "No lines and polylines selected!" Exit Sub End If For Each objEnt In objSS Select Case objEnt.ObjectName Case "AcDbLine" Set entLine = objEnt MsgBox "Line is " & entLine.Length & " units long." Case "AcDb2dPolyline" Set entPoly = objEnt MsgBox "Polyline is " & entPoly.Length & " units long." Case "AcDbPolyline" Set entLWPoly = objEnt MsgBox "LightWeight Polyline is " & entLWPoly.Length & " units long." End Select NextEnd Sub
Diesen Code habe ich im Netz gefunden.. Nun möchte ich die einzelnen Längen in Variablen speichern denke da ein Array.. es sind in meinen Fall 7 verschiedene Längen.. Zudem habe ich einen Grid als Block erstellt dieser wird explodiert und soll dann die ersten 7 vorhandenen Linien mit den in den Array gespeicherten Längen ändern. Wahrscheinlich gibt es eine bessere Lösung aber dachte das könnte mal ein Ansatz sein. Leider fehlt mir noch das Verständis was alles in Autocad VBA möglich ist.. deshalb wäre ein Ansatz eine Hilfe .. oder welche Methoden ich mir ansehen könnte in der Online Hilfe... Vielen Dank.. Hoffe das ist ein bissl besser jetzt??
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 20. Jun. 2018 17:54 <-- editieren / zitieren --> Unities abgeben: Nur für Silentwolf
(1) Was ist deine eigentliche Aufgabenstellung? (2) Welche Erfahrung hast du beim Zeichnen mit AutoCAD? (3) Wie würdest du diese Teilaufgabe in AutoCAD manuell lösen? (4) Welche Erfahrung hast du in VBA? Grüße! Holger
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Silentwolf Mitglied Selbständig
Beiträge: 4 Registriert: 20.06.2018
|
erstellt am: 20. Jun. 2018 18:24 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, danke nochmal für Deinen Input! 1.) Die eigentliche Aufgabenstellung ist eine Abwicklung eines schräggeschnittenen Rohres in VBA zu verwirklichen 2.) Ich kann mit Autocad ganz gut zeichnen also kenne das Programm schon lange und zeichne damit also manuel. 3.) Es werden Linien gemessen die in der Vorderansicht entstehen also die Wahren Längen.. diese werden dann auf einen Grid der geteilt ist z.B. 50mm durchmesser Rohr.. Umfang=157,0796 dieser Grid ist in 12 Teile geteilt und ist als Block definiert. Also eine waagrechte Linie --Länge 157,0796 diese Linie ist geteilt in 12 Teile bei jeden Punkt befinden sich Linien die 90Grad zu den Schnittpunkten befinden. Nun möchte ich nachdem ich die Wahrenlängen also die Linien auswähle diese zwischengespeichert werden und dann die erste Wahre Länge soll bei Punkt 1 die 90 Grad Linie mit diesen Wert verlängern oder verkürzen. Also Länge Total..1 Wahre Länge .. und soweiter eben alle 7 Wahren Längen.. die weiteren Linien sind nicht mehr relevant da diese einfach gespiegelt werden. So mache ich es wenn ich es manuel zeichne.. In VBA habe ich schon Erfahrung aber in Excel und Access leider nicht in Autocad...noch nicht deshalb weiß ich auch nicht genau was hier für Befehle nötig wären..
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 21. Jun. 2018 08:30 <-- editieren / zitieren --> Unities abgeben: Nur für Silentwolf
... ok, dann mal mein Ansatz zu deiner Aufgabenstellung. a) das Rohr existiert in 3d: a1) du explodierst den Zylinder, die explodierten Elemente enthalten auch Kreise und Ellipsen der Stirnseiten des Zylinders. (Explode) a2) einen Kreis oder eine Ellipse unterteilst du in XX Teile und ermittelst die kürzesten Abstände zu den gegenüberliegenden entlang des Vectors der Zylinderachse. (GetPointAtParam | GetClosestPointTo) a3) Damit hast du alle relevanten Punkte und Abstände, mit denen du die Abwicklung Zeichnen kannst. b) du hast eine 2D-SeitenAnsicht b1) du wählst die beiden Linien, die die Stirnseiten/Schnittfläche darstellen weiter mit a2) ... Ich würde an deiner Stelle nicht damit anfangen irgendwelche vorhandenen Grid's zu manipulieren .. Neuzeichnen ist da einfacher und sicherer. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Silentwolf Mitglied Selbständig
Beiträge: 4 Registriert: 20.06.2018
|
erstellt am: 22. Jun. 2018 10:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, danke ich werde es mir mal in Ruhe ansehen.. Bin leider im Moment viel unterwegs deshalb meine späte Antwort! Melde mich wieder wenn ich noch Fragen dazu habe! Schönen Tag Silentwolf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rexxitall Mitglied Dipl. -Ing. Bau
Beiträge: 270 Registriert: 07.06.2013 Various: systems, Operating systems, cad systems, cad versions, programming languages.
|
erstellt am: 02. Jul. 2018 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für Silentwolf
Ich würde das Ganze etwas anders angehen wollen. Linien auf dem Rohrzylindermantel zu berechnen ist relativ einfach. Schnittpunkte dieser Linien mit einer Ebene zu finden ebenfalls. Da hilft dir das Netz mit Vektorgeometrie. (Auch mal mit Suchwort VB6 googlen) Prinzipiell wird eine Autocad Linie durch ihre Punkte definiert. Um eine Linie zu "lengthen" musst du also "nur" diese Koordinatenpunkte verändern. Man kann Liniendurchstoßpunkte auch mit Autocad direkt ermitteln. z.B. 3D Linie mit einem 3D Face. Ist aber meines Erachtens weit aufwändiger als die paar Formeln aus dem Netz zu fischen. Autocad hat verschiedene Linien oder auch Polylinien. Um an diese Linienpunkte zu bekommen benötigst du je nach Linientyp leicht unterschiedliche Routinen. Normale Linien haben nen Start und nen Endpunkt und Polylinien gibt es in den Geschmacksrichtungen mit 2D Koordinaten und 3D Koordinaten. Ich habe mir seinerzeit 2 Routinen geschrieben die universell diese Punkte auslesen und setzen. (Egal was da vorliegt). Wenn du die Rohre in 3d Extrudierst kann auch der Bfehl _FLATSHOT ne Idee sein. Auch wenn der sich über VBA nicht automatisieren lässt. SOLDRAW lässt sich hingegen automatisieren, ist aber weit aufwändiger einzustellen. Vieleicht stellst du ja auchmal nen Screenshot zur verfügung, damit man besser erkennen kann, was due wirklich machen willst. Lieben Gruß aus Finnland ------------------ Wer es nicht versucht, hat schon verlorn Und bei 3 Typos gibts den vierten gratis ! <<< for sale ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |