Visualisatie Kubus

Hallo
Op de UserForm1-record bevindt zich een knop [Wissen] waarmee de 3D-schets en het coördinatensysteem dat aan de kubus is gekoppeld, worden verwijderd. Mits dit de laatste twee functies van de boom zijn, zodat er niets wordt toegevoegd nadat de kubus is gemaakt.

Wat betreft het ophalen van de naam van een schets, de " Naam " methode maakt deel uit van de " ISketch " klasse van de API ("swSketch.Name  ", zie regel 377).

Maar als je een variabele hebt die naar de schets verwijst, zoals regel 363 ("Set swSketch = swModel.SketchManager.ActiveSketch "), dan maakt de " Select4() " methode selectie mogelijk zonder dat je naar de naam hoeft te zoeken, bijvoorbeeld: 
ok = swSketch.Select4(Onwaar, Niets) "
Waarschijnlijk geërfde leden, ze zijn niet gedocumenteerd in de hulp van de " ISketch " -klasse, maar zijn gedocumenteerd in andere...

1 like

Hallo @m_blt
Nogmaals bedankt voor uw feedback.
Ik had eigenlijk niet op de DELETE-knop gedrukt.
Ik zal dit eens nader bekijken om te zien wanneer het werkt in relatie tot de informatie van de variabelen die ik heb toegevoegd ... en om mijn intellectuele armoede te verrijken in VBA :slightly_smiling_face:.

Trouwens, in VBA heb ik er vanmorgen mee gesleuteld...
Een macro die de naam van de laatste functie ophaalt om deze te verwijderen.
Omdat er een 3D-schets en een drievlakker is, verdubbel ik de opdrachtregels om de 2 functies te verwijderen.
Ik weet het, het is archaïsch :sweat_smile:
Er is zeker een manier om het eenvoudiger te maken, denk ik ...

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swDoc As SldWorks.ModelDoc2
Dim swAssembly As SldWorks.AssemblyDoc
Dim swFeatureName As SldWorks.Feature


Sub SuppressionDeuxDernieresFonctions()

    Set swApp = Application.SldWorks

    Set swDoc = swApp.ActiveDoc
  
    ' Vérifie que le document SW est ouvert
    If swDoc Is Nothing Then
  
    MsgBox "Aucun document Solidworks ouvert"
    Exit Sub
    
    End If
  
    Set swAssembly = swDoc
  
'''Première passe pour supprimer le trièdre
  
    'Attribution nom dernière fonction
    Set swFeatureName = swDoc.Extension.GetLastFeatureAdded

    'Vérifie la selection de la fonction
    If swFeatureName Is Nothing Then
  
    MsgBox "Sélection fonction impossible"
    swDoc.ClearSelection2 True
    Exit Sub
    
    End If
  
    'Selection du nom
    swFeatureName.Select True
  
    'Suppression de la fonction
    swDoc.EditDelete
  
'''Deuxième passe pour supprimer l'esquisse 3D
  
    'Attribution nom dernière fonction
    Set swFeatureName = swDoc.Extension.GetLastFeatureAdded

    'Vérifie la selection de la fonction
    If swFeatureName Is Nothing Then
  
    MsgBox "Selection fonction Impossible"
    swDoc.ClearSelection2 True
    Exit Sub
    
    End If
  
    'Selection du nom
    swFeatureName.Select True
  
    'Suppression de la fonction
    swDoc.EditDelete
  
End Sub
1 like

Hallo @m_blt

Ik heb een kleine vraag over de definitie van de lay-out van de doos.
Ik heb een paar gevallen waarin het niet helemaal past bij het maximum van wat zou moeten zijn. In het bijzonder op ronde delen met filets:

Ik heb het hoesje op de 2 stukken aan de rechter- en linkerkant:

Maar ik heb niet de behuizing op het bovenste stuk:

Waar in het wetboek kan ik ingrijpen om een goede tangency te verkrijgen?

De macro werkt in ieder geval prima.
Ik heb mijn arrangementen en extra functies meegenomen en het is GEWELDIG.
Hartelijk dank voor de geboden hulp.

Bij voorbaat dank.

Hallo
Het is moeilijk te zeggen wat de oorzaak is van het probleem dat u aan de orde stelt. Een paar opmerkingen:

  • Wat is de grootte van de fout, vergeleken met de algemene afmetingen van de assemblage (in mm bijvoorbeeld)?

  • Voor zover het waargenomen defect een aanzienlijke zoom vereist, kan het scherm de schuldige zijn...

  • De " GetExtremePoint() " methode bepaalt de buitenlimiet voor elk onderdeel. Dit is een numerieke berekening die intern is in de SolidWorks API's. Is het rigoureus? Zoals elke numerieke berekening, gebruikt het een kwaliteitscriterium om zijn zoekopdracht te valideren, een criterium dat onbekend is voor de gebruiker.
    Op dit punt geeft SolidWorks Help commentaar op de " GetBodyBox " -functie die blijkbaar de " GetExtremePoint " -methode gebruikt:
    BELANGRIJK: De geretourneerde waarden zijn bij benadering en mogen niet worden gebruikt voor vergelijkings- of berekeningsdoeleinden. Bovendien kan het begrenzingsvak variëren nadat het model opnieuw is opgebouwd.
    De contouren van de " wolken" die zichtbaar zijn in de schermafbeeldingen lijken gebaseerd te zijn op splines. Zou dit de oorsprong van het pb kunnen zijn?

  • De enige berekeningen in de macro zijn wijzigingen in het coördinatensysteem die gebruikmaken van de vector- en rasterfuncties van de API. Ik zie niet in hoe ze het defect kunnen genereren.

Tot slot: ik ben niet in staat om de oorzaak van het probleem te achterhalen. Kunt u het voorbeeld delen dat problematisch is? Zelfs als het wordt gedegradeerd, of via een privébericht...

Vriendelijke groeten.

4 likes

Hartelijk dank voor deze antwoorden.

De fout varieert dus afhankelijk van de assemblages en onderdelen.
Dit varieert van 0,5 tot 1,5 mm.
In mijn geval is dit niet per se belangrijk, omdat ik mijn waarden terugbreng naar de cm.

Mijn vraag was vooral om de code beter te begrijpen en eventueel te corrigeren als dat haalbaar was. Niets dwingends dus.

Ik zet nog steeds de assemblage + onderdelen met 3D Sketch + Systeem coördinaten gegenereerd door de macro als je wilt kijken.

Bedankt voor de informatie :slight_smile:

TEST ENCOMBREMENT.rar (1.1 MB)

1 like

Geweldig werk @m_blt , zoals altijd.
En ik dacht dat ik tot nu toe nooit de " BoundingBox " zou hoeven te gebruiken... Ik kom een klant tegen, laten we zeggen... Kieskeurig.
Uw Macro komt dus op het juiste moment. Bedankt :index_pointing_at_the_viewer: :+1: :+1: :index_pointing_at_the_viewer:

2 likes

Hallo @Maclane , en bedankt voor het compliment...
Pas echter op voor het probleem van precisie dat @MLG in zijn laatste boodschap aan de orde stelde.
Ik merkte de anomalie, maar ik kon niet identificeren of het SW of de macro die de schuld heeft.

3 likes

Hallo;
Dit is een terugkerend probleem met splines, Solidworks houdt alleen rekening met de punten en niet met de curve zelf, dus ik denk dat de " GetExtremePoint() " functie hetzelfde doet (zoals de naam al doet vermoeden).

Van mijn kant ben ik zo vrij geweest om uw macro aan te passen door de eigenschappen aan het document toe te voegen met een optie om ze (of niet) in alle configuraties te registreren.
Aan de andere kant ben ik op zoek naar hoe ik maatvoering kan toevoegen aan de 3D-schets.

Ik heb nog niet gekeken naar het begrip dat hoort bij de knop " Verwijderen ", maar ik denk dat door de functies " 3Dsketch " en " Coördinatensysteem " op een meer expliciete manier te hernoemen (zoals " BoundingBox_3D " en " BoundingBox_XYZ "), het gemakkelijker zal zijn om ze te verwijderen, of zelfs om alle functies (restjes) met dezelfde namen (+teller) te verwijderen.

Vriendelijke groeten.

3 likes

Hallo @MLG

Misschien zullen de waarden nauwkeuriger zijn met alle kwaliteitsinstellingen maximaal, in de documentopties?

1 like

Hoi allemaal
Het verschil is echt minimaal, maar is wel degelijk aanwezig.
Met documenten die met de hand werden vermeld en sommige met behulp van deze macro, eindigden we met verschillende uitvoergegevens, vandaar mijn vraag...
En voor splines vermijden we ermee te werken om dit soort problemen niet te hebben.

Hallo allemaal
HOP, hier ben ik weer terug op dit onderwerp! :slight_smile:
De macro werkt goed, maar ik merk dat ik voor een probleem sta.
Uitleg:

De macro werd gebruikt om een 3D-kubus te definiëren, waardoor ik de voetafdrukwaarden van mijn assemblage kon ophalen volgens een nauwkeurige oriëntatie. Voor deze stuiver en een GROTE DANK aan @m_blt en aan iedereen die heeft bijgedragen aan de vooruitgang van dit bericht :+1:.

Mijn assemblages hebben afdichtende subassemblages (hieronder in blauw) om het product op de vloer te bevestigen. In mijn macro heb ik deze subassemblages verwijderd, zodat ik alleen het deel boven de grond van aanwezig had. Ik heb echter subassemblages in directe afdichting (hieronder in rood), d.w.z. ze zijn aanwezig onder en boven niveau 0 (hieronder zonder dat ze kunnen worden gesplitst/gescheiden):

Ik zou graag willen weten of het mogelijk is om aan de UserForm de selectie van het niveau 0-vlak (een vlak of een deelvlak) toe te voegen om het laagste vlak van de 3D-kubus te bepalen? Subassemblages in directe afdichting (in rood) kunnen niet worden verwijderd omdat ze worden gebruikt om de breedte van de kubus te definiëren:

De selectie van het plan van niveau 0 zou daarom het LOW-vlak van de kubus moeten definiëren en de voetafdruk van lengte/breedte/hoogte zou alleen moeten worden gedefinieerd met alles boven niveau 0 zonder rekening te houden met wat eronder is.

Ik hoop dat het begrijpelijk is, want het is niet gemakkelijk uit te leggen :sweat_smile:

Hallo MLG,

Een jaar later, terug naar de kubus... :wink:
image

Het principe van macroverwerking is gebaseerd op het doorkruisen van de assemblageboom om de componenten te vinden die de afmetingen van de kubus beperken. Rekening houden met een plan dat bepaalde componenten schrapt om sommige ervan uit te sluiten, lijkt op het eerste gezicht ingewikkeld.

Tenzij...
Een aanwijzing: Het zou mogelijk moeten zijn als dit " Niveau 0 " vlak het referentievlak is van de creatie van de kubus (eerste vlak geselecteerd in de macro), of in het slechtste geval evenwijdig aan één vlak van de toekomstige kubus.
U moet dit " beperkende " vlak (niveau 0) selecteren naast de twee entiteiten die worden gebruikt om de vlakken van de kubus te oriënteren, en niet overwegen wat eronder zit (welke kant is eronder?).
Aanvaardbaar?

4 likes

Thuis, sorry, ik begon het onderwerp en ontsnapte aan iets anders als een onbeschofte man!!

@m_blt hadden we in de selectie een zijde van de onnant, een oriëntatie van de kubus en een rand die de verticaliteit aangaf.
Is het mogelijk om in de eerste selectie een vlak te hebben dat niveau 0 zou zijn en dus alles wat zich onder dit vlak zou bevinden niet in aanmerking zou worden genomen bij de definitie van de kubus?

1 like