<?xml encoding=”UTF-8″>By Balaji Ramamoorthy
In a recent query, a developer wanted to retrieve the points of tangency of sketch lines with circles. The way to do get that information is to set up the sketch constraints right just as you would with the Inventor UI. The geometry can then be retrieved from the tangent lines using SketchLine.Geometry. Here is a sample code snippet and the screenshot of sketch that it generates.
<span>Dim</span><span> partDoc <span>As</span><span> PartDocument = _</span></span>
<span>TryCast</span><span> (_invApp.ActiveDocument, PartDocument)</span>
<span>Dim</span><span> oCompDef <span>As</span><span> PartComponentDefinition _</span></span>
= partDoc.ComponentDefinition
<span' New sketch<span> </span>
<span>Dim</span><span> oSketch <span>As</span><span> PlanarSketch = _</span></span>
oCompDef.Sketches.Add(oCompDef.WorkPlanes(3))
oSketch.Name = <span>"MySketch"</span><span> </span>
<span>Dim</span><span> oTG <span>As</span><span> TransientGeometry = _</span></span>
_invApp.TransientGeometry
<span>Dim</span><span> geomConstraints <span>As</span><span> GeometricConstraints _</span></span>
= oSketch.GeometricConstraints
<span>Dim</span><span> points <span>As</span><span> SketchPoints = oSketch.SketchPoints</span></span>
<span>Dim</span><span> skp0 <span>As</span><span> SketchPoint = points.Add( _</span></span>
oTG.CreatePoint2d(0, 0), <span>False</span><span> )</span>
<span>Dim</span><span> skp1 <span>As</span><span> SketchPoint = points.Add( _</span></span>
oTG.CreatePoint2d(10, 0), <span>False</span><span> )</span>
<span' Construction line joining center points<span> </span>
<span' of the circles<span> </span>
<span>Dim</span><span> oCenLine <span>As</span><span> SketchLine = _</span></span>
oSketch.SketchLines.AddByTwoPoints(skp0, skp1)
oCenLine.Construction = <span>True</span><span> </span>
geomConstraints.AddHorizontal(oCenLine)
<span' Circle with radius 4<span> </span>
<span>Dim</span><span> oCircle1 <span>As</span><span> SketchCircle = _</span></span>
oSketch.SketchCircles.AddByCenterRadius( _
oCenLine.StartSketchPoint, 4)
<span' Circle with radius 2<span> </span>
<span>Dim</span><span> oCircle2 <span>As</span><span> SketchCircle = _</span></span>
oSketch.SketchCircles.AddByCenterRadius( _
oCenLine.EndSketchPoint, 2)
<span' Fix the center points<span> </span>
geomConstraints.AddGround(oCircle1.CenterSketchPoint)
geomConstraints.AddGround(oCircle2.CenterSketchPoint)
<span' Line 1 that we will make tangential to the circle<span> </span>
<span>Dim</span><span> skp2 <span>As</span><span> SketchPoint = _</span></span>
points.Add(oTG.CreatePoint2d(0, 4), <span>False</span><span> )</span>
<span>Dim</span><span> skp3 <span>As</span><span> SketchPoint = _</span></span>
points.Add(oTG.CreatePoint2d(10, 2), <span>False</span><span> )</span>
<span>Dim</span><span> oTanLine1 <span>As</span><span> SketchLine = _</span></span>
oSketch.SketchLines.AddByTwoPoints(skp2, skp3)
<span' Line 2 that we will make tangential to the circle <span> </span>
<span>Dim</span><span> skp4 <span>As</span><span> SketchPoint = points.Add( _</span></span>
oTG.CreatePoint2d(0, -4), <span>False</span><span> )</span>
<span>Dim</span><span> skp5 <span>As</span><span> SketchPoint = points.Add( _</span></span>
oTG.CreatePoint2d(10, -2), <span>False</span><span> )</span>
<span>Dim</span><span> oTanLine2 <span>As</span><span> SketchLine = _</span></span>
oSketch.SketchLines.AddByTwoPoints(skp4, skp5)
<span' Make both the lines tangential to the circles<span> </span>
geomConstraints.AddTangent(oCircle1, oTanLine1)
geomConstraints.AddTangent(oCircle2, oTanLine1)
geomConstraints.AddTangent(oCircle1, oTanLine2)
geomConstraints.AddTangent(oCircle2, oTanLine2)
<span' Ensure that the tangent end points are on circles<span> </span>
geomConstraints.AddCoincident( _
oTanLine1.StartSketchPoint, oCircle1)
geomConstraints.AddCoincident( _
oTanLine1.EndSketchPoint, oCircle2)
geomConstraints.AddCoincident( _
oTanLine2.StartSketchPoint, oCircle1)
geomConstraints.AddCoincident( _
oTanLine2.EndSketchPoint, oCircle2)
<span' Get the goemetry from tangents<span> </span>
<span>Dim</span><span> oTanLine1Geom <span>As</span><span> LineSegment2d _</span></span>
= oTanLine1.Geometry
<span>Dim</span><span> oTanLine2Geom <span>As</span><span> LineSegment2d _</span></span>
= oTanLine2.Geometry
<span>Dim</span><span> sp1 <span>As</span><span> Point2d = oTanLine1Geom.StartPoint</span></span>
<span>Dim</span><span> ep1 <span>As</span><span> Point2d = oTanLine1Geom.EndPoint</span></span>
MessageBox.Show(<span>String</span><span> .Format( _</span>
<span>"Tangent 1 SP : <span>{</span>0<span>}</span> <span>{</span>1<span>}</span> EP : <span>{</span>2<span>}</span> <span>{</span>3<span>}</span>"</span><span> , _</span>
sp1.X, sp1.Y, ep1.X, ep1.Y))


Leave a Reply