public int CreateAnchorCode111(PsPoint Point1, PsPoint Point2) { PsCreatePrimitive psCylinder = new PsCreatePrimitive(); PsCreatePrimitive psWasher = new PsCreatePrimitive(); PsCreatePrimitive psNut = new PsCreatePrimitive(); PsPolygon psNutPolygon = new PsPolygon(); PsVector psVector1 = new PsVector(); PsVector psVector2 = new PsVector(); PsVector psVector3 = new PsVector(); PsVector psVector = new PsVector(); psVector1.SetFromPoints(Point1, Point2); psVector2 = psVector.GetPerpendicularVector(psVector1); psVector3.SetFromCrossProduct(psVector1, psVector2); InsertPoint = Point1; psVector1.Normalize(); psVector2.Normalize(); psVector3.Normalize(); ZAxis = psVector1; XAxis = psVector2; YAxis = psVector3; PsVector XAxisNegative = new PsVector(); XAxisNegative = XAxis.Clone(); XAxisNegative.Invert(); //Cylinder PsPoint CylinderInsertPoint = new PsPoint(); CylinderInsertPoint = InsertPoint.Clone(); CylinderInsertPoint.AddScaled(ZAxis, -1 * (Length - Embedment - PartThickness)); psCylinder.SetXYPlane(XAxis, YAxis); psCylinder.SetInsertPoint(CylinderInsertPoint); psCylinder.CreateCylinder(Diameter / 2, Length); // Washer psWasher.SetXYPlane(XAxisNegative, YAxis); psWasher.SetInsertPoint(InsertPoint); psWasher.CreateCylinder(WasherOuterDiameter / 2, WasherThickness); // Nut PsPoint nutInsertPoint = new PsPoint(); nutInsertPoint = InsertPoint.Clone(); nutInsertPoint.AddScaled(ZAxis, -1 * WasherThickness); psNutPolygon.createPolygon(6, NutKeySize / 2, false); psNut.SetXYPlane(XAxisNegative, YAxis); psNut.SetPolygon(psNutPolygon); psNut.SetInsertPoint(nutInsertPoint); psNut.CreateExtrusion(NutHeight, 0D, 0D); // Unite all int cylinderId = psCylinder.ObjectId; int washerId = psWasher.ObjectId; int nutId = psNut.ObjectId; int[] ids = { washerId, nutId }; PsCutObjects psUniteObjects = new PsCutObjects(); psUniteObjects.SetObjectId(cylinderId); PsTransaction psTransaction = new PsTransaction(); foreach (int i in ids) { psUniteObjects.SetAsBooleanCut(i); psUniteObjects.SetSubBodyType(SubBodyType.kAddBody); psUniteObjects.CreateLogicalLink = false; psUniteObjects.Apply(); psTransaction.EraseLongId((long)i); psTransaction.Close(); } PsUnits psUnits = new PsUnits(); PsObjectProperties psObjectProperties = new PsObjectProperties(); psObjectProperties.Name = Type + " " + psUnits.ConvertToText(Diameter) + "x" + psUnits.ConvertToText(Length); psObjectProperties.ColorIndex = Color; psObjectProperties.PartListFlag = PartListFlag; psObjectProperties.FamilyClass = PartFamilyClassIndex; psObjectProperties.Length = Length; psObjectProperties.writeTo(cylinderId); PsPrimitive psPrimitive = new PsPrimitive(); psTransaction.GetObject((long)cylinderId, PsOpenMode.kForWrite, ref psPrimitive); psPrimitive.writeProps(psObjectProperties); psTransaction.Close(); ObjectId = cylinderId; return(ObjectId); }
public void CreateByTwoPoints(PsPoint StartPoint, PsPoint EndPoint) { PsCreatePrimitive psCylinder = new PsCreatePrimitive(); PsCreatePrimitive psHead1 = new PsCreatePrimitive(); PsCreatePrimitive psHead2 = new PsCreatePrimitive(); PsCreatePrimitive psWasher = new PsCreatePrimitive(); PsCreatePrimitive psNut = new PsCreatePrimitive(); PsPolygon psNutPolygon = new PsPolygon(); PsVector psVector1 = new PsVector(); PsVector psVector2 = new PsVector(); PsVector psVector3 = new PsVector(); PsVector psVector = new PsVector(); psVector1.SetFromPoints(StartPoint, EndPoint); psVector2 = psVector.GetPerpendicularVector(psVector1); psVector3.SetFromCrossProduct(psVector1, psVector2); InsertPoint = StartPoint; KlemmLength = psVector1.Length; psVector1.Normalize(); psVector2.Normalize(); psVector3.Normalize(); ZAxis = psVector1; XAxis = psVector2; YAxis = psVector3; psCylinder.SetXYPlane(XAxis, YAxis); psCylinder.SetInsertPoint(InsertPoint); Length = Math.Round((KlemmLength + WasherThickness + NutHeight + LengthAdd + 0.375D) * 4, MidpointRounding.ToEven) / 4; psCylinder.CreateCylinder(Diameter / 2, Length); // Head PsVector XAxisNegative = new PsVector(); XAxisNegative = XAxis.Clone(); XAxisNegative.Invert(); psHead1.SetXYPlane(XAxisNegative, YAxis); psHead1.SetInsertPoint(InsertPoint); psHead1.CreateCylinder(HeadDiameter / 2, HeadHeight / 4); PsPoint head2InsertPoint = new PsPoint(); head2InsertPoint = InsertPoint.Clone(); head2InsertPoint.AddScaled(ZAxis, -1 * HeadHeight / 4); psHead2.SetXYPlane(XAxisNegative, YAxis); psHead2.SetInsertPoint(head2InsertPoint); psHead2.CreateCone(HeadDiameter / 2, HeadDiameter / 6, 0.75 * HeadHeight); // Washer psWasher.SetXYPlane(XAxis, YAxis); psWasher.SetInsertPoint(EndPoint); psWasher.CreateCylinder(WasherOuterDiameter / 2, WasherThickness); // Nut PsPoint nutInsertPoint = new PsPoint(); nutInsertPoint = EndPoint.Clone(); nutInsertPoint.AddScaled(ZAxis, WasherThickness); psNutPolygon.createPolygon(6, NutKeySize / 2, false); psNut.SetXYPlane(XAxis, YAxis); psNut.SetPolygon(psNutPolygon); psNut.SetInsertPoint(nutInsertPoint); psNut.CreateExtrusion(NutHeight, 0D, 0D); // Unite all int cylinderId = psCylinder.ObjectId; int head1Id = psHead1.ObjectId; int head2Id = psHead2.ObjectId; int washerId = psWasher.ObjectId; int nutId = psNut.ObjectId; int[] ids = { head1Id, head2Id, washerId, nutId }; PsCutObjects psUniteObjects = new PsCutObjects(); psUniteObjects.SetObjectId(cylinderId); PsTransaction psTransaction = new PsTransaction(); foreach (int i in ids) { psUniteObjects.SetAsBooleanCut(i); psUniteObjects.SetSubBodyType(SubBodyType.kAddBody); psUniteObjects.CreateLogicalLink = false; psUniteObjects.Apply(); psTransaction.EraseLongId((long)i); psTransaction.Close(); } PsUnits psUnits = new PsUnits(); PsMaterialTable psMaterialTable = new PsMaterialTable(); PsObjectProperties psObjectProperties = new PsObjectProperties(); psObjectProperties.Name = Type + " " + psUnits.ConvertToText(Diameter) + "x" + psUnits.ConvertToText(Length) + " " + MaterialName; psObjectProperties.Material = psMaterialTable.get_MaterialIndexFromName(MaterialName); psObjectProperties.ColorIndex = Color; PartListFlag = true; psObjectProperties.PartListFlag = PartListFlag; PartFamilyClassIndex = -1; psObjectProperties.FamilyClass = PartFamilyClassIndex; psObjectProperties.Length = Length; psObjectProperties.writeTo(cylinderId); PsPrimitive psPrimitive = new PsPrimitive(); psTransaction.GetObject((long)cylinderId, PsOpenMode.kForWrite, ref psPrimitive); psPrimitive.writeProps(psObjectProperties); psTransaction.Close(); }