| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Kantenverrundung Feature löschen (2082 mal gelesen)
|
bernd0209 Mitglied CNC-Fräser / Programmierer
Beiträge: 32 Registriert: 07.01.2014 Win10 64bit, NX1892 mit TC12
|
erstellt am: 05. Jan. 2016 14:14 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, kleines Aufgabe für Profis, denke ich. Ich möchte in einem Teil alle Kantenverrundungen löschen, die kleiner sind als ein bestimmter Wert. Ich hab schon etwas gefunden, das mir entsprechende Verrundungen auflistet, nur wie kann ich diese dann aus meinem Modell entfernen? For Each myFeature As Features.Feature In workPart.Features If myFeature.FeatureType = "BLEND" Then 'Verrunden löschen wenn kleiner als .... '???? End If
Das komplette Script hatte ich von hier: http://www.nxjournaling.com/content/find-object Schaffe es aber nicht, hier das löschen einzubauen. Wäre nett wenn mir da jemand helfen könnte. Viele Grüße Bernd 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: 05. Jan. 2016 19:07 <-- editieren / zitieren --> Unities abgeben: Nur für bernd0209
Hallo Bernd, sind das alles "normale" Blends mit konstantem Radius ? Oder gibt's auch Bodies ohne Parameter oder variable Radien ? Dann wird's halt mehr oder weniger umfangreich. Im einfachen Fall würd' ich erst mal alle Blends in einer Schleife aufsammeln. In einer nächsten Schleife deren Radius ermitteln. Wenn man die Erzeugung oder Änderung eines Blends aufzeichnet, findet sich darin der gesuchte Wert. So lassen sich wiederum die Blends sammeln resp. aussortieren, deren Radius zu klein, zu groß oder was auch immer ist. Jetzt können die gefundenen Features gelöscht werden, bevorzugt vom Ende her. Sonst klaut man einem nachfolgenden Blend evtl. seine Parents. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bernd0209 Mitglied CNC-Fräser / Programmierer
Beiträge: 32 Registriert: 07.01.2014
|
erstellt am: 06. Jan. 2016 06:38 <-- editieren / zitieren --> Unities abgeben:
Moin Michael, es geht darum, Radien am Teil zu entfernen, die bei einer späteren Vernetzung stören. Für den Anfang würde ich sagen, es wären alles einfache Blends mit konstantem Radius. Das ganze einsammeln, Radius ermitteln und in eine Liste schreiben klappt ja grundsätzlich. For Each myFeature As Features.Feature In workPart.Features If myFeature.FeatureType = "BLEND" Then ... ... ... Dann müsste aber irgendetwas wie z.B. myfeature.delete kommen. Aber irgendwie hänge ich mich dabei auf Vielleicht kannst Du mir noch einen kleinen Anstoss geben? Und mal am Rande noch eine Frage. Was kosten solche "kleinen" Helfer, wenn man sich soetwas professionell programmieren lässt? Genau kann man das nicht sagen, schon klar. Aber wo ist der Bereich in dem man sich da bewegen würde? Viele Grüße Bernd
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: 06. Jan. 2016 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für bernd0209
Hallo Bernd, auch das kriegt man mit einer Journal-Aufzeichnung oder einer Suche in der .NET-Ref raus . Wenn's nur um's Löschen geht: UFSession.GetUFSession.Obj.deleteobject() oder Session.Getsession.Updatemanager.Add2DeleteList() mit anschliessendem DoUpdate(). Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bernd0209 Mitglied CNC-Fräser / Programmierer
Beiträge: 32 Registriert: 07.01.2014
|
erstellt am: 06. Jan. 2016 13:15 <-- editieren / zitieren --> Unities abgeben:
..... den Anfang hätte ich und für den Fall das noch jemand Interesse hat:
Code: Option Strict Off Imports System Imports NXOpen Imports NXOpenUI ' script löscht alle Kantenverrundungen im Teil ' Grenzradius kann per InputBox eingegeben werden Module Module1 Sub Main() Dim theSession As Session = Session.GetSession() Dim theUISession As UI = UI.GetUI If IsNothing(theSession.Parts.Work) Then 'active part required Return End If 'input box: prompt and title Dim answer As String = "" Dim loeschradius as Double answer = NXInputBox.GetInputString("alle kleiner als:", "zu löschende Kantenverrundungen") if answer = "" then exit sub answer=answer.replace(".",",") loeschradius = Convert.ToDouble(answer) Dim workPart As Part = theSession.Parts.Work Dim lw As ListingWindow = theSession.ListingWindow lw.Open() lw.WriteLine(answer) Dim markId2 As Session.UndoMarkId markId2 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Delete") Dim objects1(50) As NXObject dim zaehler as integer =0 dim result as string dim radius as double For Each myFeature As Features.Feature In workPart.Features If TypeOf (myFeature) Is NXOpen.Features.EdgeBlend Then lw.WriteLine(myFeature.GetFeatureName) Dim blendFeature As Features.EdgeBlend = myFeature Dim edgeBuilder As Features.EdgeBlendBuilder edgeBuilder = workPart.Features.CreateEdgeBlendBuilder(myFeature) Dim numChainSets As Integer numChainSets = edgeBuilder.GetNumberOfValidChainsets 'lw.WriteLine("number of chain sets: " & numChainSets.ToString) For i As Integer = 0 To numChainSets - 1 Dim myCollector As ScCollector Dim radiusExpression As Expression Dim isValid As Boolean edgeBuilder.GetChainsetAndStatus(i, myCollector, radiusExpression, isValid) 'lw.WriteLine("chainset " & i.ToString & ":") 'lw.WriteLine(" isValid: " & isValid.ToString) lw.WriteLine(" Radius: " & radiusExpression.RightHandSide) ' ### wenn z.B. 0.4 aber in Zelle steht nur .4 result="0" & radiusExpression.RightHandSide result=result.replace(".",",") radius = Convert.ToDouble(result) '#### bis hier 'if radiusExpression.RightHandSide <0.5 then if radius < loeschradius then lw.WriteLine(" Radius kleiner als " & loeschradius & " -- wird gelöscht") objects1(zaehler) = myFeature zaehler +=1 end if Next End If Next 'löschen der Features Dim nErrs1 As Integer nErrs1 = theSession.UpdateManager.AddToDeleteList(objects1) 'gezieltes löschen -> objects1(...) 'nErrs1 = theSession.UpdateManager.AddToDeleteList(objects1(1)) Dim notifyOnDelete2 As Boolean notifyOnDelete2 = theSession.Preferences.Modeling.NotifyOnDelete Dim nErrs2 As Integer nErrs2 = theSession.UpdateManager.DoUpdate(markId2) lw.Close() End Sub End Module
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: 06. Jan. 2016 15:31 <-- editieren / zitieren --> Unities abgeben: Nur für bernd0209
|
| Elektrokonstrukteur im Bereich Entwicklung und Konstruktion von Kabelbäumen (m/w/d) | Unser Mandant hat eine langjährige Erfahrung im Bereich der Kabelkonfektionierung und dem Einsatz modernster Fertigungstechnologien zur Sicherung der hohen Ansprüche an Service und Produktqualität. Vom kompletten Kabelbaum bis zur fertig konfektionierten und bedruckten Litze wird das komplette Spektrum angeboten. Als Serienfertigung, exakt auf die Taktzeiten der Produktionsabläufe beim Kunden abgestimmt bis hin zur Kleinserie oder Prototyp in Einzelfertigung.... | Anzeige ansehen | Elektrotechnik, Elektronik |
|
bernd0209 Mitglied CNC-Fräser / Programmierer
Beiträge: 32 Registriert: 07.01.2014
|
erstellt am: 07. Jan. 2016 06:27 <-- editieren / zitieren --> Unities abgeben:
Moin Michael, die 2 Gedanken sind Grundsätzlich besser, schon klar. Es ging ja am Ende aber um den Versuch eine schnelle "automatische" Lösung zu haben. Mit der synchronen Konstruktion machen sie es ja momentan auch. Unterdrücken ... das müsste dann konstruktiv schon so angelegt sein. Eher schwierig. Zumal es z.T. auch schon Teile sind, die schon einige Jahre alt sind. Viele Grüße Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |