void Triangle::shrink(float l) { shrinkPoly(3, l); }
void polyeditCommand() { Adesk::Boolean interrupted = Adesk::kFalse; Adesk::Boolean done; Acad::ErrorStatus es = Acad::eOk; AcDbFullSubentPath nullSub; AcGePoint2d savedCenter; AcGePoint2d savedStartPoint; int savedNumSides; AcGeVector3d savedNormal; char savedName[133]; double savedElevation; // Select an AsdkPoly entity. AsdkPoly *poly = NULL; AcDb3dSolid *solid = NULL; AcDbObjectId objId; ads_name ename; ads_point ptres; AcDbEntity* ent; ads_name ss ; if ( acedSSGet ("_I", NULL, NULL, NULL, ss) == RTNORM ) { long n ; acedSSLength (ss, &n) ; switch ( n ) { case 0: //----- Not possible, but ? break ; case 1: acedSSName (ss, 0, ename) ; AOK(acdbGetObjectId(objId, ename)); AOK(acdbOpenAcDbEntity(ent, objId, AcDb::kForRead)); assert(ent != NULL); poly = AsdkPoly::cast(ent); if (poly == NULL) { acutPrintf("\nNot a polygon."); AOK(ent->close()); } break ; default: //----- If more than one entity selected, fallback in standard selection mode break ; } acedSSFree (ss) ; } while ( poly == NULL ) { switch (acedEntSel("\nSelect a poly: ", ename, ptres)) { case RTNORM: AOK(acdbGetObjectId(objId, ename)); AOK(acdbOpenAcDbEntity(ent, objId, AcDb::kForRead)); assert(ent != NULL); poly = AsdkPoly::cast(ent); if (poly == NULL) { acutPrintf("\nNot a polygon."); AOK(ent->close()); continue; } break; case RTNONE: case RTCAN: return; default: continue; } break; } // Now we have a polygon. Start editing it. char option[256]; done = Adesk::kFalse; interrupted = Adesk::kFalse; while (!done && !interrupted) { AOK(getEditOption(option,interrupted)); if (strcmp(option, "Grow") == 0) { if (!ent->isKindOf(AsdkPoly::desc())) { acutPrintf("\nNot Applicable"); continue; } AOK(growPoly(poly)); } else if (strcmp(option, "Shrink") == 0) { if (!ent->isKindOf(AsdkPoly::desc())) { acutPrintf("\nNot Applicable"); continue; } AOK(shrinkPoly(poly)); } else if (strcmp(option, "More") == 0) { if (!ent->isKindOf(AsdkPoly::desc())) { acutPrintf("\nNot Applicable"); continue; } AOK(morePoly(poly)); } else if (strcmp(option, "Less") == 0) { if (!ent->isKindOf(AsdkPoly::desc())) { acutPrintf("\nNot Applicable"); continue; } AOK(lessPoly(poly)); } else if (strcmp(option, "Thicken") == 0) { if (!ent->isKindOf(AsdkPoly::desc())) { acutPrintf("\nNot Applicable"); continue; } AOK(thickenPoly(poly, ent, savedCenter,savedStartPoint, savedNumSides,savedNormal,savedName,savedElevation)); solid = AcDb3dSolid::cast(ent); assert(solid != NULL); poly = NULL; solid->draw(); } else if (strcmp(option, "Flatten") == 0) { if (!ent->isKindOf(AcDb3dSolid::desc())) { acutPrintf("\nNot Applicable"); continue; } AOK(flattenPoly(solid,ent,savedCenter,savedStartPoint, savedNumSides,savedNormal,savedName,savedElevation)); poly = AsdkPoly::cast(ent); assert(poly != NULL); solid = NULL; } else if (strcmp(option, "Name") == 0) { if (!ent->isKindOf(AsdkPoly::desc())) { acutPrintf("\nNot Applicable"); continue; } Acad::ErrorStatus es; if ((es = namePoly(poly)) != Acad::eOk) { acutPrintf("\nError setting Poly's name. Error: %s", acadErrorStatusText(es)); done = Adesk::kTrue; continue; } if ((es = stylePoly(poly)) != Acad::eOk) { acutPrintf("\nError setting Poly's text style. Error: %s", acadErrorStatusText(es)); done = Adesk::kTrue; continue; } } else if (strcmp(option, "EXit") == 0) { done = Adesk::kTrue; } else { done = Adesk::kTrue; } } // Close the entity corresponding to the open for read right // after selection. AOK(ent->close()); }