SolidWorks et les normes: un retard considérable

Salutations les SolidWorkers !

J’ouvre ce sujet car il y a de mon côté des questions qui reviennent de plus en plus souvent à propos de SolidWorks et auxquelles je suis bien trop souvent (pour ne pas dire toujours) obliger de répondre par la négative.

Ces questions peuvent être généralisées avec la formule suivante :

Comment, avec SolidWorks, puis-je annoter/coter mon plan selon les normes en vigueur ?

Force est de constater que SolidWorks est clairement à la traine sur ce point.
Entre les symboles qui manquent (ex. ISO 25178, ISO 10135, ISO 13715, entre autres), les options d’affichage non conformes (ISO 124-24:2014), les combinaisons d’annotations impossibles (attacher un symbole d’état de surface sur un cadre de tolérance géométrique (ISO 1302-ISO 1101), les classes de filetages ISO manquantes, les composants de la toolbox dont les dimensions ne sont pas conformes (Heureusement CAD BOOSTER est là)…

Il a fallu près de 4 ans à SolidWorks et de nombreuses réclamations pour implémenter l’ISO 21920-1 disponible dans avec la version 2025.

On va en arriver doucement mais sûrement à utiliser ce point comme levier de négociation auprès de notre VAR lors du prochain renouvellement histoire de l’amener à faire valoir notre droit à un logiciel conforme étant donné sont prix…

Est-ce que d’autres (entreprises, utilisateurs) souffrent autant de ces manques et écarts dans ce logiciel ?

6 « J'aime »

« Solidworks et les normes ; l’énorme retard »

4 « J'aime »

Je note que tu n’as pas osé parler des normes GPS. :grinning:
L’ISO 14638:2014 est une norme ISO GPS de base.

1 « J'aime »

Si il y a la 21920

1 « J'aime »

t’est trop fort :slight_smile:

1 « J'aime »

Et encore : il a fallu plus de dix ans et 3 ou 4 SR pour qu’ils corrigent des erreurs de pas sur des filetages métriques pas hyper courant (dont le M33 de mémoire) : le pas donné par Solidworks n’était pas conforme au pas ISO.

1 « J'aime »

C’est pour ça qu’on l’aime :crazy_face:

2 « J'aime »

Visiblement peu, voire pas, de Représentant de BE se sentant en défaut sur ce sujet dans l’utilisation de SolidWorks…

Dommage: j’espérait vraiment faire évoluer le sujet vers la recherche de moyens pour faire remonter ce problème auprès de l’éditeur de manière plus efficace qu’à travers leur TTL (avec laquelle eux-mêmes doivent être certainement perdu), peut-être même inclure qqn de Visiativ dans cette discussion.

Je fermerai le sujet d’ici la fin du mois si les réponses collectées n’évoluent pas ou si les nouvelles tendent à confirmer que ce défaut d’alignement avec le normes n’est globalement pas un problème.

3 « J'aime »

Bonjour;

Je pense que nous avons à faire plus à une forme de renoncement face à l’immobilisme des éditeurs logiciels sur ce sujet.
Coté logiciel justement je pense que la perspective des éditeur de payer plusieurs milliers d’€uros ou de Dollar$ pour acheter des normes tous les ans pour les appliquer avec une année de retard sur leurs logiciel n’est pas très « banquable ».

Il n’y a qu’à regarder les tarifs de l’Afnor pour se rendre compte des sommes à engager pour s’en rendre compte (je viens même de découvrir qu’ils vendent, par abonnement, un système de « décryptage » de leurs propres normes).

Multipliez ces sommes par la quantité de normes par pays puis par le nombre de pays, d’organisations, de commissions … c’est exorbitant et sans fin.

Ceci dit, Solidworks devrait faire un effort pour nous proposer un éditeur digne de se nom pour les symboles et en s’appuyant sur la communauté il serait possible d’avoir un catalogue digne de ce nom plutôt rapidement.

parce-que … franchement :

; Format:
;;
;; #<Name of library>,<Description of library>
;; *<Name of symbol>,<Description of symbol>
;; A,LINE xStart,yStart,xEnd,yEnd
;; A,CIRCLE xCenter,yCenter,radius
;; A,ARC xCenter,yCenter,radius,startAngle,endAngle
;; A,SARC xCenter,yCenter,radius,startAngle,endAngle
;; A,TEXT xLowerLeft,yLowerLeft,<letter(s)>
;; A,POLY x1,y1,x2,y2,x3,y3
;; A,BOUND x1,x2
;;
;; Units:
;;
;; All x, y, and radius values are in the symbols grid space (0.0 to 1.0),
;; where 0,0 is the lower left corner and 1,1 is the upper right corner.
;; The grid space is considered to be the height of a character squared.
;; All angle values are in degrees.

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

Ce n’est pas très user fiendly…
(source)

Donc, et bien … oui, coté Représentant BE, faute de mieux, on fait avec…mais on ne seraient pas contre le fait d’avoir un plus…

4 « J'aime »

Idée d’amélioration soumise il y a 2 ans maintenant : Symbol creation tool

Vous pensez qu’ils le prendraient mal si je rédigeais une demande d’amélioration comme suit ?

Dépenser moins d’argent dans vos évènements 3DExperience World pour investir dans les normes et maintenir votre logiciel à jour.

4 « J'aime »

Bonjour,

Je pense que SW n’est pas le seul logiciel à avoir ce problème. Je suis un peu du même avis que @Maclane concernant le coût des normes qu’il faut suivre pour une rentabilité faible pour l’éditeur (il y a tellement de spécificités en fonction des métiers).
A mon sens ils ont mis le plus « standard » (spécifications géométriques, états de surface et symboles de soudure) après effectivement manque quelques symboles (arêtes de formes non définies) mais je ne suis pas certain que la totalité des principes ISO GPS soient appliqués dans la cible des sociétés utilisant SW ciblées par DS.

3 « J'aime »

Hummm :thinking: :thinking:… pas sûr …mais attention, ils sont susceptibles tout de même.
Et puis … il n’y a qu’un seul moyen pour le savoir. :laughing: :laughing: :laughing:

Je vais faire du limite hors sujet …

Perplexity me propose un script Python (avec la bibliothèque ezdxf) qui serait censé pouvoir convertir un fichier DXF en symbole utilisable avec la bibliothèque Solidworks *.sym:

import ezdxf

# Fonction pour normaliser une valeur selon l'étendue min-max à l'intervalle [0,1]
def normalize(value, min_val, max_val):
    return (value - min_val) / (max_val - min_val) if max_val > min_val else 0.0

# Fonction principale de conversion DXF -> fichier .sym
def dxf_to_sym(dxf_path, sym_path):
    # Charger le fichier DXF
    dwg = ezdxf.readfile(dxf_path)
    msp = dwg.modelspace()

    # Récupérer toutes les coordonnées (x,y) pour une normalisation correcte
    coords_x = []
    coords_y = []
    for e in msp:
        if e.dxftype() == 'LINE':
            coords_x.extend([e.dxf.start.x, e.dxf.end.x])
            coords_y.extend([e.dxf.start.y, e.dxf.end.y])
        elif e.dxftype() in ('CIRCLE', 'ARC'):
            coords_x.append(e.dxf.center.x)
            coords_y.append(e.dxf.center.y)
        elif e.dxftype() == 'TEXT':
            coords_x.append(e.dxf.insert.x)
            coords_y.append(e.dxf.insert.y)

    # Définir les bornes min et max
    min_x, max_x = min(coords_x), max(coords_x)
    min_y, max_y = min(coords_y), max(coords_y)

    with open(sym_path, 'w', encoding='utf-8') as file:
        file.write(";; Bibliothèque de symboles générée automatiquement\n")
        file.write("#MySymbols, Bibliothèque personnelle\n")

        # Parcourir les entités pour exporter en format .sym
        for e in msp:
            if e.dxftype() == 'LINE':
                x1 = normalize(e.dxf.start.x, min_x, max_x)
                y1 = normalize(e.dxf.start.y, min_y, max_y)
                x2 = normalize(e.dxf.end.x, min_x, max_x)
                y2 = normalize(e.dxf.end.y, min_y, max_y)
                file.write(f"*LineSymbol,Ligne simple\n")
                file.write(f"A,LINE {x1:.3f},{y1:.3f},{x2:.3f},{y2:.3f}\n")

            elif e.dxftype() == 'CIRCLE':
                cx = normalize(e.dxf.center.x, min_x, max_x)
                cy = normalize(e.dxf.center.y, min_y, max_y)
                # Normalisation du rayon approximative selon largeur (ajustable)
                r = e.dxf.radius / (max_x - min_x) if max_x != min_x else 0
                file.write(f"*CircleSymbol,Cercle simple\n")
                file.write(f"A,CIRCLE {cx:.3f},{cy:.3f},{r:.3f}\n")

            elif e.dxftype() == 'ARC':
                cx = normalize(e.dxf.center.x, min_x, max_x)
                cy = normalize(e.dxf.center.y, min_y, max_y)
                r = e.dxf.radius / (max_x - min_x) if max_x != min_x else 0
                start_angle = int(e.dxf.start_angle)
                end_angle = int(e.dxf.end_angle)
                file.write(f"*ArcSymbol,Arc simple\n")
                file.write(f"A,ARC {cx:.3f},{cy:.3f},{r:.3f},{start_angle},{end_angle}\n")

            elif e.dxftype() == 'TEXT':
                x = normalize(e.dxf.insert.x, min_x, max_x)
                y = normalize(e.dxf.insert.y, min_y, max_y)
                text = e.text.replace(',', '')  # enlever virgules
                file.write(f"*TextSymbol,Texte simple\n")
                file.write(f"A,TEXT {x:.3f},{y:.3f},<{text}>\n")

if __name__ == "__main__":
    dxf_to_sym('votre_fichier.dxf', 'symboles.sym')

Explications :

ezdxf charge et lit les entités 2D du fichier DXF à partir du "modelspace".

On collecte toutes les coordonnées X et Y de toutes les entités pour calculer les bornes min/max, ce qui permet de normaliser chaque coordonnée entre 0 et 1. Cette normalisation est nécessaire car SolidWorks attend des coordonnées relatives dans la grille de symbole.

On traite les types essentiels : LINE, CIRCLE, ARC, TEXT ; pour chacun, on écrit une ligne dans le format lisible par SolidWorks.
Le rayon d’un cercle ou d’un arc est normalisé aussi, approximativement selon la largeur du dessin.
Le texte est nettoyé pour éviter les virgules incompatibles.
Le fichier .sym produit peut être ajouté à la bibliothèque de SolidWorks et utilisé directement.

Et c’est là que je m’arrête … à ce jour je n’ai jamais utilisé/créé de script Python et suis, pour l’instant, incapable d’interpréter ou d’évaluer la pertinence de ce script.
De plus il s’agit d’un « direct from IA (Perplexity) » avec tous les problèmes inhérent à ce postulat.
Si des plus téméraires que moi souhaitent tester ce script et bien … merci et bonne chance…

2 « J'aime »

Si ça marche direct pondu d’IA c’est beau.

2 « J'aime »

Bonjour @Maclane
Je pense qu’il devrait être possible d’adapter ce script en vba pour convertir une esquisse SW en symbole.

Pour l’année 2024, Dassault Systèmes a réalisé un chiffre d’affaires de 6,21 milliards d’euros, en hausse de 5% à taux de change constants, et un bénéfice net de 1,2 milliard d’euros, en hausse de 14% par rapport à 2023.

Finalement le coût des normes peut-il vraiment être une excuse ?

D’autre part, en se mettant dans la peau d’un entrepreneur (peut-être un peu fou) qui veut se placer sur ce marché avec un nouveau logiciel de CAO, toutes ces normes, ( leur intégration et leur maintient) ne sont-elles pas des données d’entrée pour concevoir un tel logiciel ?

2 « J'aime »

Je ne suis pas vraiment d’accord avec vous sur la problématique, et je trouves que vous avez la dent vraiment dur après Dassault sur le sujet.

Certe, la gestion des normes n’est pas optimum … mais autant partir du postulat qu’elle ne le serra jamais et je pourras de toutes façon jamais l’être. Trop de normes spécifiques à chaque métiers / région de travail.

Parcontre, là où est c’est dommage, c’est qu’en partant de cet état de fait, Solidworks n’est pas pris le parti « d’ouvrir » un peu son logiciel pour que nous puissions implémenter de manière autonome.
Sous Créo, par exemple, la représentation des soudures était vraiment mauvaise : mais le logiciel te laissant la possibilité de pouvoir modifier les symboles comme il te plait, le problème fut vite réglée.

Il me semble être plus pertinent de chercher à se battre de ce côté là plutot que de souhaiter voir l’ensemble des normes présente dans Solidworks :slight_smile:

3 « J'aime »

La solution est simple ; il suffirait que SW puisse accéder aux bases de données des « normalisateurs » pour qu’il permette de charger les normes dont on se sert, y compris les plus récentes ou modifiées, sans qu’il soit nécessaire pour Dassault de mettre à jour SW, comme pour des bibliothèques de modèles et données constructeurs/fournisseurs,

2 « J'aime »

Il me semble qu’il y a moyen de modifier symbole divers via des blocs ? Mais c’est très opaque.
On a bien essayé de mettre deux propriétés dans un bullage, mais impossible de changer la forme. Il y a des possibilités non connues des utilisateurs qui nous permettent de modifier des formes. Mais les aides se limitent à l’utilisation du logiciel.

1 « J'aime »