c# - Solidworks सी#Addin-एक मैक्रो के लिए एक स्ट्रिंग भेज रहा है



vba add-in (1)

सॉलिडवर्क्स 2 प्रकार की वीबी मैक्रो फाइलों का समर्थन करता है

  • swp - नया संस्करण
  • swb - पुराना सादा पाठ मैक्रो, यहां खाली swb मैक्रो का एक उदाहरण है:

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

यदि आपके पास अपने मैक्रोज़ के स्रोत कोड तक पहुंच है तो आप उन्हें सादे पाठ में बदल सकते हैं और प्लेसहोल्डर में छोड़ सकते हैं।

MsgBox "--MyParameter1--"

उपयोगकर्ता के कार्यक्षेत्र पर पैरामीटर में भरने के बाद वास्तविक मूल्यों के साथ एसबीबी मैक्रो में प्लेसहोल्डर्स को प्रतिस्थापित करें और इसे चलाएं।

मैं वर्तमान में एक नए सॉलिडवर्क्स कार्य-फलक पर काम कर रहा हूं, जो अधिकतर "पुराने" मैक्रोज़ को लागू करता है जिसे मैंने एक अधिक सुविधाजनक प्रारूप में लिखा है। इनमें से कुछ को टेक्स्ट बॉक्स के माध्यम से उपयोगकर्ता इनपुट की आवश्यकता होती है जिसे मैं कार्य-फलक में शामिल करना चाहता हूं।

समस्या यह है कि, मुझे स्क्रैच फ़ाइल लिखने या इन मैक्रोज़ में इन तारों को आयात करने का कोई तरीका नहीं मिल रहा है (जिसे मैं फिर से लिखने में समय नहीं लेता)

क्या मेरे मैक्रोज़ में इन तारों को भेजने का कोई और तरीका है? एडिन सी # में है, और मैं वर्तमान में सॉलिडवर्क्स "रनमैक्रो 2" विधि का उपयोग कर रहा हूं।

धन्यवाद!

संपादित करें: नीचे कुछ कोड स्निपेट जोड़ना। प्रश्न में मुख्य मैक्रो, एक संपूर्ण असेंबली में कस्टम प्रॉपर्टी फाइलों का प्रचार करने के लिए है।

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");
        }
    }
}

उपर्युक्त मेरे कार्य फलक के लिए आधार कोड है। नीचे मेरे मुख्य एडिन क्लास से कोड स्निपेट है, इसमें मेरे अन्य बटनों में से एक के लिए कोड भी शामिल है।

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;
}

आखिरकार, मैक्रो से मुख्य कोड है जिसमें मैं इंटरफेस करने की कोशिश कर रहा हूं।

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

मुझे उम्मीद है कि यह मदद करता है, और बहुत भ्रमित नहीं है।





solidworks