Building Coder(Revit 二次开发) - 只加载需要的族类型

本文探讨了Revit API提供的两种方法来加载族类型:LoadFamilySymbol与LoadFamily。重点讨论了如何在Ribbon面板中通过加载家族并选择实际需要的类型,以及使用API方式实现这一功能。介绍了通过事务、获取族类型和卸载不必要的类型的方法,最终实现了仅加载所需族类型的编程解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接: Loading Only Selected Family Types

Revit API 提供两种方法来加载族类型:
1. LoadFamilySymbol - 加载一个族类型
2. LoadFamily - 加载一个族包含的所有族类型

之前我们也讨论过如何使用 Duplicate 来创建一个新的族类型( creating a new family type),以及卸载一个不使用的族类型( unloading an unused type)。

今天我想讨论的是不再加载所有的族类型,而是提供一个族包含类型的列表供用户选择实际需要加载的类型。

提问:
Revit 有多种办法加载族类型,在 Ribbon 面板中就有两种方式:
1. Home > Component > Load Family
   加载一个族并放置一个族实例
2. Insert > Loaf Family
   加载一个族

如果选定的族有一个关联的TXT文件,并且包含多个族类型,Revit 会弹出一个族类型类表让用户选择需要加载的类型。

如果使用 API 方式,我可以在 LoadFamilySymbol 和 LoadFamily 中选择。不过我找不到能弹出族类型列表的 API。如果这样的 API 不存在的话,是否能用编程方式实现这个行为呢?

回答:
Revit API 不提供显示族中包含类型的 API。不过你可以使用如下方法间接实现:
1. 在一个事务中使用 LoadFamily 加载族
2. 获取该族包含的所有族类型
3. 回滚事务来取消族的加载
  string filename = @"C:\Documents and Settings"
    + "\All Users\Application Data\Autodesk"
    + "\RAC 2011\Metric Library\Columns"
    + "\M_Round Column.rfa";
 
  UIApplication app = commandData.Application;
  Document doc = app.ActiveUIDocument.Document;
 
  Transaction trans = new Transaction( 
    doc, "FakeLoading" );
 
  trans.Start();
 
  Family family = null;
  string symbName = String.Empty;
  int counter = 0;
  if( doc.LoadFamily( filename, out family ) )
  {
    foreach( FamilySymbol symb in family.Symbols )
    {
      TaskDialog.Show( "Symbol names", symb.Name );
      if( counter == 0 )
      {
        symbName = symb.Name;
      }
      counter++;
    }
  }
  trans.RollBack();
 
  Transaction transNew = new Transaction( 
    doc, "RealLoading" );
 
  transNew.Start();
 
  if( doc.LoadFamilySymbol( filename, symbName ) )
  {
    TaskDialog.Show( "Status", 
      "We managed to load only one desired symbol!" );
  }
  transNew.Commit();
这个办法还有一个变体:既然我们已经通过 LoadFamily 加载了所有类型,其实还可以通过卸载不需要的类型来实现只加载指定类型的目的。卸载族类型可以使用 Document.Delete 方法。
  • Delete(ElementSet)
              将需要卸载的族类型实例添加入一个 ElementSet 对象
  • Delete(ICollection(Of ElementId))
              将需要卸载的族类型实例对应的 ElementId 实例添加入一个 ICollection

上面这些讨论给了我另外一种思路:使用 API 在后台打开族文档,然后通过 FamilyManager 去访问其包含的所有族类型。因为还没有做实验,所以我不清楚这种方法是否需要处理关联的 TXT 文件,以及这样做是否会影响 FamilyManager 返回的族类型信息。


<think>好的,我现在需要帮助用户解决如何再次运行Ollama的Qwen2.5-Coder模型(7B版本)的问题。用户提到了“reopen”这个词,可能是指重新启动或重新运行模型。首先,我需要回顾Ollama的基本命令和操作流程。 用户之前的引用内容都是关于nginx的reopen操作,这可能让用户误以为Ollama也有类似的命令。需要明确告知用户Ollama的使用方式不同,不需要nginx那样的日志处理步骤。接下来,我需要分步骤说明如何运行模型,包括安装、拉取模型、运行模型以及可能的重启方法。 然后,要检查用户提到的模型名称是否正确。Qwen2.5-Coder可能有不同的版本命名,比如是否在Ollama的模型库中存在。如果用户遇到问题,可能需要建议他们检查模型名称是否正确或者尝试其他相关模型。 此外,用户可能遇到的问题可能包括模型未找到、运行失败或如何保持服务运行。需要提前预判这些问题并提供解决方案,比如检查网络连接、更新Ollama版本、使用后台运行模式等。 最后,确保回答结构清晰,步骤明确,并生成相关问题引导用户进一步学习。同时,引用之前提供的参考资料时要恰当,但注意用户的问题与nginx无关,所以可能需要指出两者的区别,避免混淆。</think>### 如何再次运行 Ollama 的 Qwen2.5-Coder 模型(7B 版本) #### 步骤说明 1. **确认模型名称** 首先需要确认模型在Ollama模型库中的完整名称。根据Ollama官方模型库的命名规则,模型名称通常为`<开发者>/<模型名>:<版本>`格式。例如:`qwen2.5-coder:7b`或`qwen/qwen2.5-coder-7b`(需查询Ollama文档确认)。 2. **拉取模型(若未下载)** 使用以下命令拉取模型(假设模型名为`qwen2.5-coder:7b`): ```bash ollama pull qwen2.5-coder:7b ``` 若已下载,此步骤可跳过。 3. **运行模型** 直接执行启动命令: ```bash ollama run qwen2.5-coder:7b ``` 4. **重启服务的特殊场景** 若需要**重新加载模型配置**(类似nginx的`reopen`操作),Ollama提供了服务控制命令: ```bash ollama serve # 先停止服务(Ctrl+C终止) ollama run qwen2.5-coder:7b # 重新运行 ``` #### 常见问题解决 - **模型未找到** 检查模型名称是否在Ollama库中存在: ```bash ollama list # 查看本地已下载模型 ollama search qwen # 搜索相关模型 ``` - **运行失败** 1. 确保Ollama版本已更新: ```bash ollama --version # 检查版本 ``` 2. 尝试重启Ollama后台服务: ```bash systemctl restart ollama # Linux系统 ``` - **保持服务运行** 使用`nohup`或`screen`实现后台运行: ```bash nohup ollama run qwen2.5-coder:7b & ``` #### 与Nginx日志管理的区别 虽然用户提到`nginx -s reopen`的日志轮转操作[^3][^4],但Ollama的运行机制不同: - Ollama无需手动管理日志文件 - 模型运行状态通过命令行直接控制 - 持久化配置通过`ollama serve`实现[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值