| |  | 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 - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Masse mit Vb erkenne und verarbeiten (1609 mal gelesen)
|
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 16. Feb. 2006 03:54 <-- editieren / zitieren --> Unities abgeben:         
Hallo, diesmal hab ich eine echt knifflige Aufgabe. Ich moechte (anfangs, das Problem ist weit komplexer) Masse aus eine zeichnung (z.B. einen Quader 10, 20 , 30mm Seitenlaenge) mit VB erkennen und danach mit Hilfe der Dichte das Gewicht berechnen. Dazu muss ich wissen, wie bzw. ob es moeglich ist, einzelne Laengenmasse oder Flaechen (denke Flaechen gehen nicht) mit VB zu erkennen. Kurze Beschreibung des gesammten Problems. Ich moechte einen Pumpenimpeller einer Kreiselpumpe, von dem die Zeichnung vorhanden sowie die Dichte des Materials bekannt ist, das Gewicht berechnen. Echt schwer. Mal sehen wer von den *****s eine Idee hat. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 17. Feb. 2006 06:53 <-- editieren / zitieren --> Unities abgeben:         
Keine Antworten, na gut. Vielleicht kann mir dabei jemand helfen. Ist es moeglich, ueber ein Selectionset vier linien, die sich zu einer Flaeche schliessen ueber den Bildschirm auszuwaehlen, danach eine Linie, die die Hoehe des Bauteils beschreibt ueber den Bildschirm auszuwaehlen und somit das Volumen zu ermitteln. Hab es mal ganz einfach ueber eine Raute probiert, jedoch kann ich Vb nicht beibringen die Flaeche zu berechnen. Vielleicht kann mir hierbei jemand helfen. Gruss vom verzweifelten, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
    
 Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, Monitore, ..., einige AutoCADs 200x & SWX 2kX
|
erstellt am: 17. Feb. 2006 10:37 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Mir ist nur das so spontan eingefallen, ansonsten habe ich mal etwas schon für Regionen in VB gecodet ... einfach melden wenn es doch schon bei Solids helfen sollte als Einstieg http://ww3.cad.de/foren/ubb/Forum54/HTML/010293.shtml#000002 Code:
[...]TreeView1.Nodes.Clear Set xNode = TreeView1.Nodes.Add(, , , "Optik und EDV-Infos:") TreeView1.Nodes.Add xNode, tvwChild, , "Layer: " & ActRegion.Layer TreeView1.Nodes.Add xNode, tvwChild, , "Farbe: " & ActRegion.Color TreeView1.Nodes.Add xNode, tvwChild, , "Linientyp: " & ActRegion.Linetype TreeView1.Nodes.Add xNode, tvwChild, , "Linienskal.: " & ActRegion.LinetypeScale TreeView1.Nodes.Add xNode, tvwChild, , "Linienstärke: " & ActRegion.Lineweight TreeView1.Nodes.Add xNode, tvwChild, , "Plotstillname: " & ActRegion.PlotStyleName TreeView1.Nodes.Add xNode, tvwChild, , "Name: " & ActRegion.ObjectName TreeView1.Nodes.Add xNode, tvwChild, , "Objekt ID: " & ActRegion.ObjectID TreeView1.Nodes.Add xNode, tvwChild, , "Owner ID: " & ActRegion.OwnerID TreeView1.Nodes.Add xNode, tvwChild, , "Handle: " & ActRegion.Handle TreeView1.Nodes.Add xNode, tvwChild, , "Dictionary: " & ActRegion.HasExtensionDictionary TreeView1.Nodes.Add xNode, tvwChild, , "Sichtbar: " & ActRegion.Visible Set xNode = TreeView1.Nodes.Add(, , , "Flächeninhalt:") TreeView1.Nodes.Add xNode, tvwChild, , ThisDrawing.Utility.RealToString(ActRegion.Area, acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) Set xNode = TreeView1.Nodes.Add(, , , "Umgfang:") TreeView1.Nodes.Add xNode, tvwChild, , ThisDrawing.Utility.RealToString(ActRegion.Perimeter, acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) Set xNode = TreeView1.Nodes.Add(, , , "Momente:") mnt = ActRegion.MomentOfInertia Set yNode = TreeView1.Nodes.Add(xNode, tvwChild, , "Trägheitsmoment:") TreeView1.Nodes.Add yNode, tvwChild, , ThisDrawing.Utility.RealToString(mnt(0), acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) TreeView1.Nodes.Add yNode, tvwChild, , ThisDrawing.Utility.RealToString(mnt(1), acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) mnt = ActRegion.PrincipalMoments Set yNode = TreeView1.Nodes.Add(xNode, tvwChild, , "Hauptträgheitsmoment:") TreeView1.Nodes.Add yNode, tvwChild, , ThisDrawing.Utility.RealToString(mnt(0), acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) TreeView1.Nodes.Add yNode, tvwChild, , ThisDrawing.Utility.RealToString(mnt(1), acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) Set yNode = TreeView1.Nodes.Add(xNode, tvwChild, , "Deviationsmoment:") TreeView1.Nodes.Add yNode, tvwChild, , ThisDrawing.Utility.RealToString(ActRegion.ProductOfInertia, acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) Set xNode = TreeView1.Nodes.Add(, , , "Hauptrichtungen:") Vektor = ActRegion.PrincipalDirections Set yNode = TreeView1.Nodes.Add(xNode, tvwChild, , "X-Vektor:") TreeView1.Nodes.Add yNode, tvwChild, , ThisDrawing.Utility.RealToString(Vektor(0), acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) TreeView1.Nodes.Add yNode, tvwChild, , ThisDrawing.Utility.RealToString(Vektor(1), acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) Set yNode = TreeView1.Nodes.Add(xNode, tvwChild, , "Y-Vektor:") TreeView1.Nodes.Add yNode, tvwChild, , ThisDrawing.Utility.RealToString(Vektor(2), acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) TreeView1.Nodes.Add yNode, tvwChild, , ThisDrawing.Utility.RealToString(Vektor(3), acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) mnt = ActRegion.RadiiOfGyration Set xNode = TreeView1.Nodes.Add(, , , "Trägheitsradius:") TreeView1.Nodes.Add xNode, tvwChild, , ThisDrawing.Utility.RealToString(mnt(0), acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) TreeView1.Nodes.Add xNode, tvwChild, , ThisDrawing.Utility.RealToString(mnt(1), acDefaultUnits, ThisDrawing.GetVariable("LUPREC")) [...]
------------------ MfG Proxy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 17. Feb. 2006 11:42 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Hallo Florian, eine Flächenberechnung aus beliebigen Punkten kannst du mit der Gauss'chen Flächenformel machen. Dein Problem wird aber sein zu den Punkten zu kommen. Es fehlt die Info welche Elemente du in der Zeichnung hast. Ist die 2D oder 3D sind das "irgendwelche" Linien oder oder ... Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 20. Feb. 2006 01:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo, es ist eine 2D Zeichnung. Es sind auch irgend welche Linien, da die Zeichnungen immer Variieren. Hab mir das so gedacht: Man klickt eine Linie anund das Programm merkt sich die zwei Punkte. Das macht man mit vier linien. Danach wird vom Programm ueberprueft, ob die Flaeche geschlossen ist und die Flaeche berechnet. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 20. Feb. 2006 11:54 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Hallo Florian, mit GetEntity kannst du die Linien aus dem AutoCAD abgreifen. Bei den Elemente prüfst du jeweils die Richtung (ist der Anfangspunkt oder der Endpunkt der nächsten Linie gleich dem Endpunkt der vorherigen). Die Koordinatzen sammelst du in einer Punkteliste. Mit der Flächenformel berechnest du die Fläche. Alternativ könnest du mit dem Acad Befehl GPOLY aus deinen Konturen eine Fläche als geschlossenes Polygon bilden lassen. DIe Fläche ist dann schon als Eigenschaft der Polylinie vorhanden. Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 21. Feb. 2006 05:36 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli, danke erst mal fuer deine bisherige Hilfe. So, ich habe jetzt mal einen Code zusammengebastellt. Dieser funktioniert aber nur, solange die Linien die gleiche Orientierung haben (Uhrzeigersinn oder entgegen, d.h start punkt 1 - end punkt 1, endpunkt 1 =start punkt 2). Sobald eine Linie die Falsche Orientierung hat, stimmt die Flaeche nicht mehr (ist ja auch verstaendlich). z.B. start punkt1- endpunkt1, endpunkt1=endpunkt2. Wie kann ich das Programmieren, dass er mir die Flaeche richtig berechnet, also Start und Endpunkt der falsch orientierten Linie dreht? Oder denke ich vielleicht einfach zu kompliziert und es giebt eine viel einfachere Loesung? Code: ThisDrawing.Utility.GetEntity objEnt, varPick, vbCr + "click" startP(0) = objEnt.startPoint(0) startP(1) = objEnt.startPoint(1) ThisDrawing.Utility.GetEntity objEnt, varPick, vbCr + "click" startP1(0) = objEnt.startPoint(0) startP1(1) = objEnt.startPoint(1) ThisDrawing.Utility.GetEntity objEnt, varPick, vbCr + "click" startP2(0) = objEnt.startPoint(0) startP2(1) = objEnt.startPoint(1) ThisDrawing.Utility.GetEntity objEnt, varPick, vbCr + "click" startP3(0) = objEnt.startPoint(0) startP3(1) = objEnt.startPoint(1) f = 0.5 * (startP(0) * (startP1(1) - startP3(1)) + startP1(0) * (startP2(1) - startP(1)) + startP2(0) * (startP3(1) - startP1(1)) + startP3(0) * (startP(1) - startP2(1))) If f < 0 Then ff = -f Else ff = f End If
Hier komme ich nicht mehr weiter. Ich weis aber, dass das in den Zeichnungen Vielleicht weist du ja eine Loesung. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 21. Feb. 2006 06:53 <-- editieren / zitieren --> Unities abgeben:         
Hallo, jetzt habe ich nochmal eine Frage. Ist es vielleicht moeglich, in einem Schnitt der 2D Zeichnung gewisse Teile der Zeichnung so zu makieren, dass AutoCAD dies als Flaechen erkennt. Dann koennte ich doch mit Vb diese Flaechen ansprechen. Mein Bauteil ist ein Rotationskoerper. Somit koennte ich doch das Volumen berechnen. Ist das irgendwie moeglich? Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 21. Feb. 2006 08:23 <-- editieren / zitieren --> Unities abgeben:         
Hallo, hab mal rumprobiert und was gefunden. Ich werde die 2D Zeichnung vorher manuel bearbeiten und alle zu berechnenden Flaechen mit Schraffuren belegen. Somit kann ich mit VB und dem "HATCH" Befehl auf alle Schraffuren zugreifen. Ich weis auch (hab ich hier im Forum gelesen) das der HATCh Befehl eine Area funktion hat. Blos wie lautet die genau. Ich hab es wie folgt probiert. F= hatch.area funktioniert aber nicht. Wie muss ich F bzw. HATCh definieren, um die Area Funktion nutzen zu koennen? Ich hoffe, hier kann mir jemand helfen. Ich steh mal wieder total auf dem Schlauch. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 22. Feb. 2006 00:17 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
|
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 22. Feb. 2006 09:24 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli, danke erst mal fuer Deine Hilfe. Bisher hat soweit alles funktioniert. Ich kann nun mit Hilfe eines HATCH, die Flaeche bestimmen. ISt es moeglich diesen HATCH um eine bestimmte Achse rotieren zu lassen (virtuel in VB), so dass mir VB das Volumen berechnen kann. Die Gestalt des HATCH ist sehr "verzwickt", so das ich nicht ueber einen mittleren Radius rechnen kann. Ich wuerde halt VB gerne sagen, dass es die schon errechnete Flaeche, "virtuel" um eine Achse rotieren soll und so das Volumen berechnen soll. Ist das moeglich? Bitte um Hilfe (Ein lauter Hilfeschrei, weis einfach nicht weiter). Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 23. Feb. 2006 08:15 <-- editieren / zitieren --> Unities abgeben:         
Hallo Alle zusammen, ich hab mir jetzt mal einen Code gebastellt, der mir einen HATCH erkennt und diesen um die Symetrieachse rotiert. Somit muesste ich ja mein Volumen schon haben. Ich weis blos nicht, wie ich das erzeugte Volumen abrufen und weiterverarbeiten kann. Kann mir da jemand helfen? Ich moechte das Volumen benutzen, um die Masse zu berechnen. ThisDrawing.Utility.GetEntity objEnt, varPick, vbCr On Error Resume Next ThisDrawing.SelectionSets("HATCH").Delete Set a_Sset = ThisDrawing.SelectionSets("HATCH") If Err.Number Then Set a_Sset = ThisDrawing.SelectionSets.Add("HATCH") End If On Error GoTo 0 a_Type(0) = 0 a_value(0) = "HATCH" a_Sset.Select acSelectionSetAll, , , a_Type, a_value angle = 2 * 3.14 a_Sset.Item(B).Rotate3D objEnt.StartPoint, objEnt.EndPoint, angle Ich denke, dass der Code bis dahin richtig ist. Jedoch kann ich das in der letzten Zeile erzeugte Volumen nicht abrufen. Ich weis nicht, wie ich das Volumen ansprechen kann. Vielleicht hat einer eine Idee. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 28. Feb. 2006 10:38 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Hallo Florian, VBA ist nur ein Werkzeug. Die Funktionen muss du dem Programm noch beibringen. Volumen eines Rotationskörpers: Da es wahrscheinlich schwer fallen wird eine Funktion für deinen Körper zu ermitteln, kannst du das Näherungsweise rechnen. Du unterteilst deine Symetrieachse in Segmente und gehts davon aus das die Verbindungen linear sind. Dann hast du lauter Kegelstümpfe. Die Summe der Teilkörper ist das Gesamtvolumen. Wenn deine Segmentlänge gegen 0 geht oder die Anzahl der Teilungen gegen unendlich hast du dein Intergral und ein hinreichend genaue Lösung. Lösen kannst du das mit einer For.. Next Schleife. Du durchläufst die Schleife von 0 bis Länge Achse. Berechnest an den Stellen den rechtwinkligen Abstand zur Achse und bildest das Teilvolumen. Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |