rodamientos proyectos planos piezas para macro los librerias gratis graficos ensambles ensamblajes donde dibujos descargar complementos complemento colocar 3dcontent c# vba add-in solidworks

c# - planos - proyectos en solidworks para descargar



Complemento Solidworks C#- EnvĂ­o de una cadena a una macro (1)

Solidworks admite 2 tipos de archivos de macro VB

  • swp - versión más reciente
  • swb - macro antigua de texto plano, aquí hay un ejemplo de la macro swb vacía:

    Dim swApp As Object Dim swModel As SldWorks.ModelDoc2 Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc End Sub

Si tiene acceso al código fuente de sus macros, puede convertirlas a texto sin formato y dejarlas en marcadores de posición.

MsgBox "--MyParameter1--"

Después de que el usuario complete los parámetros en su panel de tareas, reemplace los marcadores de posición en la macro de swb con los valores reales y ejecútelos.

Actualmente estoy trabajando en un nuevo panel de tareas de Solidworks, principalmente implementando algunas macros "antiguas" que he escrito en un formato más conveniente. Algunos de estos requieren la entrada del usuario a través de cuadros de texto que me gustaría incluir en el panel de tareas.

El problema es que no puedo encontrar una forma de escribir un archivo de borrador o importar estas cadenas en mis macros (que prefiero no tomarme un tiempo para reescribir)

¿Hay alguna otra forma de enviar estas cadenas a mis macros? Addin está en C #, y actualmente estoy usando el método "RunMacro2" de Solidworks.

¡Gracias!

EDITAR: Agregar algunos fragmentos de código a continuación. La macro principal en cuestión está destinada a propagar archivos de propiedad personalizados en un ensamblaje completo.

namespace Efficiency_Interface { [ComVisible(true)] [ProgId(ProjMan_Tab_PROGID)] public partial class Project_Management_Tab : UserControl { SwAddin SolidRun = new SwAddin(); public const string ProjMan_Tab_PROGID = "Proj Management"; public const string scratchFile = "C://keyStoneAddinScratch.txt"; StreamWriter writeText = new StreamWriter(scratchFile); public Project_Management_Tab() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { foreach (var textBox in this.Controls.OfType<TextBox>()) { writeText.WriteLine(textBox.Text); } writeText.Close(); SolidRun.runGen("proc"); } } }

Lo anterior es el código base para mi panel de tareas. A continuación se muestra el fragmento de código de mi principal clase de complemento, también contiene el código de uno de mis otros botones.

public void runCreate4Pack() { iSwApp.RunMacro2(macroPath + "CREATE 4 SIZE PACKAGE.swp", "", "", 0, out runMacroError); return; } public void runGen(string procName) { iSwApp.RunMacro2(macroPath + "Efficiency Interface.swp", "hitButton", procName, 0, out runMacroError); File.Delete("C://Users//Public//keyStoneAddinScratch.txt"); return; }

Finalmente, es el código principal de la macro con la que trato de interactuar.

Private Sub fillProps_Click() Dim doneParts() As Variant Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set part = swApp.ActiveDoc If firstAssem = "" Then referenceList (0) End If i = 0 ReDim Preserve doneParts(1) Set custPropMgr = part.Extension.CustomPropertyManager(part.GetActiveConfiguration.name) setProps "", "", "" While i <= 1000 And Not assemComps(i, j) = "" parentAssemNum = Left(assemComps(i, 0), InStrRev(assemComps(i, 0), ".") - 1) parentAssemDesc = assemComps(i, 1) j = 2 While j <= 10000 And Not assemComps(i, j) = "" k = 0 While k < UBound(doneParts()) If doneParts(k) = assemComps(i, j) Then GoTo skipEntry End If k = k + 1 Wend Set part = swApp.ActivateDoc3(assemComps(i, j), True, 1, 1) If part.GetType = 1 Then Set swpartdoc = part End If If InStr(part.IGetActiveConfiguration.name, "Default") > 0 Then Set custPropMgr = part.Extension.CustomPropertyManager("") End If Debug.Print custPropMgr.Get("Description") setProps parentAssemNum + "", parentAssemDesc + "", "" ReDim Preserve doneParts(UBound(doneParts) + 1) doneParts(UBound(doneParts)) = assemComps(i, j) If i > 0 Or j > 0 Then swApp.QuitDoc (assemComps(i, j)) End If skipEntry: j = j + 1 Wend i = i + 1 Wend End Sub Sub setProps(parentAssemNum As String, parentAssemDesc As String, stockSize As String) If custPropMgr.Get("StockSize") = "" Then If part.GetType = swDocPART Then If swpartdoc.IsWeldment = False Then Dim sizeArray(2) vboundbox = swpartdoc.GetPartBox(False) size1 = Round(Abs(vboundbox(0) - vboundbox(3)), 2) size2 = Round(Abs(vboundbox(1) - vboundbox(4)), 2) size3 = Round(Abs(vboundbox(2) - vboundbox(5)), 2) sizeArray(0) = size1 sizeArray(1) = size2 sizeArray(2) = size3 rectVol = size1 * size2 * size3 Set swmass = part.Extension.CreateMassProperty swmass.UseSystemUnits = False swVol = swmass.Volume QuickSort sizeArray, LBound(sizeArray), UBound(sizeArray) eq = 0 If size1 = size2 Then eq = 1 cylVol = 3.14159 * ((size1 / 2) * (size1 / 2)) * size3 End If If size1 = size3 Then eq = 1 cylVol = 3.14159 * ((size1 / 2) * (size1 / 2)) * size2 End If If size3 = size2 Then eq = 1 cylVol = 3.14159 * ((size2 / 2) * (size2 / 2)) * size1 End If If eq = 1 Then If Abs(swVol - cylVol) < Abs(swVol - rectVol) Then boolstatus = custPropMgr.Set("StockSize", "ROUND BAR, " & size2 & " OD X " & size3 & "LG") End If If Abs(swVol - rectVol) < Abs(swVol - cylVol) Then ''If size3 > size2 Then boolstatus = custPropMgr.Set("StockSize", size2 & " SQ X " & size3 & "LG") ''End If ''If size3 < size2 Then '' boolstatus = custPropMgr.Set("StockSize", "PLATE," & size2 & " SQ X " & size3 & "LG") ''End If End If If Abs(swVol - cylVol) = Abs(swVol - rectVol) Then ''If size3 > size2 Then boolstatus = custPropMgr.Set("StockSize", "BAR, " & size2 & " X " & size3 & "LG") ''End If ''If size3 < size2 Then '' boolstatus = custPropMgr.Set("StockSize", "PLATE," & size2 & " SQ X " & size3 & "LG") ''End If End If End If If eq = 0 Then boolstatus = custPropMgr.Set("StockSize", sizeArray(2) & " X " & sizeArray(1) & " X " & sizeArray(0)) End If End If End If End If If Len(custPropMgr.Get("DATE")) = 0 Then boolstatus = custPropMgr.Set("Date", Left(Now, InStrRev(Now, "/") + 4)) End If boolstatus = custPropMgr.Set("Workorder", Interface.workorder.Text) boolstatus = custPropMgr.Set("Plant", Interface.plantBox.Text) boolstatus = custPropMgr.Set("AssemblyNumber", parentAssemNum) boolstatus = custPropMgr.Set("Line2", parentAssemDesc) boolstatus = custPropMgr.Set("Line3", Interface.projBox.Text) If Len(custPropMgr.Get("Finish")) = 0 Then ''boolstatus = custPropMgr.Set("Finish", Interface.finish.Text) End If If Len(custPropMgr.Get("DesignBy")) = 0 Then ''boolstatus = custPropMgr.Set("DesignBy", Interface.creator.Text) End If If Len(custPropMgr.Get("DrawnBy")) = 0 Then ''boolstatus = custPropMgr.Set("DrawnBy", Interface.creator.Text) End If End Sub

Espero que esto ayude, y no es demasiado confuso.