136 static void sl_bb(
struct ks*,
struct ka*);
137 static void get_BB(
struct o*,
struct ka*);
165 #define UpdateBB(BB2,BB1) \ 166 if (BB1.kaLeft < BB2.kaLeft) BB2.kaLeft = BB1.kaLeft; \ 167 if (BB1.kaBottom < BB2.kaBottom) BB2.kaBottom = BB1.kaBottom; \ 168 if (BB1.kaRight > BB2.kaRight) BB2.kaRight = BB1.kaRight; \ 169 if (BB1.kaTop > BB2.kaTop) BB2.kaTop = BB1.kaTop; 179 int FirstTime =
True;
189 if (FirstTime ==
True)
goto quit;
214 long OldRawX,OldRawY;
215 int FirstTime =
True;
220 ShowPrompt(
"Point to endpoints of diagonal.");
226 if (FirstTime ==
True)
goto quit;
286 struct ks *SList, *S;
287 struct ka BB,OldSelectQBB;
289 if (AOI->kaLeft == AOI->kaRight) {
293 if (SList ==
NULL)
return;
343 if (SList ==
NULL)
return;
387 struct ks *SPointer =
NULL, *S;
405 if (Pointer ==
NULL)
break;
410 switch (Pointer->
oType) {
412 CDWire(Pointer,&Layer,&Width,&Path);
414 if (
InPath(Delta+(
int)Width/2,Path,
415 AOI->kaLeft+Delta,AOI->kaBottom+Delta) !=
NULL)
428 AOI->kaLeft+Delta,AOI->kaBottom+Delta))
446 if (SPointer ==
NULL)
470 if (Pointer ==
NULL)
break;
473 if (SPointer ==
NULL)
494 struct ks *SQDesc,*SQNext;
496 for (SQDesc = SList; SQDesc; SQDesc = SQNext) {
568 EdgeOfBB.
kaLeft = BB->kaLeft-300;
569 EdgeOfBB.
kaRight = BB->kaLeft+300;
570 EdgeOfBB.
kaTop = BB->kaTop+300;
571 EdgeOfBB.
kaBottom = BB->kaBottom-300;
576 EdgeOfBB.
kaRight = BB->kaRight+300;
577 EdgeOfBB.
kaLeft = BB->kaRight-300;
578 EdgeOfBB.
kaTop = BB->kaTop+300;
579 EdgeOfBB.
kaBottom = BB->kaBottom-300;
584 EdgeOfBB.
kaBottom = BB->kaBottom-300;
585 EdgeOfBB.
kaTop = BB->kaBottom+300;
586 EdgeOfBB.
kaRight = BB->kaRight;
587 EdgeOfBB.
kaLeft = BB->kaLeft;
593 EdgeOfBB.
kaTop = BB->kaTop+300;
594 EdgeOfBB.
kaRight = BB->kaRight;
595 EdgeOfBB.
kaLeft = BB->kaLeft;
632 sprintf(
TypeOut,
"You have selected an instance of %s.",SymbolName);
694 struct ks *SQDesc,*SQNext;
696 for (SQDesc =
SelectQHead; SQDesc; SQDesc = SQNext) {
728 struct ks *SQDesc,*SQPrev,*SQNext;
732 for (SQDesc =
SelectQHead; SQDesc; SQPrev = SQDesc,SQDesc = SQNext) {
735 if (SQDesc->ksPointer != Pointer)
continue;
765 (Info > 10 && Info <= 255)) {
825 struct ks *SQDesc,*SQNext;
860 for (SQDesc =
SelectQHead; SQDesc; SQDesc = SQNext) {
863 Info = Pointer->
oInfo;
911 struct ks *SQDesc, *SQNext;
916 for (SQDesc =
SelectQHead; SQDesc; SQDesc = SQNext) {
919 if (Types
And !strchr(Types,Type))
continue;
956 (Info > 10 && Info <= 255)) {
987 struct ks *SQDesc,*SQDesc1,*SQNext;
990 for (SQDesc =
SelectQHead; SQDesc; SQDesc = SQNext) {
993 for (SQDesc1 = SQDesc->
ksSucc; SQDesc1; SQDesc1 = SQDesc1->
ksSucc)
1015 if (Pointer->oType ==
CDWIRE) {
1016 CDWire(Pointer,&Layer,&Width,&Path);
1026 if (Pointer->oType ==
CDLABEL) {
1049 if (Pointer->oType ==
CDBOX) {
1070 double x1,x2,y1,y2,d0,d1,d2,d3,
w;
1073 if (Delta < 10) Delta = 10;
1095 if (!
InBox(X,Y,&BB))
continue;
1108 d3 = (d2 - d1)/(2*sqrt(d0));
1109 w = (d1+d2)/2 - d0/4 - d3*d3;
1111 if (w <= (
long)Delta*Delta) {
1113 d1 = sqrt(fabs(d1-w)/d0);
1114 xy[0] = Pair->
pX + (Pair->
pSucc->
pX - Pair->
pX)*d1;
1115 xy[1] = Pair->
pY + (Pair->
pSucc->
pY - Pair->
pY)*d1;
1136 double Xp,Yp,
R,Theta,ThetaLast,Sum,zz;
1140 for (p = Path; p !=
NULL; p = p->
pSucc) {
1144 R = sqrt(Xp*Xp + Yp*Yp);
1145 if (R <= Delta)
return (
True);
1149 Theta = 2*
M_PI + Theta;
1152 Theta =
M_PI - Theta;
1154 zz = (Theta - ThetaLast);
1161 if (fabs(Sum) >= 1.99*
M_PI)
return (
True);
1178 for (; Path !=
NULL; Path = Path->pSucc) {
1180 Line.
kaTop = Path->pY;
1193 struct
ka *Line,*BB;
1200 LBB.
kaTop = BB->kaTop;
1207 LBB.
kaLeft = BB->kaRight;
1212 LBB.
kaTop = BB->kaBottom;
1225 struct
ka *Line,*BB;
1227 struct ka LineBB,MBB;
1249 if (Line->kaLeft == Line->kaRight || Line->kaBottom == Line->kaTop)
1252 if (BB->kaBottom == BB->kaTop) {
1254 X = (BB->kaBottom - Line->kaBottom)*
1255 ((
double)(Line->kaRight - Line->kaLeft)/
1256 (Line->kaTop - Line->kaBottom)) +
1262 Y = (BB->kaLeft - Line->kaLeft)*
1263 ((
double)(Line->kaTop - Line->kaBottom)/
1264 (Line->kaRight - Line->kaLeft))
struct prpty * sPrptyList
void SQInsert(struct o *Pointer)
void Selection(struct ka *AOI)
static struct ks * select_items()
struct ka * kvCoarseWindow
static void redisplay_edges()
#define COARSEVIEWPORTONLY
#define Max(Dragon, Eagle)
#define Min(Dragon, Eagle)
static struct ks * which_cell()
long * InPath(int Delta, struct p *Path, long X, long Y)
union prp_data * prpty_Data
void SelectTypes(char *Types)
static int overlap_path()
void RedisplayAfterInterrupt()
static int overlap_line()
#define UpdateBB(BB2, BB1)
static void sq_display_selected()
void Sel(int *LookedAhead)
static int is_BB_visible()
static void sq_delete_dups()
int kpEnableSelectQRedisplay
struct prpty * prpty_Succ
void FBSetRubberBanding()
static int point_in_poly()
void Area(int *LookedAhead)
int AreTypesInQ(char *Types)
void SQDelete(struct o *Pointer)
void SQDesel(char *Types)
void ShowPrompt(char *str)
#define SwapInts(Dragon, Eagle)
#define HighlightingColor