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

自带中面工具无法抽取
但是inspire 提供了完善的Python API,果断通过二次开发完善inspire的中面功能,最终效果如下:

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

面-点抽取中面

面-线抽取中面

面-面抽取中面

面-面抽取中面(圆柱)
从演示可以看出,首先选择要偏移的面,最后选择的点、线、面用来计算厚度值,最后选择的点、线、面与要偏移面的最小距离即为厚度值,中面抽完后,自动隐藏之前的片体,并自动给抽完的中面赋上厚度。不过抽完的中面还是得手动沿伸。
inspire不仅是几何直接建模工具,还支持结构、多体、流体、优化计算,自带simsolid、optistruct求解器,进行一些小规模计算非常方便,中面功能的加强使得inspire适用范围更广。
最后附上源代码:

.PY文件
def createRibbon():from hwx import inspiremath = inspire.math# So midsurf.png is foundfrom pathlib import Pathgui.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=Falses2=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=Truemidpart.sheetThickness=tkminself.clearAllLists()class GuideBar(gui.GuideBar):def createContents(self):#Clicking this clears pick and select listsself.resetButton()self.executePlayButton(command = self.context.createMidsurf,tooltip = "Create the joints",)self.exitButton()###############################################################################with gui.getProfile("Inspire"):global spriteGroupspriteGroup = getSpriteActionGroup()gui.Ribbon.add("midsurfs", spriteGroup)################################################################################## Entry Point #################################################################################################################################################from hwx.inspire import guicreateRibbon()def onExtensionUnload():# Remove SpriteActionGroup from the Inspire profilewith gui.getProfile("Inspire"):gui.RibbonPage.get("midsurfs").remove(spriteGroup)extMgr = gui.getExtensionManager()extMgr.onUnload(onExtensionUnload)
.xml文件
<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>