本文整理汇总了C++中CDrawingObject::GetActiveListFirst方法的典型用法代码示例。如果您正苦于以下问题:C++ CDrawingObject::GetActiveListFirst方法的具体用法?C++ CDrawingObject::GetActiveListFirst怎么用?C++ CDrawingObject::GetActiveListFirst使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CDrawingObject
的用法示例。
在下文中一共展示了CDrawingObject::GetActiveListFirst方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetStickyPoint
CDPoint CTinyCadDoc::GetStickyPoint( CDPoint q, BOOL pins, BOOL wires, BOOL &is_stuck, BOOL &is_junction )
{
CDPoint r(0,0);
bool first = true;
double min_distance = 0;
int items = 0;
int range = GetOption().GetAutoSnapRange();
if (!GetOption().GetAutoSnap())
{
is_stuck = FALSE;
is_junction = FALSE;
return q;
}
// Search for methods, and look at their pins
drawingIterator it = GetDrawingBegin();
while (it != GetDrawingEnd())
{
CDrawingObject *ObjPtr = *it;
switch (ObjPtr->GetType())
{
case xWire:
#define theLine ((CDrawLine*)ObjPtr)
if (wires)
{
CDPoint d;
CLineUtils l( theLine->m_point_a, theLine->m_point_b );
double distance = l.DistanceFromPoint( q, d );
if (d == r)
{
items ++;
}
if (first || distance < min_distance)
{
if (r != d)
{
// have we split this wire?
if (d != theLine->m_point_a && d != theLine->m_point_b)
{
items = 2;
}
else
{
items = 1;
}
}
r = d;
first = false;
min_distance = distance;
}
}
break;
default:
if (pins)
{
CDRect s( ObjPtr->m_point_a.x, ObjPtr->m_point_a.y, ObjPtr->m_point_b.x, ObjPtr->m_point_b.y );
s.NormalizeRect();
s.left -= range * 2;
s.right += range * 2;
s.bottom += range * 2;
s.top -= range * 2;
if (s.PtInRect(q))
{
CActiveNode a;
ObjPtr->GetActiveListFirst( a );
while (ObjPtr->GetActive(a))
{
// This is a valid pin...
CDPoint d = a.m_a;
double dx = d.x - q.x;
double dy = d.y - q.y;
double distance = sqrt(dx*dx + dy*dy);
if (r == d)
{
items ++;
}
if (first || distance < min_distance)
{
if (r != d)
{
items = 1;
}
r = d;
first = false;
min_distance = distance;
}
}
}
}
break;
//.........这里部分代码省略.........