Insérer un bloc SolidWorks à des coordonnées XY via VBA

J’essaie de créer une macro VBA pour insérer des blocs dans le fond de plan d’une mise en plan SolidWorks. Mon code actuel insère le bloc par défaut dans le coin inférieur gauche. Comment puis-je prédéfinir sa position en X et Y dans le code ?

Le problème vient du premier argument de la méthode MakeSketchBlockFromFile, qui attend un objet IMathPoint pour définir la position d’insertion, et non Nothing. Pour contrôler la position, il faut créer un point mathématique avec les coordonnées souhaitées.

  1. Initialisez l’environnement SolidWorks et accédez au document actif, ainsi qu’à l’utilitaire mathématique :
    Dim swApp As SldWorks.SldWorks
    Dim Part As SldWorks.ModelDoc2
    Dim swMathUtil As SldWorks.MathUtility
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    Set swMathUtil = swApp.GetMathUtility
    
  2. Passez en mode d’édition du fond de plan (Part.EditTemplate) puis en mode d’édition d’esquisse (Part.EditSketch) pour pouvoir insérer le bloc :
    Part.EditTemplate
    Part.EditSketch
    
  3. Définissez les coordonnées X et Y de votre point d’insertion. L’API SolidWorks utilise les mètres par défaut pour les coordonnées :
    Dim nPt(2) As Double
    nPt(0) = 0.060 ' Exemple: 60 mm en X
    nPt(1) = -0.060 ' Exemple: -60 mm en Y
    nPt(2) = 0.0 ' La coordonnée Z doit être 0 pour une esquisse 2D
    Dim vPt As Variant
    vPt = nPt ' Convertir le tableau en Variant pour la méthode CreatePoint
    
  4. Créez un objet IMathPoint à partir de ces coordonnées en utilisant swMathUtil.CreatePoint(vPt) :
    Dim swMathPoint As SldWorks.MathPoint
    Set swMathPoint = swMathUtil.CreatePoint(vPt)
    
  5. Insérez le bloc en utilisant cet objet swMathPoint comme premier argument de MakeSketchBlockFromFile :
    Dim myBlockDefinition As Object
    Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile(swMathPoint, "D:\_MAIA\1_MODELES\4_BLOCS-TAMPONS\Tol ISO2768 - EN22768 - mK.SLDBLK", False, 1, 0)
    
  6. Quittez les modes d’édition du fond de plan (Part.EditSheet) et d’esquisse (Part.EditSketch) :
    Part.EditSheet
    Part.EditSketch
    Part.ClearSelection2 True ' Facultatif, pour désélectionner
    

Alternative : Si la gestion de la position par macro n’est pas impérative, vous pouvez modifier le point d’ancrage par défaut directement dans la définition de votre fichier de bloc (.SLDBLK) ou dans votre modèle de mise en plan. Cette méthode est moins dynamique mais peut suffire pour des besoins statiques.