| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Probleme beim Errechnen einer Koordinate unter VBA (1187 mal gelesen)
|
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 11. Dez. 2003 17:09 <-- editieren / zitieren --> Unities abgeben:
Ich kenne mich mit Excel-VBA und Excel-Formeln sehr gut aus. AutoCAD VBA mache ich noch nicht so lange. Ich stehe vor dem Problem, dass ich über ein VBA-Makro eine Linie zeichnen will. Die Linie hat einen Start-Koordinatenpunkt der über einen Winkel (fix) und einen Kreisdurchmesser (variabel) bestimmt wird und diesen Koordinatenpunkt bekomme ich nicht errechnet (in VBA!). Es liegt aber nicht an fehlenden mathematischem Wissen (denn ich habe die Koordinate bereits auf dem Papier und in einer Excel-Formel auf die Kommastelle genau errechnet) sondern an der VBA-Sprache im AutoCAD 2002. Ich weiß nicht wie die Befehlszeilen heißen müssen. Naja, im Grunde weiß ich das schon (BOGENMASS = RADIANS), aber ich bekomme verschiedene Fehlermeldungen die sagen, dass z.B. RADIANS oder ARCTAN etc. unbekannte Namen seien (ich habe nämlich nach der Meldung, dass RADIANS unbekannt wäre, verschiedene andere Wege versucht - bin bei allen gescheitert). Kann mir jemand sagen wie die Befehlszeilen heißen die ich brauche um wenigstens eine der weißen Linien in der Zeichnung zu zeichnen? Ich gebe hier mal meinen Tipp ab: Code:
1.) WinkelDachrand = funPI * (RADIUS + 45) * 2 / 360 * 10 2.) Set LINIE = AddLineEx(Point3D(Sin(WinkelDachrand * (RADIUS + 45)), 0), Point3D(Sin(WinkelDachrand * (RADIUS + 45)), 200))
Wie gesagt: Auf dem Papier kommt das richtige Ergebnis raus. funPI = erzeugt mir den Wert 3,1415926... (hab ich hier aus dem Forum ) RADIUS = Wert der vom Benutzer weiter vorne eingegeben wird (i.d.R. 1000 oder 2000 etc) Wenn ich beim Makro kurz zwischenstoppe, dann sehe ich tatsächlich den Wert 182,38... in der Variablen "WinkelDachrand". Denn 182,38... ist das BOGENMASS welches ja für SINUS in der zweiten Zeile gebaraucht wird (hier darf ich ja nicht den Winkel 10 angeben sondern die Strecke!) zu 1.) Dies ist einfachste Mathematik: PI * D und dann / 360 * 10 -> Ergebnis: BOGENMASS zu 2.) auch hier: im Grunde ganz einfach -> Pythagoras. Trotzdem verzweifle ich da die Linie die bei mir gezeichnet wird immer ganz dich im Zentrum ist und nicht auf 181,... Was mache ich falsch?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 11. Dez. 2003 17:16 <-- editieren / zitieren --> Unities abgeben:
Vielleicht noch eine kurze Ergänzung: Die Idee war, über eine Do Loop / While Funktion und einem ZÄHLER, den Schritt mit dem Zeichnen der weißen Linie 8 mal zu wiederholen und jedesmal den Winkel in der Pythagoras-Formel (die ja nicht funktioniert) um 10° zu erhöhen. Deshalb reicht es im Prinzip, wenn die erste Linie funktioniert, denn dann gehen auch die anderen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 12. Dez. 2003 08:05 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Hallo VIP, versteh zwar nicht so recht, was Du da vor hast, aber warum versuchst Du das nicht zeichnerisch zu lösen? Leg doch einfach den Mittelpunkt des Kreises in 0,0 und ermittle dir deine Linien, welche vom Kreis ausgehend in 0,0 und auf dem Layer 3 liegen. Code:
Function start()Dim Object As AcadEntity Dim ACLine As AcadLine Dim startPoint As Variant For Each Object In ThisDrawing.ModelSpace If Object.ObjectName = "AcDbLine" And Object.Layer = 3 Then Set ACLine = Object startPoint = ACLine.startPoint If InStr(startPoint(1), "E") <> 0 Then Debug.Print Object.ObjectName End If End If Next Object
End Function
Von diesen bestimmst Du dir jetzt noch den Endpunkt. Nun schreibst Du dir eine Funktion Geradenschnitt, legst vom Endpunkt einen erdachten Punkt aus 10 Einheiten nach unten und rechnest dir die Schnittpunkte mit den beiden Linien aus und hast dann den Anfangs- und Endpunkt deiner weißen Linie. Noch zeichnen und fertig. Oder hab ich da jetzt etwas übersehen? Gruß TP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 12. Dez. 2003 08:56 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
meine vermutung ! mit VBA arbeite ich nicht so oft. kenn aber das problem aus lisp zwischen bogenmass und DezimalGraden die Lispbefehle z.B.: POLAR arbeiten mit bogenmass "Wenn ich beim Makro kurz zwischenstoppe, dann sehe ich tatsächlich den Wert 182,38... in der Variablen "WinkelDachrand". also das sind eindeutig dezimalgrade, mit dem arbeitest du dann mit SIN weiter, SIN verlangt aber Bogenmass WIbogen = WIgrad * PI / 180 WIgrad = WIbogen * 180 / PI
------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 12. Dez. 2003 09:05 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
ich versteh die zeile schon nicht Dies ist einfachste Mathematik: PI * D und dann / 360 * 10 -> Ergebnis: BOGENMASS D * PI = Umfang eines Kreises mit Durchmesser D /360 ergibt die sehnenlänge des kreises mit sehnenwinkel = 1° * 10 ????? das ergebnis liegt irgenwo bei 182.xxx was ist das für ein Wert auf jedenfall kein winkel im bogenmass (die sind 0° = 0 , 90° = PI/2 , 180° = PI ,270° = 3*pi/2 , 360° 2*PI) ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 12. Dez. 2003 09:16 <-- editieren / zitieren --> Unities abgeben:
Doch, zeichnerisch stimmt dies auch: Die "Abwicklung/Strecke am Kreis" im Bereich von 10° sind 182.xx mm Ich will ja nicht die Strecke von 1° sondern von 10° -> deshalb hab ich nochmal mit 10 multipliziert. Und die "Abwicklung/Strecke am Kreis" brauche ich um sie unter VBA mit SIN/COS oder TAN verarbeiten zu können. [Diese Nachricht wurde von The VIP am 12. Dez. 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 12. Dez. 2003 09:21 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
jetzt habe ich erst deine zeichnung gesehen probier mal folgendes funpi = 3.141593 ' zum testen Radius = 1000 For i = 0 To 90 Step 10 wert = Sin(i * funpi / 180) * (Radius + 45) ' warum eigentlich raius +45 ?? na egal Next jetzt kommt nacheinander die werte
0 181,46 357,41 522,50 671,71 800,51 904,99 981,97 1029,12 1044,99 raus, das ins laut deiner zeichnung die gesucheten werte die dann in der zeichnung richtig zu positionieren ist dann deine sache ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 12. Dez. 2003 09:44 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Zitat: Original erstellt von The VIP: Doch, zeichnerisch stimmt dies auch: Die "Abwicklung/Strecke am Kreis" im Bereich von 10° sind 182.xx mm Ich will ja nicht die Strecke von 1° sondern von 10° -> deshalb hab ich nochmal mit 10 multipliziert.Und die "Abwicklung/Strecke am Kreis" brauche ich um sie unter VBA mit SIN/COS oder TAN verarbeiten zu können. [Diese Nachricht wurde von The VIP am 12. Dez. 2003 editiert.]
ja schon , aber was willst denn mit der abwicklung von den 10° um mit SIN,COS,TAN weiterzurechnen die funktionen SIN,COS verlangen winkel im bogenmass, blöde bezeichnung in der hilfe, eigentlich Winkel in radianten deine gesuchte strecke rechnet sich D * SIN(10°) wobei die 10° mit * PI/180 in radianten umgerechnet werden muss ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 12. Dez. 2003 09:49 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 12. Dez. 2003 15:30 <-- editieren / zitieren --> Unities abgeben:
Vielleicht habe ich mich etwas falsch ausgedrückt. Ich verwende natürlich SIN / COS und TAN + Pythagoras. Da alles mit einem rechtwinkeligen Dreieck zu tun hat, habe ich das in einen Topf geworfen... 1000 + 45 weil 45 eine Konstante bei unseren zu zeichnenden Produkten ist... Dein Beispiel funktioniert. Danke. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |