Hallo
In navolging van de overgang naar de 2020-versie werkt Solidworks arcering met veel streken en ingewikkelde arceringpatronen.
Ons materiaal dat voor de lasnaden werd gebruikt, was helaas in pied-de-poule factor 32 (het volstaat te zeggen dat het minuten duurt om het kleinste detailplan te laden).
Dus hebben we onze materialen veranderd om terug te keren naar lichtere broedtypes en schaalfactoren.
Ons huidige probleem is dat we veel oude plannen kopiëren (dus met de oude materialen die in de kamers zijn bewaard).
Zou er iemand zijn die in staat zou zijn om een macro te maken om alle onderdelen van een assemblage te scannen en automatisch de materialen met de volgende namen opnieuw te laden: "Roestvrij staal lassen", "Stellite Grade 21 (RC)", "Stellite Grade 12 (RB)", "Stellite Grade 6 (RA)"
Bij voorbaat dank
Hier is een voorbeeld van een regel die u kunt toepassen met Integratie (hulpprogramma Mycadtools) om materialen te wijzigen volgens een regel (hier als het materiaal a of B of C is)
Om dit te doen, krijg je de assemblage aan de gang, je breekt het af, dan filter je alleen op de onderdelen, je lanceert en dan laat je het draaien.
Dit bespaart u het maken van een macro en het blijft gemakkelijk bewerkbaar zonder programmeerkennis.
De link naar de hulp bij inburgering:
https://help.visiativ.com/mycadtools/2020/fr/Integration.html
maj_inox_316.mcact
1 like
Bedankt @sbadenis, maar helaas heb ik de mycad-hulpprogramma's niet.
Daarnaast, en om het nog ingewikkelder te maken: onze te bewerken onderdelen zijn virtuele onderdelen die in de assemblage worden opgeslagen. Gezien wat je beschrijft, denk ik niet dat je methode daardoor werkt.
In je profiel zie ik echter dankzij de medaille dat je geabonneerd bent op Mycadservices, dus normaal gesproken heb je toegang tot hulpprogramma's zonder extra kosten.
Kijk in het menu aan de linkerkant, als je toegang hebt, in het menu Produceren, tot het menu Mycadtools (in het slechtste geval is er een proefperiode van 1 maand, lijkt me, maar gezien de medaille voor mij moet je er toegang toe hebben)
Voor de virtuele onderdelen heb ik net een test gedaan, dat is geen probleem.
Het enige wat u hoeft te doen is de assemblage in solidworks te openen, in integratie op actief document toevoegen te drukken, nadat u het vakje voor afhankelijkheden hebt aangevinkt, vervolgens in filter om de onderdelen te filteren, de assemblage te starten en uiteindelijk op te slaan met de materiaalwijzigingen die in elk onderdeel zijn aangebracht.
Indien nodig kan ik u begeleiden.
1 like
Ik was een tijdje een Mycad-abonnee, maar dat ben ik niet meer (en we willen ook niet voor het leven betalen voor 8 mycad-licenties (zelfs als het redelijker is dan de kosten van SW-onderhoud)....)
Er is inderdaad meer dan de macro over, maar ik beheer het niet genoeg over het onderwerp om het te doen in de weinige vrije tijd die ik op dit moment vind.
In dit geval is hier een begin voor de macro:
https://www.codestack.net/solidworks-api/document/materials/show-edit-material-dialog/
Vanuit uw assemblage moet u de set onderdelen lussen, ze vervolgens een voor een openen en het materiaal vervangen als het een van de betreffende materialen is.
.
Hallo
Waarom selecteert u niet alle onderdelen uit de assemblage en klikt u met de rechtermuisknop, selecteert u materiaal en wijzigt u het materiaal van alle onderdelen in 1 keer
Joel
Hoi allemaal
Als u uw materialen heeft gewijzigd, is bij het updaten normaal gesproken de nieuwe arcering van toepassing. Als u dit in bulk wilt doen zonder de bestanden te openen, kunt u bijwerken vanuit de Taakplanner.
@ joel.condevaux : Omdat ik alleen het probleem heb met de lasnaden (die zwart moeten worden, wat mijn pied-de-poule + sterke beginschaal verklaart): ofwel één of twee stukken van de tien of 50 die de assemblage bevat. Anders is dat in de praktijk wat we doen, maar het is een beetje repetitief om dit te doen op alle vliegtuigen die we kopiëren.
@ Ik zal overleven: we zijn op EPDM , dus het compliceert de zaken een beetje: je moet het assemblagebestand hebben uitgepakt voordat je het kunt wijzigen zodat het MEP-bestand kan worden gebruikt. En bovendien zijn de onderdelen waarvan het materiaal moet worden aangepast virtueel en hebben ze telkens andere namen: moeilijk in batch te maken.
Ik heb nog steeds naar de 'task scheduler'-tool gekeken en ik zie niet met welk commando je het materiaal van een onderdeel kunt wijzigen (en het geval van het wijzigen van het materiaal van een virtueel onderdeel binnen een assemblage lijkt me volledig genegeerd). De tool kan alleen werken op lees-/schrijftools, d.w.z. uitgepakte bestanden (wat vrij logisch lijkt).
Voor mij is het een kwestie van de wijzigingen aanbrengen ten opzichte van de montage:
- Bij de montage: filter de onderdelen op basis van het materiaal en wijs een nieuwe toe

@ Joel.Condevaux : We kunnen inderdaad een filter maken op de naam van het materiaal om de onderdelen te identificeren waar het materiaal moet worden gewijzigd. Maar omdat ik 4 verschillende mogelijke materialen heb, moet je 4 verschillende zoekopdrachten doen en dan het materiaal opnieuw laden.
Het is dus nog steeds lang, vervelend en repetitief.
Vandaar de interesse om een macro te kunnen maken zodat het de pc is die dit werk doet en niet de projector.
Hallo
Hier is een macro die als uitgangspunt zou moeten kunnen dienen, vergeet niet de regel "databaseName = ... " om de naam van uw SLDMAT-bestand in te voeren .
Alle bestanden moeten in uw assembly in de modus Opgelost zijn.
Vriendelijke groeten
Option Explicit
Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim myMatVisProps As SldWorks.MaterialVisualPropertiesData
Dim orgBlend As Boolean
Dim orgApply As Boolean
Dim orgAngle As Double
Dim orgScale As Double
Dim longstatus As Long
Dim bRet As Boolean
Dim i As Long
Dim Assembly As ModelDoc2
Dim myAssy As AssemblyDoc
Dim myCmps As Variant
Dim myCmp As Component2
Dim nInfo As Long
Sub main()
Set swApp = Application.SldWorks
Set Assembly = swApp.ActiveDoc
Set myAssy = Assembly
myCmps = myAssy.GetComponents(False)
For i = 0 To UBound(myCmps)
Set myCmp = myCmps(i)
If (myCmp.GetSuppression = 3) Or (myCmp.GetSuppression = 2) Then
bRet = myCmp.Select2(False, 0)
bRet = myAssy.EditPart2(True, True, nInfo)
Set swModel = myAssy.GetEditTarget
If swModel.GetType = 1 Then
Dim result As String
Dim Mat As String
Dim configName As String
configName = "Défaut"
Dim databaseName As String
databaseName = "C:/Program Files/SOLIDWORKS Corp/SOLIDWORKS/lang/french/sldmaterials/solidworks materials.sldmat"
Dim searchPropName1 As String
Dim searchPropName2 As String
Dim searchPropName3 As String
Dim searchPropName4 As String
searchPropName1 = "Soudure inox"
searchPropName2 = "Stellite Grade 21 (RC)"
searchPropName3 = "Stellite Grade 12 (RB)"
searchPropName4 = "Stellite Grade 6 (RA)"
Dim myPart As SldWorks.PartDoc
Set myPart = swModel
result = myPart.GetMaterialPropertyName2(configName, Mat)
If result = searchPropName1 Then
myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName1
Set myMatVisProps = myPart.GetMaterialVisualProperties()
Call apply_material_visual_properties(myMatVisProps, myPart)
ElseIf result = searchPropName2 Then
myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName2
Set myMatVisProps = myPart.GetMaterialVisualProperties()
Call apply_material_visual_properties(myMatVisProps, myPart)
ElseIf result = searchPropName3 Then
myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName3
Set myMatVisProps = myPart.GetMaterialVisualProperties()
Call apply_material_visual_properties(myMatVisProps, myPart)
ElseIf result = searchPropName4 Then
myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName4
Set myMatVisProps = myPart.GetMaterialVisualProperties()
Call apply_material_visual_properties(myMatVisProps, myPart)
End If
End If
myAssy.EditAssembly
End If
Next i
Assembly.ForceRebuild3 False
End Sub
Private Sub apply_material_visual_properties(myMatVisProps As SldWorks.MaterialVisualPropertiesData, myPart As SldWorks.PartDoc)
If Not myMatVisProps Is Nothing Then
orgAngle = myMatVisProps.Angle
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
orgScale = myMatVisProps.Scale2
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
If myMatVisProps.BlendColor = 0 Then
orgBlend = False
Else
orgBlend = True
End If
myMatVisProps.BlendColor = Not orgBlend
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
myMatVisProps.BlendColor = orgBlend
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
If myMatVisProps.ApplyMaterialColorToPart = 0 Then
orgApply = False
Else
orgApply = True
End If
myMatVisProps.ApplyMaterialColorToPart = Not orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
myMatVisProps.ApplyMaterialColorToPart = orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
If myMatVisProps.ApplyMaterialHatchToSection = 0 Then
orgApply = False
Else
orgApply = True
End If
myMatVisProps.ApplyMaterialHatchToSection = Not orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
myMatVisProps.ApplyMaterialHatchToSection = orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
If myMatVisProps.ApplyAppearance = 0 Then
orgApply = False
Else
orgApply = True
End If
myMatVisProps.ApplyAppearance = Not orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
myMatVisProps.ApplyAppearance = orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
End If
End Sub
1 like
@ D.Roger :
Het is gewoon perfect.
Een grote dank u zult ons kostbare tijd besparen (en ook aan al diegenen die de fout hebben gemaakt om hoge schaalfactoren op hun SW-materialen te plaatsen).
We hebben echter nog steeds één probleem (zolang SW de bug niet heeft opgelost: SPR 476546 die sinds 2014 open is in High Impact ...): Op onze Europarlementariërs lijken delen met een effen arceringspatroon (dus degene die ik je heb gevraagd aan te passen...) transparant in plaats van uniform zwart. Om het probleem te omzeilen, moet u een van de witte gearceerde gebieden selecteren (in plaats van zwart), met de rechtermuisknop klikken en het selectievakje "Materiaal arcering" uitschakelen. Vreemd genoeg kun je hierdoor het effen zwarte patroon op de las aanbrengen. En dit moet worden gedaan op alle aanzichten en alle gearceerde delen in de vlakte van de tekening.
Denkt u dat het in staat zou zijn om een macro te maken om deze deselectie automatisch uit te voeren op alle standpunten van de Europarlementariër (hetzij door te gaan zoeken naar de materialen uit de lijst die u al hebt gebruikt, hetzij door alle materialen te gaan zoeken die zijn 'verenigd' als een soort arcering)??
Deze macro zal ook nuttig zijn voor al diegenen die het stomme idee hebben om gewone arceringen te gebruiken voor hun lassen (SW heeft het heel goed gedaan omdat ze erin geslaagd zijn om 2 bugs te creëren die het onmogelijk maken om lassen op een MEP te maken zonder hoofdpijn te krijgen: als het verenigd is, Je ziet het uitkomen niet, als het een broedsel is met een sterke schaalfactor, je tekening knarst en je staat op het punt zelfmoord te plegen...).
capture_hachures.jpg
Hallo
Op het eerste gezicht is het een beetje ingewikkeld omdat de methode "GetFaceHatchCount" een null-waarde retourneert voor gewone arceringen van materialen die transparant lijken , ik zal het probleem af en toe onderzoeken, maar als ik wat meer tijd heb.
Vriendelijke groeten
@ d.roger : Nogmaals bedankt.
Ik sluit dit onderwerp.
Ik zal er uiteindelijk een heropenen als je een oplossing kunt vinden voor dit probleem van transparante effen arcering op tekeningen om deze nieuwe macro met de gemeenschap te delen.
Het is inderdaad mogelijk dat het niet zo eenvoudig is (anders had SW deze SPR met hoge klantenimpact misschien in 6 jaar opgelost...).