在现代开发活动中,项目仓库的访问及其相关操作构成了各项工作的基础。这其中包含了不少需要特别注意的地方,这些问题是大家普遍关注的焦点。
项目仓库访问初体验
PM> Install-Package Du.SolidWorks -Version 0.1.1
启动项目仓库访问可能遇到困难。比如,不同仓库可能有各自的权限配置。某公司项目就设置了多层权限,一般员工只能查阅部分资料。因此,我们得事先弄清楚权限规定。另外,网络状况也会影响访问。在信号不佳的地方,比如偏远山区的临时办公地点,访问可能会变得缓慢,甚至完全无法进行。
为了顺畅地进入项目仓库,掌握其具体位置和登录方法等基本信息是必须的。每个项目仓库都有各自独特的网址,而且登录时可能需要通过账号密码或数字证书进行身份验证。
在线文档查看有讲究
首先,我们要关注在线文档查阅时出现的版本差异问题。比如,文中提到的2016年版帮助文档,其中包含了一些已经过时的API。若完全依照旧版文档的指导,可能会遇到无法执行的情况。在具体的项目实施中,团队成员可能同时使用新旧两个版本的文档,这很容易导致混淆。
///
/// 静默模式打开隐藏文件
///
///
/// 文件路径
/// 是否隐藏 默认隐藏
///
public static ModelDoc2 OpenInvisibleDocClient(this SldWorks app, string filePath, bool Hidden = true)
{
int Errors = -1, Warning = -1;
var type = app.FileType(filePath);
try
{
if (Hidden) app.DocumentVisible(false, (int)type);
ModelDoc2 doc = app.OpenDoc6(filePath, type.SWToInt(), swOpenDocOptions_e.swOpenDocOptions_Silent.SWToInt(),
"", ref Errors, ref Warning) as ModelDoc2;
if (doc == null)
{
throw new Exception(string.Format("errors:{0},warings{1}",
Errors.CastObj().ToString(),
Warning.CastObj().ToString()));
}
return doc;
}
catch (Exception)
{
throw;
}
finally
{
app.DocumentVisible(true, (int)type);
}
}
查阅网络文档时,搜索工具同样关键。尤其在进行规模庞大的项目时,文档资料量极大。以一个大型软件开发项目为例,里面的文档资料多达数万行。若搜索不够方便,寻找所需信息就像在茫茫大海中寻找一根针。
///
/// 判断文件类型
///
///
/// 文件全路径
///
public static swDocumentTypes_e FileType(this SldWorks app, string filePath)
{
string extension = Path.GetExtension(filePath).ToLower();
swDocumentTypes_e type = swDocumentTypes_e.swDocPART;
switch (extension)
{
case ".sldprt":
type = swDocumentTypes_e.swDocPART;
break;
case ".sldasm":
type = swDocumentTypes_e.swDocASSEMBLY;
break;
case ".slddrw":
type = swDocumentTypes_e.swDocDRAWING;
break;
default:
throw new FileFormatException("不支持的文件类型:" + extension);
}
return type;
}
Nuget与打开文档
打开文档用Nuget时,不同的打开方式适用于不同的情况。比如,在api接口里,有些方法专用于打开特定类型的文件。有个设计师在处理图形文件时,用常规方法一直没成功,后来才意识到得用那个特定的api方法来打开这种图形文件格式。
///
/// 以不可见模式打开文档 Open a document invisibly. It will not be shown to the user but you will be
/// able to interact with it through the API as if it is loaded.
///
///
///
/// 是否对用户可见
/// SolidWorks 文件类型 ,默认为零件
///
public static ModelDoc2 OpenInvisibleReadOnly(this ISldWorks sldWorks, string toolFile, bool visible = false, swDocumentTypes_e type = swDocumentTypes_e.swDocPART)
{
try
{
if (!visible)
sldWorks.DocumentVisible(false, (int)type);
var spec = (IDocumentSpecification)sldWorks.GetOpenDocSpec(toolFile);
if (!visible)
{
spec.Silent = true;
spec.ReadOnly = true;
}
var doc = sldWorks.OpenDoc7(spec);
doc.Visible = visible;
return doc;
}
finally
{
if (!visible)
sldWorks.DocumentVisible
(true,
(int)
type);
}
}
判断文档是否开启这一步骤同样至关重要。比如,在处理大量文档时,同一个文档可能需要反复操作。若不先确认其是否已打开,可能会引发操作重复或资源滥用等问题。
新建零件与装配体操作
在应用默认模板生成零件或装配体时,需注意不同环境下的差异。比如,在中文使用场景中,模板文件的命名规则与英文环境有所区别。有一次在产品开发过程中,由于未充分考虑中文环境下的命名变化,结果新创建的零件命名变得杂乱无章。
///
/// 对内存中所有文档进行操作
///
///
///
public static void UsingOpenDoc(this SldWorks swApp, Action action)
{
var docs = (swApp.GetDocuments() as Object[]).Cast();
if (docs == null)
{
return;
}
foreach (var item in docs)
{
action?.Invoke(item);
}
}
创建新文档时常用模板,然而,模板的出处和准确性至关重要。某些小型公司项目里,模板可能会被错误使用或版本不匹配。这时,开发人员需细致辨别。
修改设置需谨慎
///
/// 判断此文档是否打开
///
///
///
///
public static bool HasDocOpened(this SldWorks app, string DocFilePathName)
{
bool exist = false;
app.UsingOpenDoc(d =>
{
if (d.GetPathName() == DocFilePathName)
{
exist = true;
}
}
);
return exist;
}
获取设置选项时,需明确基本步骤。比如,在某个特定接口下,需遵循特定操作。若获取方法有误,后续步骤将受到影响。在自动化测试项目中,若设置选项获取不当,整个测试方案可能需从头开始搭建。
调整配置并恢复至初始状态,旨在保持用户的个性化设置不被干扰。这在众多以用户为中心的软件设计中尤为重要。比如,一款广受欢迎的办公软件,若因调整设置而改变用户既有的使用习惯,很可能会招致众多用户的不满。
///
/// 对活动文档进行操作
///
///
///
public static void UsingActiveDoc(this SldWorks swApp, Action action)
{
if (swApp.ActiveDoc != null)
{
action?.Invoke((IModelDoc2)swApp.ActiveDoc);
}
}
操作中的常见失误
操作过程中可能会出现一些失误。比如,参数的配置不当。举个例子,在一个机械零件的设计项目中,由于在静默模式下打开文档时参数设置错误,结果文档无法顺利打开。
可能存在接口操作失误。比如,在通过API接口处理活动文件时,若调用顺序有误或参数类型不当,便可能造成问题。
///
/// 以默认设置的模板创建文档
///
///
///
///
public static IModelDoc2 CreateDocument(this ISldWorks sldWorks, swDocumentTypes_e type)
{
string templatePath = string.Empty;
switch (type)
{
case swDocumentTypes_e.swDocPART:
templatePath = sldWorks.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplatePart);
break;
case swDocumentTypes_e.swDocASSEMBLY:
templatePath = sldWorks.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplateAssembly);
break;
case swDocumentTypes_e.swDocDRAWING:
templatePath = sldWorks.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplateDrawing);
break;
default:
break;
}
if (!File.Exists(templatePath))
{
templatePath =
Path.GetDirectoryName(templatePath) + "\" +
Path.GetFileName(templatePath).
Replace("零件", "gb_part").
Replace("装配体", "gb_assembly").Replace("工程图", "gb_a1");
}
if (!File.Exists(templatePath))
{
throw new FileNotFoundException("无法找到SolidWorks文件--" + templatePath);
}
return sldWorks.CreateDocument(templatePath);
}
最后有个问题想请教大家,在你们执行项目的过程中,有没有遇到过特别让人难忘的失误经历?希望各位能点赞、转发,并在评论区分享你们的经验。