Macro voor het extraheren van dimensionale dimensies uit Solidworks

Hoi allemaal

Ik ben bezig met de automatisering van een CAD/CAM-proces en ik zou graag uit een onderdeel of een Solidworks-assemblage de afmetingen en hun afmetingen willen kunnen extraheren (voor elke functie van het onderdeel/de onderdelen) naar een extern bestand.

Met dank aan de heer Boutherand op een oud artikel van ''myCadblog'', vond ik een macro waarmee je deze gegevens via een excel bestand kunt extraheren. Alleen deze macro lijkt verouderd te zijn (zie code hieronder).

Kunt u mij helpen het bij te werken? (Ter info: ik ben op Solidworks 2014)

Alvast hartelijk dank voor uw feedback!

Romeins

 

  • Sub AddAllDimensions()
  • Dim swDisplayDimension als SldWorks.DisplayDimension
  • Dim swDimension als SldWorks.Dimension
  • Dim swFeature als SldWorks.Feature
  • Bij fout GoTo SiErr
  • 'Haalt de SolidWorks-applicatie op
  • Stel swApp = CreateObject("SldWorks.Application") in
  • 'We krijgen het actieve document
  • Stel swDoc in = swApp.ActiveDoc
  • 'Haalt de eerste functie op
  • Stel swFeature in = swDoc.FirstFeature
  •     
  • Als swFeature niets is, dan
  • MsgBox "het document is leeg", vbUitroep
  • Sub afsluiten
  • Einde als
  •  
  • Doen
  • 'Bij elke functie halen we de afmetingen op
  • Stel swDisplayDimension in = swFeature.GetFirstDisplayDimension
  • Zo niet, dan is swDisplayDimension niets
  • Doen
  • Stel swDimension in = swDisplayDimension.GetDimension
  • Toevoegen aan de lijst
  • Aanroepen AddDimToSheet (swDisplayDimension)
  • Stel swDisplayDimension in = swFeature.GetNextDisplayDimension(swDisplayDimension)
  • Loop totdat swDisplayDimension niets is
  • Einde als
  • Stel swFeature in = swFeature.GetNextFeature
  • Loop tot swFeature niets is
  •  
  • Sub afsluiten
  •  
  • SiErr:
  • Stel swDisplayDimension in = Niets
  • Samenvatting Volgende
  • Einde Sub

 

 

1 like

kan een probleem zijn met 32-bits naar 64-bits of VBA-macrotaal

http://help.solidworks.com/2013/French/WhatsNew/c_application_programming_interface_wn2012.htm?format=P

@+ ;-)

1 like

Ik heb de macro iets veranderd, het geeft nu de kansen en hun waarden weer

Het enige dat overblijft is het toevoegen van uw behandelingen

Daar is ze

 


macro1.zip
8 likes

@gt22: Dank je  , ik zal de doc goed bekijken.

 

@jfaradon: Bedankt voor de macro-wijziging, het herstelt inderdaad de afmetingen, maar alleen onder solidworks door een msgbox weer te geven, toch?

Kortom, de macro draait in een Excel-bestand om de dimensies in cellen te kunnen extraheren.

 

Is het mogelijk om het in Excel uit te voeren? 

 

Bedankt voor je snelle antwoorden!

Goedenavond

 

gewoon een korte vraag om de waarden ok te extraheren, maar als je toleranties hebt, hoe zal het dan zijn met CAD / CAM-bewerking?

Omdat ik de vraag erg interessant vind, maar dit punt over toleranties maakt me turlupine!

 

Bedankt.

2 likes

Goedenavond Matthieu, 

 

Toleranties doen er niet toe in ons industriële proces (vreemde uitspraak uit de context gehaald:) ) maar het is het wel. De toepassing is vrij bijzonder, ver van de klassieke mechanische precisie...

Wat ik nodig heb in het ontwerp is dankzij een bibliotheek met functies waarbij de bewerking is gestandaardiseerd in zijn vormen (schets + materiaalverwijderingsfunctie) en waarvoor ik de afmetingen van de afmetingen elke keer opnieuw definieer, om mijn onderdelen te tekenen en te monteren. 

Uit de tekening van elk onderdeel of de assemblage wil ik een nomenclatuur van elk onderdeel halen, de functies die op elk onderdeel worden toegepast (de bewerking in productie) en de afmetingen die ik voor elke functie heb gebruikt. Het productieprogramma heeft alleen de namen van de onderdelen nodig, de kenmerken die op die onderdelen zijn toegepast en enkele van de afmetingen die de positionering van de kenmerken op het onderdeel bepalen (de positie van de bewerking in de productie).

 

Dat is het verhaal. :)

 

Goedenacht. 

2 likes

Hoi allemaal

Het is me eindelijk gelukt om de macro aan het werk te krijgen! 

Zie het resultaat in bijlage...

Aan de andere kant lijkt het alleen te werken voor onderdelen, en niet voor assemblages, terwijl er geen .part-specificatie in de macrocode staat, is dit normaal?

 

Fijne dag!

 

 


extraction_test.jpg

Romeins

 

Hier is een aanpassing om rekening te houden met de assemblages

De code op het onderdeel voor het ophalen van de functiewaarde is hetzelfde

 

 

 

Dim swApp als SldWorks.SldWorks

Dim swDoc als SldWorks.ModelDoc2

Dim swAss als SldWorks.AssemblyDoc

Dim swPart As SldWorks.PartDoc

Dim swFeature als SldWorks.Feature

 

Sub hoofd()

 

 

    Bij fout GoTo SiErr

    'Haalt de SolidWorks-applicatie op

    Stel swApp = CreateObject("SldWorks.Application") in

    'We krijgen het actieve document

    Stel swDoc in = swApp.ActiveDoc

    

    Selecteer Case swDoc.GetType

        Kader swDocumentTypes_e.swDocPART

            Stel swPart in = swDoc

            Roep TraverseFeature (swPart) aan

        Doos swDocumentTypes_e.swDocASSEMBLY

            Stel swAss = swDoc in

            Dim swComponents als variant

            swComponents = swAss.GetComponents(Onwaar)

            Voor i = 0 TB UBound(swComponents)

                Roep TraverseFeature(swComponents(i) aan. GetModelDoc)

            volgende i

        Doos swDocumentTypes_e.swDocDRAWING

            MsgBox "Niet op een plan", vbUitroep

            Einde

    Einde selecteren

    

 

SiErr:

    MsgBox Err.Description, vbCritical

    Einde

Einde Sub

 

Sub TraverseFeature(ByRef swDoc als SldWorks.ModelDoc2)

    Dim swDisplayDimension als SldWorks.DisplayDimension

    Dim swDimension als SldWorks.Dimension

    Dim swFeature als SldWorks.Feature

 

    " Als het document niet bestaat (bv. niet beschikbaar, onderdeel verwijderd)

    Als swDoc niets is, sluit dan Sub af

    

    

    'Haalt de eerste functie op

    Stel swFeature in = swDoc.FirstFeature

    

    Als swFeature niets is, dan

        MsgBox "het document is leeg", vbUitroep

        Sub afsluiten

    Einde als

 

    Doen

        'Bij elke functie halen we de afmetingen op

        Stel swDisplayDimension in = swFeature.GetFirstDisplayDimension

        Zo niet, dan is swDisplayDimension niets

            Doen

                Stel swDimension in = swDisplayDimension.GetDimension

                Toevoegen aan de lijst

                Als MsgBox(swDimension.FullName & " = " & swDimension.GetValue2(""), vbOKCancel, swDoc.GetTitle) = vbCancel then end

                Stel swDisplayDimension in = swFeature.GetNextDisplayDimension(swDisplayDimension)

            Loop totdat swDisplayDimension niets is

        Einde als

        Stel swFeature in = swFeature.GetNextFeature

    Loop tot swFeature niets is

 

    Sub afsluiten

 

SiErr:

    MsgBox Err.Description, vbCritical

    Einde

Einde Sub

9 likes

Goedenavond jfaradon, 

 

Sorry dat ik me net realiseerde dat jij het was die de originele macro en het bijbehorende Excel-bestand had ontwikkeld... :S

 

Bedankt voor je nieuwe code, maar ik heb moeite om deze te integreren in de huidige set macro's in het Excel-bestand. Moet ik de hele ''Sub AddAlldimensions()'' code vervangen door de nieuwe? Ik was vandaag niet op de BE om te testen...

 

Hartelijk dank.

 

Goedenacht. 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Hallo!

 

Ik heb het hele ding vanmorgen geïntegreerd, het werkt!!

Ik heb ''i'' als geheel getal verklaard en dat is oké. 

 

Aan de andere kant heb ik gewoon een foutmelding msgbox aan het einde (zie bijgevoegde afbeelding) Ik kan niet zien waar het vandaan komt...

 

Heel erg bedankt in ieder geval. Ik had niet de reflex van forums als het gaat om ontwerp en je vaardigheden en reactievermogen zijn buitengewoon.

 

Fijne dag!

 

Romeins


msgbox_error.jpg

Hallo, wat moet je toevoegen om het uit te pakken in een Excel-bestand? Of een txt-artikel? 

2 likes

Hallo en bedankt voor deze code. Ik probeerde het als inspiratie te gebruiken om dimensies als annotaties in een assemblage te extraheren. Daarom stel ik hier mijn vraag, die mij verstandiger lijkt.

De afmetingen (tussen 2 componenten) hebben een naam van het RD1@annotations type. Is het mogelijk om via een macro toegang te krijgen tot hun waarden? Ik heb in de API gekeken, maar ik droog op (FeatureByName?)

Tweede vraag van dezelfde orde, ik zou graag de waarde van een contarrinte in de vergadering willen controleren.

Het doel is om een hoek te variëren en de gemeten afmetingen op te halen door annotaties rechtstreeks in Excel.

Dank u voor uw hulp.

1 like
Hallo, de oude vragen worden heel weinig gevolgd op dit forum omdat er geen mogelijkheid is om te sorteren op laatste activiteit. Als je een vraag hebt, aarzel dan niet om deze op het forum te stellen, en daar heb je snel antwoord!