Jump to content

Welcome to eMastercam

Register now to participate in the forums, access the download area, buy Mastercam training materials, post processors and more. This message will be removed once you have signed in.

Use your display name or email address to sign in:

JKLINE

Verified Members
  • Posts

    166
  • Joined

  • Last visited

Everything posted by JKLINE

  1. I took 2 arcs shifted 1 X+0.001 & Y+0.001 shifted the other X-0.001 & Y-0.001 I created points of where the two circles intersect I then filtered to only keep the points that are actually on the arc The goal here is to have a chain color A until it hits a point and then change to color B until it hits another point at which it turns back to color A
  2. New Solution :: BreakManyPiecesParameters broken = new BreakManyPiecesParameters() { Curves = true, Number = 2, Method = 0 }; tempList7.Add(arc); GeometryManipulationManager.BreakManyPieces(tempList7,broken,ref tempList5,ref tempList6);
  3. If it's a bug, I'll actually move on. I can get the size of the arc, and if it's less than A and it's endpoint matches another arc that is also less than A, JoinEntities.
  4. I decided to use BreakAtMidpoint(arc). The problem I'm currently having with it is that it breaks the arc at the midpoint, which is wonderful, but then one of those halves gets broken again. I'm not seeing any error in my logic though. Does breaking an Entity store the two new pieces under the same EntityID? void breakArcsWithPoints(){ foreach (var i in tempList3) { var ArcID = Geometry.RetrieveEntity(i); if (ArcID is ArcGeometry arc){ var arc1X1 = arc.EndPoint1.x; // Arc x 1 var arc1X2 = arc.EndPoint2.x; // Arc x 2 var arc1Y1 = arc.EndPoint1.y; // Arc y 1 var arc1Y2 = arc.EndPoint2.y; // Arc y 2 var arc1Center = arc.Data.CenterPoint; Point3D arc1StartPoint = new Point3D(arc1X1, arc1Y1, 0.0); Point3D arc1EndPoint = new Point3D(arc1X2, arc1Y2, 0.0); var tolerance = 0.001; foreach (var v in tempList4){ var u = PointGeometry.RetrieveEntity(v); if (u is PointGeometry point) { var ux = point.Data.x; var uy = point.Data.y; Point3D uPoint = new Point3D(uy, ux, 0.0); var delta3Xneg = (arc1Center.x - uPoint.x); var delta3Yneg = (arc1Center.y - uPoint.y); var delta3Radneg = Math.Atan2(delta3Xneg, delta3Yneg); var pt3degreeNeg = VectorManager.RadiansToDegrees(delta3Radneg); if (pt3degreeNeg < 0.0){ pt3degreeNeg = (pt3degreeNeg + 360); } var startToUDist = Math.Abs(VectorManager.Distance(arc1StartPoint, uPoint)); var endToUDist = Math.Abs(VectorManager.Distance(arc1EndPoint, uPoint)); if ((startToUDist >= (endToUDist - tolerance)) && (startToUDist <= (endToUDist + tolerance))){ GeometryManipulationManager.BreakAtMidpoint(arc); } } } } } }
  5. I'm looking to break a line or arc at a point. I'm finding BreakManyPiecesParameters in the API but it's not showing how to use an actual point. Will I be better off deleting the original geometry and then creating two lines/two arcs? Thanks, Jeremy
  6. I'm not seeing any surface creation methods in the NET-Hook API. Am I missing something? Specifically looking to draft surface from a chain with a controlled depth, angle, and direction. Will I have to create a surface, call it by an ID, and then change it's parameters to where I need it? Thanks, Jeremy
  7. That sounds exactly what I need for the next step of this project. I sent an email requesting support. I'll be looking to detect when a chain changes direction and what entityID it was changed at.
  8. This worked like a champ. I was getting tripped up by the fact that it stores GetEntityID numbers, example 1490. I thought it would save that Entity number, but in the list it would be [0] instead of [1490]. var GetEntityID()[0] = 1490 instead of pulling the item number from the list at index and then asking for that entity information.
  9. I've added everything I've learned this week into one file. Unfortunately, there's a bug where it moves whatever geometry is on the screen when it starts. Nonetheless, I'd appreciate feedback. This is the only C# I've ever done public Mastercam.App.Types.MCamReturn CustomNethookRun(Mastercam.App.Types.MCamReturn notused) { var upperCreaseID = new List<int>(); var lowerCreaseID = new List<int>(); var creaseX1 = 0.0; var creaseX2 = 0.0; var creaseY1 = 0.0; var creaseY2 = 0.0; var creaseX3 = 0.0; var creaseX4 = 0.0; var creaseY3 = 0.0; var creaseY4 = 0.0; void offsetCutchain(){ //Unselects all Geometry SelectionManager.UnselectAllGeometry(); //Turns off all visible levels var shown = LevelsManager.GetVisibleLevelNumbers(); foreach (var level in shown){ LevelsManager.SetLevelVisible(level, false); } LevelsManager.RefreshLevelsManager(); //Sets level 75 to main level and visible LevelsManager.SetMainLevel(75); LevelsManager.SetLevelVisible(75, true); LevelsManager.RefreshLevelsManager(); GraphicsManager.Repaint(true); //Selects all geometry on level 75 var selectedCutChain = ChainManager.ChainAll(75); //Creates and names level 500 and level 501 int createdUpperLevel = 500; int createdLowerLevel = 501; LevelsManager.SetLevelName(500, "Upper Created Cut Geo"); LevelsManager.SetLevelName(501, "Lower Created Cut Geo"); //edits each entity of all chains foreach (var chain in selectedCutChain){ //offsets line of lower var lowerChainLarge = chain.OffsetChain2D(OffsetSideType.Left, .0225, OffsetRollCornerType.None, .5, false, .005, false); var lowerChainSmall = chain.OffsetChain2D(OffsetSideType.Right, .0025, OffsetRollCornerType.None, .5, false, .005, false); //Colors and selects result geometry var cutResultGeometry = SearchManager.GetResultGeometry(); foreach (var entity in cutResultGeometry){ entity.Color = 11; entity.Selected = true; entity.Commit(); } //Moves result geometry GeometryManipulationManager.MoveSelectedGeometryToLevel(createdLowerLevel, true); //Clears geometry in result GraphicsManager.ClearColors(new GroupSelectionMask(true)); //offsets line of upper var upperChainLarge = chain.OffsetChain2D(OffsetSideType.Left, .0025, OffsetRollCornerType.None, .5, false, .005, false); var upperChainSmall = chain.OffsetChain2D(OffsetSideType.Right, .0385, OffsetRollCornerType.None, .5, false, .005, false); //Colors and selects result geometry var cutResultGeometryNew = SearchManager.GetResultGeometry(); foreach (var entity in cutResultGeometryNew){ entity.Color = 10; entity.Selected = true; entity.Commit(); } //Moves result geometry GeometryManipulationManager.MoveSelectedGeometryToLevel(createdUpperLevel, true); //Clears geometry in result GraphicsManager.ClearColors(new GroupSelectionMask(true)); } } bool CreateLine1(){ bool result = false; Point3D crease1 = new Point3D(creaseX1, creaseY1, 0.0); Point3D crease3 = new Point3D(creaseX3, creaseY3, 0.0); LineGeometry Line1 = new LineGeometry(crease1, crease3); Line1.Selected = true; result = Line1.Commit(); return result; } bool CreateLine2(){ bool result = false; Point3D crease2 = new Point3D(creaseX2, creaseY2, 0.0); Point3D crease4 = new Point3D(creaseX4, creaseY4, 0.0); LineGeometry Line2 = new LineGeometry(crease2, crease4); Line2.Selected = true; result = Line2.Commit(); return result; } void offsetCreasechain(){ //Unselects all Geometry SelectionManager.UnselectAllGeometry(); //Turns off all visible levels var shown = LevelsManager.GetVisibleLevelNumbers(); foreach (var level in shown){ LevelsManager.SetLevelVisible(level, false); } LevelsManager.RefreshLevelsManager(); //Sets level 101 to main level and visible LevelsManager.SetMainLevel(101); LevelsManager.SetLevelVisible(101, true); LevelsManager.RefreshLevelsManager(); GraphicsManager.Repaint(true); //Selects all geometry on level 101 var selectedCreaseChain = ChainManager.ChainAll(101); //Creates and names level 502 and level 503 int createdUpperCrease = 502; int createdLowerCrease = 503; LevelsManager.SetLevelName(502, "Upper Created Crease Geo"); LevelsManager.SetLevelName(503, "Lower Created Crease Geo"); //edits each entity of all chains foreach (var chain in selectedCreaseChain){ //offsets line of lower var lowerChainCrease1 = chain.OffsetChain2D(OffsetSideType.Left, .040, OffsetRollCornerType.None, .5, false, .005, false); var lowerChainCrease2 = chain.OffsetChain2D(OffsetSideType.Left, .065, OffsetRollCornerType.None, .5, false, .005, false); var lowerChainCrease3 = chain.OffsetChain2D(OffsetSideType.Right, .040, OffsetRollCornerType.None, .5, false, .005, false); var lowerChainCrease4 = chain.OffsetChain2D(OffsetSideType.Right, .065, OffsetRollCornerType.None, .5, false, .005, false); //Colors and selects result geometry var creaseResultGeometry = SearchManager.GetResultGeometry(); foreach (var entity in creaseResultGeometry){ lowerCreaseID.Add(entity.GetEntityID()); entity.Color = 11; entity.Selected = true; entity.Commit(); } //Moves result geometry GeometryManipulationManager.MoveSelectedGeometryToLevel(createdLowerCrease, true); //Clears geometry in result GraphicsManager.ClearColors(new GroupSelectionMask(true)); //offsets line of upper var upperChainCrease1 = chain.OffsetChain2D(OffsetSideType.Left, .014, OffsetRollCornerType.None, .5, false, .005, false); var upperChainCrease2 = chain.OffsetChain2D(OffsetSideType.Right, .014, OffsetRollCornerType.None, .5, false, .005, false); //Colors and selects result geometry var creaseResultGeometryNew = SearchManager.GetResultGeometry(); foreach (var entity in creaseResultGeometryNew){ upperCreaseID.Add(entity.GetEntityID()); entity.Color = 10; entity.Selected = true; entity.Commit(); } //Moves result geometry GeometryManipulationManager.MoveSelectedGeometryToLevel(createdUpperCrease, true); //Clears geometry in result GraphicsManager.ClearColors(new GroupSelectionMask(true)); } } void connectUpperLines(){ var set = 0; foreach (var i in upperCreaseID){ if (set == 0){ var creaseGeo = Geometry.RetrieveEntity(i); var line = (LineGeometry)creaseGeo; creaseX1 = line.EndPoint1.x; creaseX2 = line.EndPoint2.x; creaseY1 = line.EndPoint1.y; creaseY2 = line.EndPoint2.y; set = 1; } else{ var creaseGeo2 = Geometry.RetrieveEntity(i); var line2 = (LineGeometry)creaseGeo2; creaseX3 = line2.EndPoint1.x; creaseX4 = line2.EndPoint2.x; creaseY3 = line2.EndPoint1.y; creaseY4 = line2.EndPoint2.y; CreateLine1(); CreateLine2(); var creaseResultGeometryNew = SearchManager.GetSelectedGeometry(); foreach (var entity in creaseResultGeometryNew){ entity.Color = 10; entity.Selected = true; entity.Commit(); } //Moves result geometry int createdUpperCrease = 502; GeometryManipulationManager.MoveSelectedGeometryToLevel(createdUpperCrease, true); //Clears geometry in result GraphicsManager.ClearColors(new GroupSelectionMask(true)); //Deselects all SelectionManager.UnselectAllGeometry(); set = 0; } } } void connectLowerLines() { var set = 0; foreach (var i in lowerCreaseID){ if (set == 0){ var creaseGeo = Geometry.RetrieveEntity(i); var line = (LineGeometry)creaseGeo; creaseX1 = line.EndPoint1.x; creaseX2 = line.EndPoint2.x; creaseY1 = line.EndPoint1.y; creaseY2 = line.EndPoint2.y; set = 1; } else{ var creaseGeo2 = Geometry.RetrieveEntity(i); var line2 = (LineGeometry)creaseGeo2; creaseX3 = line2.EndPoint1.x; creaseX4 = line2.EndPoint2.x; creaseY3 = line2.EndPoint1.y; creaseY4 = line2.EndPoint2.y; CreateLine1(); CreateLine2(); var creaseResultGeometryNew = SearchManager.GetSelectedGeometry(); foreach (var entity in creaseResultGeometryNew){ entity.Color = 11; entity.Selected = true; entity.Commit(); } //Moves result geometry int createdLowerCrease = 503; GeometryManipulationManager.MoveSelectedGeometryToLevel(createdLowerCrease, true); //Clears geometry in result GraphicsManager.ClearColors(new GroupSelectionMask(true)); //Deselects all SelectionManager.UnselectAllGeometry(); set = 0; } } } void DemoAlterLine(){ //Unselects all Geometry SelectionManager.UnselectAllGeometry(); //Turns off all visible levels var shown = LevelsManager.GetVisibleLevelNumbers(); foreach (var level in shown){ LevelsManager.SetLevelVisible(level, false); } LevelsManager.RefreshLevelsManager(); //Sets level 101 to main level and visible LevelsManager.SetMainLevel(101); LevelsManager.SetLevelVisible(101, true); LevelsManager.RefreshLevelsManager(); GraphicsManager.Repaint(true); var geomask = new GeometryMask{Lines = true}; var geoSel = new SelectionMask{}; var geo = SearchManager.GetGeometry(geomask,geoSel, 101); if (geo != null) { //Selects each line. Determines orientation and alters by 1 inch from both ends foreach (var singleGeo in geo) { var line = (LineGeometry)singleGeo; //If line is vertical if (line.Data.Point1.x == line.Data.Point2.x){ if (line.Data.Point1.y >= line.Data.Point2.y){ line.Data.Point1.y += -1; line.Data.Point2.y += +1; line.Selected = false; }; if (line.Data.Point1.y <= line.Data.Point2.y){ line.Data.Point1.y += +1; line.Data.Point2.y += -1; line.Selected = false; }; }; //If line is horizontal if (line.Data.Point1.y == line.Data.Point2.y){ if (line.Data.Point1.x >= line.Data.Point2.x){ line.Data.Point1.x += -1; line.Data.Point2.x += +1; line.Selected = false; }; if (line.Data.Point1.x <= line.Data.Point2.x){ line.Data.Point1.x += +1; line.Data.Point2.x += -1; line.Selected = false; }; }; //Stores result in Mastercam line.Commit(); } //Updates screen shown GraphicsManager.Repaint(true); } } DemoAlterLine(); offsetCreasechain(); connectUpperLines(); connectLowerLines(); offsetCutchain(); return MCamReturn.NoErrors; }
  10. I added some geometry ID numbers to a list, but I'm not seeing a way to retrieve the information of the geometry by referencing their ID #. I thought this would get the first ID# from the list, and then get it's geometry. It gets both ends of a line, alternating between two lines. (Want to draw a line between points 1&3 and 2&4) Example: void connectLines(){ var set = 0; foreach (var Line in CreaseID){ var geomask = new Mastercam.Database.Types.GeometryMask { Lines = true }; if (set == 0){ var creaseGeo = SearchManager.GetGeometry(geomask); foreach (var singleGeo in creaseGeo){ var line = (LineGeometry)singleGeo; creaseX1 = line.EndPoint1.x; creaseX2 = line.EndPoint2.x; creaseY1 = line.EndPoint1.y; creaseY2 = line.EndPoint2.y; set = 1; } } if (set == 1){ var creaseGeo = SearchManager.GetGeometry(geomask); foreach (var singleGeo in creaseGeo){ var line = (LineGeometry)singleGeo; creaseX3 = line.EndPoint1.x; creaseX4 = line.EndPoint2.x; creaseY3 = line.EndPoint1.y; creaseY4 = line.EndPoint2.y; set = 0; CreateLine(); } } } }
  11. That worked out great! It is a little slow at the end, but that's okay. The popup messages helped with troubleshooting. void DemoAlterLine() { var geomask = new Mastercam.Database.Types.GeometryMask{ Lines = true }; var geo = SearchManager.GetGeometry(geomask); if (geo != null) { foreach (var singleGeo in geo) { var line = (Mastercam.Curves.LineGeometry)singleGeo; if (line.Data.Point1.x == line.Data.Point2.x){ if (line.Data.Point1.y >= line.Data.Point2.y){ line.Data.Point1.y += -1; line.Data.Point2.y += +1; line.Selected = false; }; if (line.Data.Point1.y <= line.Data.Point2.y){ line.Data.Point1.y += +1; line.Data.Point2.y += -1; line.Selected = false; }; }; if (line.Data.Point1.y == line.Data.Point2.y){ if (line.Data.Point1.x >= line.Data.Point2.x){ line.Data.Point1.x += -1; line.Data.Point2.x += +1; line.Selected = false; }; if (line.Data.Point1.x <= line.Data.Point2.x){ line.Data.Point1.x += +1; line.Data.Point2.x += -1; line.Selected = false; }; }; line.Commit(); Mastercam.IO.GraphicsManager.Repaint(true); } } } DemoAlterLine(); Roger, Why would it matter if the geometry has been "flipped"? Are you referring to the direction of a chain? When would I use that DLL? Thanks, Jeremy
  12. I'm interested in getting the coordinates of the two ends of a line, and then moving those points (making the line shorter). I'm lost on where to begin. Do I select the geometry, pull the parameters and then change them? Thought I would be clever and display the coordinates in a MessageBox but that requires a string. How do you get the 3D position of the ends of a chain? var selectedChain = ChainManager.GetOneChain("Select a Chain"); var Endpoint1 = CurveGeomEndpointFlag.Endpoint2; var Endpoint2 = CurveGeomEndpointFlag.Endpoint2; System.Windows.Forms.MessageBox.Show(Endpoint1); System.Windows.Forms.MessageBox.Show(Endpoint2);
  13. Thank you Roger! I'm not sure why that first option "SelectionManager.SelectGeometryByMask(Mastercam.IO.Types.QuickMaskType.Result);" doesn't work for me, but the other two certainly do. Even taught me about more tools in the API, although it still looks sloppy and overly complicated. On to my next challenge. Thank you! public Mastercam.App.Types.MCamReturn CustomNethookRun(Mastercam.App.Types.MCamReturn notused) { var selectedChain = ChainManager.GetOneChain("Select a Chain"); int createdUpperLevel = 500; int createdLowerLevel = 501; LevelsManager.SetLevelName(500, "Upper Created Geo"); LevelsManager.SetLevelName(501, "Lower Created Geo"); var upperChainLarge = selectedChain.OffsetChain2D(OffsetSideType.Right,.0225,OffsetRollCornerType.None,.5,false,.005,false); var upperLargeGeometry = ChainManager.GetGeometryInChain(upperChainLarge); var upperChainSmall = selectedChain.OffsetChain2D(OffsetSideType.Left,.0025,OffsetRollCornerType.None,.5,false,.005,false); var upperSmallGeometry = ChainManager.GetGeometryInChain(upperChainSmall); var resultGeometry = SearchManager.GetResultGeometry(); foreach (var entity in resultGeometry) { entity.Color = 11; entity.Selected = true; entity.Commit(); } GeometryManipulationManager.MoveSelectedGeometryToLevel(createdUpperLevel, true); GraphicsManager.ClearColors(new GroupSelectionMask(true)); var lowerChainLarge = selectedChain.OffsetChain2D(OffsetSideType.Right,.0025,OffsetRollCornerType.None,.5,false,.005,false); var lowerLargeGeometry = ChainManager.GetGeometryInChain(lowerChainLarge); var lowerChainSmall = selectedChain.OffsetChain2D(OffsetSideType.Left,.0385,OffsetRollCornerType.None,.5,false,.005,false); var lowerSmallGeometry = ChainManager.GetGeometryInChain(lowerChainSmall); var resultGeometryNew = SearchManager.GetResultGeometry(); foreach (var entity in resultGeometryNew) { entity.Color = 10; entity.Selected = true; entity.Commit(); } GeometryManipulationManager.MoveSelectedGeometryToLevel(createdLowerLevel, true); GraphicsManager.ClearColors(new GroupSelectionMask(true)); foreach (var entity in upperLargeGeometry) { entity.Commit(); } foreach (var entity in upperSmallGeometry) { entity.Commit(); } foreach (var entity in lowerLargeGeometry) { entity.Commit(); } foreach (var entity in lowerSmallGeometry) { entity.Commit(); } return MCamReturn.NoErrors; }
  14. I am trying to select the result of an offset chain. I can't get the mask to select anything no matter the mask type but I CAN get it to select everything at once. SelectionManager.SelectAllGeometry(); SelectionManager.SelectGeometryByMask(Mastercam.IO.Types.QuickMaskType.Wireframe); In it's entirety "" var selectedChain = ChainManager.GetOneChain("Select a Chain"); int createdUpperLevel = 500; int createdLowerLevel = 501; var upperChainLarge = selectedChain.OffsetChain2D(OffsetSideType.Right, .0225, OffsetRollCornerType.None, .5, false, .005, false); var upperLargeGeometry = ChainManager.GetGeometryInChain(upperChainLarge); SearchManager.GetResultGeometry(); SelectionManager.SelectGeometryByMask(Mastercam.IO.Types.QuickMaskType.Result); GeometryManipulationManager.MoveSelectedGeometryToLevel(createdUpperLevel, true); var upperChainSmall = selectedChain.OffsetChain2D(OffsetSideType.Left, .0025, OffsetRollCornerType.None, .5, false, .005, false); var upperSmallGeometry = ChainManager.GetGeometryInChain(upperChainSmall); SelectionManager.SelectGeometryByMask(Mastercam.IO.Types.QuickMaskType.Result); GeometryManipulationManager.MoveSelectedGeometryToLevel(createdUpperLevel, true); var lowerChainLarge = selectedChain.OffsetChain2D(OffsetSideType.Right, .0025, OffsetRollCornerType.None, .5, false, .005, false); var lowerLargeGeometry = ChainManager.GetGeometryInChain(lowerChainLarge); SelectionManager.SelectGeometryByMask(Mastercam.IO.Types.QuickMaskType.Result); GeometryManipulationManager.MoveSelectedGeometryToLevel(createdLowerLevel, true); var lowerChainSmall = selectedChain.OffsetChain2D(OffsetSideType.Left, .0385, OffsetRollCornerType.None, .5, false, .005, false); var lowerSmallGeometry = ChainManager.GetGeometryInChain(lowerChainSmall); SelectionManager.SelectGeometryByMask(Mastercam.IO.Types.QuickMaskType.Result); GeometryManipulationManager.MoveSelectedGeometryToLevel(createdLowerLevel, true); foreach (var entity in upperLargeGeometry) { entity.Commit(); } foreach (var entity in upperSmallGeometry) { entity.Commit(); } foreach (var entity in lowerLargeGeometry) { entity.Commit(); } foreach (var entity in lowerSmallGeometry) { entity.Commit(); } //Code works //SelectionManager.SelectAllGeometry(); //Code doesn't work // SelectionManager.SelectGeometryByMask(Mastercam.IO.Types.QuickMaskType.Wireframe);

Join us!

eMastercam - your online source for all things Mastercam.

Together, we are the strongest Mastercam community on the web with over 56,000 members, and our online store offers a wide selection of training materials for all applications and skill levels.

Follow us

×
×
  • Create New...