| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Body Auswahl für StockSizeBuilder (2422 mal gelesen)
|
stevel Mitglied
Beiträge: 14 Registriert: 01.02.2005 Software: Windows 7 x64 NX 7.5 TCEng 2005 SR1 MP5 Hardware: MacBook Pro
|
erstellt am: 26. Sep. 2011 22:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich möchte ein aufgenommenes Journal in C# umbauen damit ich beim nächsten Lauf einen anderen Body auswählen kann, aber es funktioniert nicht. Original Journal:
Code: using System; using NXOpen;public class NXJournal { public static void Main(string[] args) { Session theSession = Session.GetSession(); Part workPart = theSession.Parts.Work; Part displayPart = theSession.Parts.Display; // ---------------------------------------------- // Menu: Tools->Process Specific->Mold Wizard->Mold Tools->Stock Size... // ---------------------------------------------- NXOpen.Session.UndoMarkId markId1; markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start"); Part part1; part1 = theSession.Parts.Work; NXOpen.Tooling.StockSizeBuilder stockSizeBuilder1; stockSizeBuilder1 = workPart.ToolingManager.StockSizes.CreateStocksizeBuilder(); stockSizeBuilder1.SizePrecision = 3; theSession.SetUndoMarkName(markId1, "Stock Size Dialog"); NXOpen.Tooling.StockSizeBuilder.Shape enumstocktype1; enumstocktype1 = stockSizeBuilder1.StockType; NXOpen.Tooling.StockSizeBuilder.Cylinder enumcylindertype1; enumcylindertype1 = stockSizeBuilder1.CylinderType; int integerprecision1; integerprecision1 = stockSizeBuilder1.SizePrecision; Body body1 = (Body)workPart.Bodies.FindObject("BLOCK(0)"); bool added1; added1 = stockSizeBuilder1.SelectBody.Add(body1); stockSizeBuilder1.StringStock = "80.000 X 80.000 X 80.000"; NXOpen.Session.UndoMarkId markId2; markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Stock Size"); NXObject nXObject1; nXObject1 = stockSizeBuilder1.Commit(); theSession.DeleteUndoMark(markId2, null); theSession.SetUndoMarkName(markId1, "Stock Size"); theSession.Parts.SetWork(workPart); workPart = theSession.Parts.Work; stockSizeBuilder1.Destroy(); // ---------------------------------------------- // Menu: Tools->Journal->Stop Recording // ---------------------------------------------- } public static int GetUnloadOption(string dummy) { return (int)Session.LibraryUnloadOption.Immediately; } }
und hier meine Version:
Code: using System; using NXOpen; using NXOpenUI;public class NXJournal { public static void Main(string[] args) { Session theSession = Session.GetSession(); Part wp = theSession.Parts.Work; NXObject selobj = null; Point3d cursor = default(Point3d); UI theUI = UI.GetUI(); NXOpen.Tooling.StockSizeBuilder stockSizeBuilder1; stockSizeBuilder1 = wp.ToolingManager.StockSizes.CreateStocksizeBuilder(); stockSizeBuilder1.SizePrecision = 2; NXOpen.Tooling.StockSizeBuilder.Shape enumstocktype1; enumstocktype1 = stockSizeBuilder1.StockType; NXOpen.Tooling.StockSizeBuilder.Cylinder enumcylindertype1; enumcylindertype1 = stockSizeBuilder1.CylinderType; int integerprecision1; integerprecision1 = stockSizeBuilder1.SizePrecision; theUI.SelectionManager.SelectObject("Select Some Body", "Selection", Selection.SelectionScope.WorkPart, true, false, out selobj, out cursor); bool added1; added1 = stockSizeBuilder1.SelectBody.Add((Body)selobj); //true!! bool valid1; valid1 = stockSizeBuilder1.Validate(); //false!! try { NXObject nXObject1; nXObject1 = stockSizeBuilder1.Commit(); } catch (Exception ex) { //NXOpen.NXException: Internal error: memory access violation //bei NXOpen.Builder.Commit() //bei NXJournal.Main(String[] args) in c:\Users\...\NXJournals5212\journal.cs:Zeile 39. } stockSizeBuilder1.Destroy(); } }
Wenn ich mir die Werte meines Bodys als String ausgeben lasse bekomme ich eine Body ID, aber irgendwie scheint er den Body trotzdem nicht anzunehmen... Beim stockSizeBuilder1.Validate() kommt auch schon false heraus und beim Commit dann die Exception. Kann mir jemand sagen was ich bei meiner Auswahl falsch mache? Oder ist das Problem ganz wo anders? Sobald ich die Exception los bin möchte ich dann den Wert noch mit
Code: string myStockSize = stockSizeBuilder1.StringStock;
abfragen, aber das ist noch weit hin...mfg Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 28. Sep. 2011 08:39 <-- editieren / zitieren --> Unities abgeben: Nur für stevel
Hallo Stephan, bei der Selektion gibt's keinen Filter, daher ist das, vom Selectionmanager gelieferte NXObject evtl. kein Body. Merkwürdig ist dann nur, daß das Objekt bei SelectBody.Add ohne Fehler angenommen wird. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stevel Mitglied
Beiträge: 14 Registriert: 01.02.2005 Software: Windows 7 x64 NX 7.5 TCEng 2005 SR1 MP5 Hardware: MacBook Pro
|
erstellt am: 01. Okt. 2011 00:13 <-- editieren / zitieren --> Unities abgeben:
Hi, in meinem Test Teil ist nur ein Körper drinnen... mit GetType() bekomme ich "NXOpen.Body" zurück, das sollte doch passen? Kanns vielleicht mal jemand mit ner anderen Version probieren? Hab 7.5.4.4 MP2 x64, bei NX 8 geht irgendwie gar nix, da is ein BUG drinnen (Hab schon nen PR). Danke Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 01. Okt. 2011 14:58 <-- editieren / zitieren --> Unities abgeben: Nur für stevel
|
stevel Mitglied
Beiträge: 14 Registriert: 01.02.2005 Software: Windows 7 x64 NX 7.5 TCEng 2005 SR1 MP5 Hardware: MacBook Pro
|
erstellt am: 01. Okt. 2011 21:03 <-- editieren / zitieren --> Unities abgeben:
Hi, da bekomme ich den gleichen Body Tag und auch NXOpen.Body raus... Jetzt versteh ich auch noch nicht wie das Journal auf das hier kommt:
Code: stockSizeBuilder1.StringStock = "80.000 X 80.000 X 80.000";
darum geht es mir ja eigentlich. Sobald ich das rein setze läufts, aber nicht mal im Journal wird dar Wert aktuallisiert wenn ich meinen Block ändere...Wenn ich versuche mit Code: string stockVal = stockSizeBuilder1.StringStock;
den Wert zu holen bleibt der string leer und ich bekomme wieder die "memory acces violation" in der Zeile mit dem Commit um die Ohren...ich verstehs ned Stephan [Diese Nachricht wurde von stevel am 01. Okt. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Praktikant / Werkstudent (m/w/d) als Assistenz der Bauleitung | GOLDBECK?realisiert zukunftsweisende Immobilien in Europa. Wir verstehen Gebäude als Produkte und bieten alle Leistungen aus einer Hand: vom Design über den Bau bis zu Services im Betrieb. Aktuell beschäftigt unser Familienunternehmen mehr als 12.000 Mitarbeitende an über 100 Standorten bei einer?Gesamtleistung von über 6 Mrd. Euro. Unser Anspruch ?building?excellence? steht dabei für Spitzenleistungen ... | Anzeige ansehen | Assistenz, Sekretariat |
|
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 03. Okt. 2011 10:49 <-- editieren / zitieren --> Unities abgeben: Nur für stevel
Hallo Stephan, ich kann, wegen fehlender CAM-Lizenz leider nur Vermutungen anstellen. Hier die nächste: In Deinem Code wird für den StockType ein Zylinder angegeben. Der Stocksize läßt allerdings auf eine Box schließen. Evtl. liegt hier ein Widerspruch, der zur Exception führt. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |