Тема: AcDbArc set startpoint и endpoint
Привет,
Сноба еще одна проблема, я хочу изменит AcDbArc старт поинт, центер поинт и енд поинт координати, на VB или VBA ето бозможно но как ето сделать на ObjectARX
спасибо
Дариус
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → ObjectARX → AcDbArc set startpoint и endpoint
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Привет,
Сноба еще одна проблема, я хочу изменит AcDbArc старт поинт, центер поинт и енд поинт координати, на VB или VBA ето бозможно но как ето сделать на ObjectARX
спасибо
Дариус
> Darius
В общем случае поставленная задача решения не имеет. Если расстояния от центра до новых конечной и начальной точкек отличается, то очевидно, что дуга получится не может.
Вот пример, как можно изменить дугу изменяя конечные точки и промежуточную точку дуги. Может это пример натолкнет тебя на мысль как поступить в твоем случае.
static void SetArcStartEndMiddle(void) { ads_name en; ads_point p; if (acedEntSel(_T("\nВыберите дугу: "),en,p) == RTNORM) { AcDbObjectId id; acdbGetObjectId(id,en); AcDbObjectPointer<AcDbArc> pArc(id,AcDb::kForRead); Acad::ErrorStatus es; if ((es = pArc.openStatus()) == Acad::eNotThatKindOfClass) { acutPrintf(_T("\nЭто не дуга!")); return; } else if (es != Acad::eOk) { acutPrintf(_T("\npArc.openStatus()=%s"),acadErrorStatusText(es)); return; } AcGePoint3d pStart, pEnd, pMid; pArc->getStartPoint(pStart); pArc->getEndPoint(pEnd); double par1 = 0, par2 = 0; pArc->getEndParam(par1); pArc->getStartParam(par2); pArc->getPointAtParam(0.5*(par1+par2),pMid); acdbWcs2Ucs(asDblArray(pStart),asDblArray(pStart),false); acdbWcs2Ucs(asDblArray(pEnd),asDblArray(pEnd),false); acdbWcs2Ucs(asDblArray(pMid),asDblArray(pMid),false); if (acedGetPoint(asDblArray(pStart),_T("\nУкажите начальную точку: "),asDblArray(pStart)) == RTNORM && acedGetPoint(asDblArray(pEnd),_T("\nУкажите конечную точку: "),asDblArray(pEnd)) == RTNORM && acedGetPoint(asDblArray(pMid),_T("\nУкажите промежуточную точку: "),asDblArray(pMid)) == RTNORM) { acdbUcs2Wcs(asDblArray(pStart),asDblArray(pStart),false); acdbUcs2Wcs(asDblArray(pEnd),asDblArray(pEnd),false); acdbUcs2Wcs(asDblArray(pMid),asDblArray(pMid),false); AcGeCircArc3d geArc(pStart,pMid,pEnd); if ((es = pArc->upgradeOpen()) != Acad::eOk) { acutPrintf(_T("\npArc->upgradeOpen()=%s"),acadErrorStatusText(es)); return; } AcGeVector3d refVec = geArc.refVec(); AcGePlane plane = AcGePlane(geArc.center(), geArc.normal()); double ang = refVec.angleOnPlane(plane); pArc->setCenter(geArc.center()); pArc->setNormal(geArc.normal()); pArc->setStartAngle(geArc.startAng()+ang); pArc->setEndAngle(geArc.endAng()+ang); } } }
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → ObjectARX → AcDbArc set startpoint и endpoint
Форум работает на PunBB, при поддержке Informer Technologies, Inc