Here's the code that fails to trim unless you move the trim point off zero,zero in the +x direction
If you uncomment the "trimPoint.x += iD/2" line, it will work as expected
#Author Dirk Van Essendelft
#Copyright 12/25/2014 21st Century Woodworking
import adsk.core, adsk.fusion, traceback, math, time
class SegRing:
def __init__(self):
try:
self.app = adsk.core.Application.get()
self.core = adsk.core
self.ui = self.app.userInterface
self.product = self.app.activeProduct
self.design = adsk.fusion.Design.cast(self.product)
self.rootComp = self.design.rootComponent
self.sketches = self.rootComp.sketches
self.pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062
self.globalOrigin = adsk.core.Point3D.create(0,0,0)
self.extrudes = self.rootComp.features.extrudeFeatures
except:
if self.ui:
self.ui.messageBox('Problem in __init__:\n{}'.format(traceback.format_exc()))
def createSegmentComp(self,n,iD,oD,height):
newOcc = self.rootComp.occurrences.addNewComponent(adsk.core.Matrix3D.create())
comp = newOcc.component
comp._set_name('Single_Segment')
sketches = comp.sketches
sketch = sketches.add(comp.xZConstructionPlane)
sketch._set_isVisible(False)
sketch._set_name('SegmentOutline')
sketchLines = sketch.sketchCurves.sketchLines
sketchPoints = sketch.sketchPoints
angle = 2.0*self.pi/n
halfAngle = angle/2.0
drawingOrigin = self.globalOrigin.copy()
sketchPointOrigin = sketchPoints.add(drawingOrigin)
sketchPointOrigin._set_isFixed(True)
#Create Lower Line
lowerLineStart = drawingOrigin.copy()
lowerLineEnd = drawingOrigin.copy()
lowerLineEnd.x = lowerLineEnd.x + math.cos(halfAngle) * oD * 2
lowerLineEnd.y = lowerLineEnd.y - math.sin(halfAngle) * oD * 2
lowerLine = sketchLines.addByTwoPoints(lowerLineStart,lowerLineEnd)
#Create Upper Line
upperLineStart = drawingOrigin.copy()
upperLineEnd = drawingOrigin.copy()
upperLineEnd.x = upperLineEnd.x + math.cos(halfAngle) * oD * 2
upperLineEnd.y = upperLineEnd.y + math.sin(halfAngle) * oD * 2
upperLine = sketchLines.addByTwoPoints(upperLineStart,upperLineEnd)
#Create Outter Line
oDLineStart = drawingOrigin.copy()
oDLineStart.x += oD
oDLineStart.y += oD
oDLineEnd = oDLineStart.copy()
oDLineEnd.y -= 2 * oD
odLine = sketchLines.addByTwoPoints(oDLineStart,oDLineEnd)
#Create Inner Line
idLineStart = drawingOrigin.copy()
idLineEnd = drawingOrigin.copy()
idLineStart.x = math.cos(halfAngle) * iD
idLineStart.y = -1.0 * oD
idLineEnd.x = idLineStart.x
idLineEnd.y = -1.0 * idLineStart.y
idLine = sketchLines.addByTwoPoints(idLineStart,idLineEnd)
#Trim Lines to Create Trapizoid
lowerLine.trim(lowerLineEnd)
upperLine.trim(upperLineEnd)
odLine.trim(oDLineStart)
odLine.trim(oDLineEnd)
idLine.trim(idLineStart)
idLine.trim(idLineEnd)
# lineReturn = lowerLine.breakCurve(idLine.startSketchPoint.geometry,True)
# print(lineReturn.count)
trimPoint = upperLine.startSketchPoint.geometry.copy()
# trimPoint.x += iD/2
lowerLine.trim(trimPoint)
upperLine.trim(trimPoint)
def main():
try:
nSeg = 8 # Number of Segments
inerDia = 3 # inner diameter
outterDia = 4 # outter diameter
ringHeight = 1 # height of ring
sR = SegRing()
sR.createSegmentComp(nSeg,inerDia,outterDia,ringHeight)
except:
sR.ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
main()
21st Century Woodworking
-Blending 21st Century Woodworking with Old World Skill