首页/文章/ 详情

Altair Inspire Python二次开发:大幅增强中面抽取功能

2天前浏览6

之前文章对比了inspire与spaceclaim几何功能,发现inspire中面很弱,稍微带点倒角的片体,inspire就无法抽取。

自带中面工具无法抽取

但是inspire 提供了完善的Python API,果断通过二次开发完善inspire的中面功能,最终效果如下:

本工具不仅实现了通过面-面抽取中面,还实现了通过面-线面-点抽取中面:

面-点抽取中面

面-线抽取中面

面-面抽取中面

面-面抽取中面(圆柱)

从演示可以看出,首先选择要偏移的面,最后选择的点、线、面用来计算厚度值,最后选择的点、线、面与要偏移面的最小距离即为厚度值,中面抽完后,自动隐藏之前的片体,并自动给抽完的中面赋上厚度。不过抽完的中面还是得手动沿伸。

inspire不仅是几何直接建模工具,还支持结构、多体、流体、优化计算,自带simsolid、optistruct求解器,进行一些小规模计算非常方便,中面功能的加强使得inspire适用范围更广。

最后附上源代码:

.PY文件



























































































def createRibbon():  from hwx import inspire  math = inspire.math   # So midsurf.png is found  from pathlib import Path  gui.addResourcePath(Path(__file__).parent)
 ################################################################################  def getSpriteActionGroup ():    """Return the SpriteActionGroup to drive this context."""
   return gui.SpriteActionGroup(      text     = "midsurf",      children = [        gui.SpriteAction (          tooltip = "midsurf",          icon    = "ribbonSurfaceOffsetStrip-80@2x.png",          context = midsurfContext,        )      ]    )
 ################################################################################  class midsurfContext(gui.Context):      def onActivate(self, firstTime):      if firstTime:        self.guideBar = GuideBar(self)      self.guideBar.show()      self.setPickable(inspire.Feature,style = "toggle")
   def onPickListChanged(self):      picks = self.getPickedObjects()      if picks:        self.showHelpMessage("Picked "+str(len(picks))+"   ATTENTION:The last pick for caculating thickness!!!!!!")      else:        self.showHelpMessage("Surf unpicked.   Pick surfs to extract midsurface.")
   def createMidsurf(self):      picksurfs=self.getPickedObjects()      s1=picksurfs[0]      s1.part.visible=False      s2=picksurfs[-1]      del picksurfs[-1]      tk=[]      for i in picksurfs:        tk.append(i.findClosestPoint(s2.pickPoint).distanceTo(s2.pickPoint))      tkmin=round(min(tk),4)      self.showHelpMessage("thickness="+str(tkmin))      print(tkmin)      midpart = inspire.core.geometry.offset(picksurfs, value=round(-tkmin/2,4) , newPart=True)      midpart.visible=True      midpart.sheetThickness=tkmin      self.clearAllLists()
 class GuideBar(gui.GuideBar):    def createContents(self):              #Clicking this clears pick and select lists      self.resetButton()      self.executePlayButton(              command = self.context.createMidsurf,              tooltip = "Create the joints",      )      self.exitButton()
 ###############################################################################

 with gui.getProfile("Inspire"):    global spriteGroup    spriteGroup = getSpriteActionGroup()    gui.Ribbon.add("midsurfs", spriteGroup)
################################################################################## Entry Point #################################################################################################################################################from hwx.inspire import guicreateRibbon()
def onExtensionUnload():  # Remove SpriteActionGroup from the Inspire profile  with gui.getProfile("Inspire"):    gui.RibbonPage.get("midsurfs").remove(spriteGroup)
extMgr = gui.getExtensionManager()extMgr.onUnload(onExtensionUnload)

.xml文件










<?xml version="1.0" encoding="UTF-8"?><section name="Extension">  <entry name="name"                value="midsurf"/>  <entry name="script"              value="plugin.py"/>  <entry name="author"              value="Xia Jiang"/>  <entry name="description"         value="midsurf Extension."/>  <entry name="minProductVersion"   value="2023"/>  <entry name="supportedClient"     value="Inspire"/></section>

来源:Inspire增材创新设计
SpaceClaimACTOptiStructInspire二次开发UG
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-05-30
最近编辑:2天前
Inspire增材创新设计
专科 | 产品经理 Altair Inspire技术专家
获赞 26粉丝 78文章 44课程 1
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈