पर एक स्ट्रिंग भेज रहा है, मैं वर्तमान में एक नए सॉलिडवर्क्स कार्य-फलक पर काम कर रहा हूं, जो अधिकतर "पुराने" मैक्रोज़ को लागू करता है जो मैंने एक अधिक सुविधाजनक प्रारूप में लिखा है। इनमें से कुछ को टेक्स्ट बॉक्स के माध्यम से उपयोगकर्ता इनपुट की आवश्यकता होती है जिसे मैं कार्य-फलक में शामिल करना चाहता हूं।सॉलिडवर्क्स सी # एडिन - एक मैक्रो
समस्या यह है, मैं एक खरोंच फ़ाइल लेखन का एक तरीका नहीं मिल रहा है या मेरे मैक्रो में इन तार (जो मैं नहीं बल्कि पुनर्लेखन के लिए समय नहीं ले चाहते हैं)
आयात करने के लिए इन भेजने के लिए किसी भी अन्य रास्ता नहीं है मेरे मैक्रोज़ के लिए तार? एडिन सी # में है, और मैं वर्तमान में सॉलिडवर्क्स "रनमैक्रो 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
मुझे उम्मीद है कि इससे मदद मिलती है, और यह भ्रमित नहीं है।
आप "रनमैक्रो" को कॉल करते समय तर्क जोड़ नहीं सकते हैं, लेकिन आप सी # के साथ कस्टम गुण लिख सकते हैं और प्रक्रिया की शुरुआत में वीबीए में गुण पढ़ सकते हैं। उममीद है कि इससे मदद मिलेगी। –
शायद समस्या को बेहतर ढंग से समझने के लिए कुछ न्यूनतम नमूना कोड की आवश्यकता होगी। –
एडिन से नमूना कोड, या मैक्रो से मैं डेटा भेजने की कोशिश कर रहा हूं? – Nick