我目前正在开发一个新的Solidworks任务窗格,主要实现一些我用更方便的格式编写的"旧"宏.其中一些需要通过文本框进行用户输入,我希望将其包含在任务窗格中.
问题是,我找不到编写临时文件或将这些字符串导入我的宏的方法(我宁愿不花时间重写)
有没有其他方法将这些字符串发送到我的宏?Addin在C#中,我目前正在使用Solidworks"RunMacro2"方法.
谢谢!
编辑:在下面添加一些代码片段.有问题的主要宏是用于在整个程序集中传播自定义属性文件.
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
以上是我的任务窗格的基本代码.下面是我的主要插件类的代码片段,它还包含我的其他按钮的代码.
public void runCreate4Pack()
{
iSwApp.RunMacro2(macroPath + "CREATE 4 SIZE PACKAGE.swp", "", "", 0, …Run Code Online (Sandbox Code Playgroud) 目前,我正在使用创建SolidWorks插件来导出OBJ格式的3D模型.
OBJ打开并且格式非常简单
我用Google搜索并找到了有关现有解决方案的以下信息:有几个付费插件和一个免费,称为"免费OBJ导出器"
它被视为一个基础.但它不会导出贴花.
贴图是您在主要纹理上绘制的图像(如果您远离SolidWorks的上下文,在3D编程中它就像子弹,血滴等标记)
出口贴花是该项目的重要组成部分.
我将所有VBA代码重写为C#.
现在我来处理出口贴花的问题.文档Solidworks API相当差.
在阅读文档和LinkedIn上的几个问题一周后,我发现了以下内容:
IDecal是从类继承的IRendererMaterial.因此,我可以获得所有贴花的列表并获得以下信息:
我也可以得到一个IFace2对象列表并获取FaceDecalProperties.
IFaceDecalProperties 提供下一个信息:
TextureTranslationUTextureTranslationVTextureTranslationXTextureTranslationYTextureUScaleTextureVScale它是什么,它代表什么以及如何使用它我不知道.
OBJ格式不支持直接贴花.
如何在一个文件中将此参数用于连接纹理和贴图?我想在脸上渲染贴花并解决Z-fighting的问题,因为我没有渲染器的源代码.
首先注意我的计算机上没有安装solidworks,但是将这些文件用于项目.
Solidworks能够为文件属性创建自定义选项卡.在此选项卡中,您可以找到有关在solidworks中制作的模型(零件)的所有类型的信息.
我读出了所有这些信息并将其存储在一个.txt文件中.在此信息中,您可以找到我的问题所在的零件的材料类型.
我知道材质类型,但在solidworks中,用户也可以指定custom materials自定义属性中定义的材质.例如,材料只是普通木材,但用户希望这种木材是粉红色的.
是否可以读出custom materials附加到自定义属性中的材料?
我遇到了一种奇怪的情况,即以特定的方式在C#字典上使用getter会产生一个参数异常,即使这种情况永远不会发生.问题似乎只发生在我的电脑上.
实际上我已经找到了解决原始问题的替代工作方案.但是,我真的想要解释为什么原始解决方案不起作用.
我有一个在Addin for Solidworks中使用的字典.它跟踪打开的文档及其事件处理程序.它定义如下:
private Dictionary<ModelDoc2, DocumentEventHandler> _openDocs = new Dictionary<ModelDoc2, DocumentEventHandler>();
Run Code Online (Sandbox Code Playgroud)
Solidworks的有方法来检索活动文档.当我尝试使用它来检索活动文档的事件处理程序时,如下所示:
_openDocs[SwApp.ActiveDoc]
Run Code Online (Sandbox Code Playgroud)
我得到这个ArgumentException:
System.ArgumentException: 'Method 'SWAddIn.DocumentEventHandler
get_Item(SolidWorks.Interop.sldworks.ModelDoc2)' declared on type
'System.Collections.Generic.Dictionary`2[SolidWorks.Interop.sldworks.ModelDoc2,SWAddIn.DocumentEventHandler]' cannot be called with instance of type
'System.Collections.Generic.Dictionary`2[SolidWorks.Interop.sldworks.ModelDoc2,SWAddIn.DocumentEventHandler]''
Run Code Online (Sandbox Code Playgroud)
我找到的替代解决方案是简单地将活动文档绑定到变量,如下所示:
ModelDoc2 activedoc = SwApp.ActiveDoc;
_openDocs[activedoc]
Run Code Online (Sandbox Code Playgroud)
如果有人能帮助我理解这将是伟大的!
一些额外的信息:
根据文档"ActiveDoc"应该返回一个"对象",但intellisense告诉我它是一个动态的
如上所述,它只发生在我的机器上,所以我猜它在某种程度上是环境的
不起作用的代码片段直接来自Solidworks的示例文件.
ModelDoc2在名为SolidWorks.Interop.sldworks的程序集中定义,具有以下定义:
[CoClass(typeof(ModelDoc2Class))]
[Guid("B90793FB-EF3D-4B80-A5C4-99959CDB6CEB")]
public interface ModelDoc2 : IModelDoc2
Run Code Online (Sandbox Code Playgroud)
如果感兴趣,这是来自excpetion的堆栈跟踪:
at System.Linq.Expressions.Expression.ValidateCallInstanceType(Type instanceType, MethodInfo method)
at System.Linq.Expressions.Expression.ValidateAccessor(Expression instance, MethodInfo method, ParameterInfo[] indexes, ReadOnlyCollection`1& arguments)
at System.Linq.Expressions.Expression.ValidateIndexedProperty(Expression instance, PropertyInfo property, ReadOnlyCollection`1& argList)
at System.Linq.Expressions.Expression.Property(Expression instance, …Run Code Online (Sandbox Code Playgroud) 我在C#中使用的插件中有两个不同的功能.最近(显然)Solidworks在到达这两个函数的某些部分时可能会崩溃(可能更多,但是到目前为止我发现它只有两个.)在调试下,这两个函数都给我一个"内存访问违规"错误".每次在关闭活动文档的行上都会发生此错误,大约95%的时间都会发生此错误.
它几乎总是在同一个部分.它似乎与运行时间或已打开和关闭的部件数量无关.如果我不关闭文件,我似乎没有得到错误.但是在运行大型装配时,会出现问题.在关闭之前添加1s等待似乎可以减少错误的频率(因为,我可以偶尔通过整个程序集而没有错误)
快速解释我主要关注的功能是什么; 它从组件的顶层开始工作,将自定义属性从主组件和子组件传播到它们的子组件中.所以我不断打开和关闭不同的装配和零件文件.
下面的代码已被删除,几乎是复制错误的最低限度.错误发生在第59行.从目前为止我在网上看到的,似乎这些很难追查.任何帮助是极大的赞赏.
public void propagateProps(bool overwrite)
{
List<string> assemblies = new List<string>();
string topAssem;
string compName = "";
int i = 0;
int j = 0;
int errors = 0, warnings = 0;
int partType = 1;
swModel = iSwApp.ActiveDoc;
if (swModel == null)
{
MessageBox.Show("No assembly document open. Please open an assembly and try again.", "Avengers Assemble Error");
return;
}
if (swModel.GetType() != 2)
{
MessageBox.Show("No assembly document open. Please open an assembly and try again.", …Run Code Online (Sandbox Code Playgroud) 随着SolidWorks 2016的启动,DassaultSystèmes推广了一个新的Web门户,该门户可将Edrawings模型嵌入到网页中:3dcontentcentral.com。他们的Web 3D查看器使用WebGL在浏览器窗口中显示模型(您可以在此处找到一个实时示例)。此外,还可以将iframe与查看器一起嵌入,以将其嵌入到另一个网页中,如下所示:
<iframe scrolling='no' frameborder='0' allowfullscreen='true'
src='http://www.3dcontentcentral.com/external-site-embed.aspx?format=3D&catalogid=364&modelid=1254&width=250&height=250&edraw=true'
name='PreviewFrame3D' id='PreviewFrame3D' width='400' height='355'>
</iframe>
<br/>
<a href='http://www.3dcontentcentral.com/download-model.aspx?catalogid=364&id=1217'>
Download</a>
Run Code Online (Sandbox Code Playgroud)
在最后的结果是一样的东西如下:
因此,有没有机会以相同的方式导出3D模型(零件)并嵌入为WebGL,而无需上传到3D Content Central网站?如果有任何帮助,我也可以访问Edrawings / SolidWorks SDK(2015)。
每个安装的操作系统中都有很多内置的ThumbnailProviders.由于这些提供程序Windows可以显示许多文件的缩略图.例如,Windows资源管理器可以显示*.jpg文件的内容,但也可以显示Solidworks*.sldprt文件的内容(如果安装了SolidWorks).
但有没有办法获得这些缩略图?我曾尝试使用Windows API CodecPack来管理它,但我仅在Windows 7上成功.
ShellFile shellFile = ShellFile.FromFilePath(filePath);
Bitmap shellThumb = shellFile.Thumbnail.Bitmap;
Run Code Online (Sandbox Code Playgroud)
问题是:在Windows XP/Vista上是否有任何其他可用的方法来获取已注册缩略图提供程序的任何文件的缩略图?我真的很绝望......
我有一个在32位和64位操作系统上运行的ac#应用程序.在我的应用程序中,如何以编程方式检查solidworks是否已安装在计算机上.如果我们可以通过读取注册表项来检查它,那么为我提供路径对于32位和64位.请告诉我,如果有其他方法也可以检查它.
我正在尝试使用IEdmEnumeratorVariable5::SetVar基于用户输入的一些文件卡变量更新到Windows窗体.我的代码执行,没有错误消息,文件已签出并重新签入,并将相应的注释添加到历史记录中; 但是卡上的变量不会更新.
我已经通过在运行时逐步执行代码验证所有变量都填充了正确的(如预期的)数据.该SetVar程序的所有熄灭顺利,但在数据卡上的变量不发生改变价值-即使手动刷新文件夹视图没有影响.
以下是我的代码.
这是一个加载项应用程序,使用VS Community 2015在VB中编写为类库项目,目标框架为.NET 4.0.
努力使这个问题更简洁; 紧接着下面我只包含了设置变量工作的代码片段,然后我还包含了更多代码,以便您可以根据需要获得整个图片.
这是设置变量工作的代码:
Dim UserManager As IEdmUserMgr5 = .SourceVault
Dim User As IEdmUser5 = UserManager.GetLoggedInUser
CardComment = UserComment & CardComment
CardDate = Today().ToString("yyMMdd", Globalization.CultureInfo.InvariantCulture)
CardBy = User.Name
CardDisposition = UserDisposition
CardVariables.SetVar(DispositionVariable, "@", CardDisposition)
CardVariables.SetVar(CommentVariable, "@", CardComment)
CardVariables.SetVar(ByVariable, "@", CardBy)
CardVariables.SetVar(DateVariable, "@", CardDate)
CardVariables.Flush()
Run Code Online (Sandbox Code Playgroud)
类模块级变量:
Private Structure CommandInfo
Dim SourceVault As IEdmVault11
Dim SourceCommand As EdmCmd
Dim SourceSelection As System.Array
Dim TargetTemplate As System.String
Dim VerifiedPaths …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用统一游戏引擎编写一个简单的国际象棋游戏.但是,我无法弄清楚如何将我在Solidworks中创建的资产导入Unity.
有可能吗?