00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <stdio.h>
00017 #include <math.h>
00018
00019 #include "global.h"
00020 #include "data.h"
00021 #include "change.h"
00022 #include "undo.h"
00023
00024 #define THERMAL_STYLE 4
00025
00026 static int changed = 0;
00027
00028
00029
00030 #if 0
00031 static void *
00032 init_line (LayerTypePtr Layer, LineTypePtr Line)
00033 {
00034 ListStart (LINE_TYPE, NULL, Line, NULL);
00035 return Line;
00036 }
00037
00038 static void *
00039 init_via (PinTypePtr Via)
00040 {
00041 ListStart (VIA_TYPE, NULL, Via, NULL);
00042 return Via;
00043 }
00044
00045 static void *
00046 init_pin (ElementTypePtr Element, PinTypePtr Pin)
00047 {
00048 ListStart (PIN_TYPE, Element, Pin, NULL);
00049 return Pin;
00050 }
00051
00052 static void *
00053 init_pad (ElementTypePtr Element, PadTypePtr Pad)
00054 {
00055 ListStart (PAD_TYPE, Element, Pad, NULL);
00056 return Pad;
00057 }
00058
00059 static void *
00060 init_arc (LayerTypePtr Layer, ArcTypePtr Arc)
00061 {
00062 ListStart (ARC_TYPE, Layer, Arc, NULL);
00063 return Arc;
00064 }
00065
00066 static ObjectFunctionType init_funcs = {
00067 init_line,
00068 NULL,
00069 NULL,
00070 init_via,
00071 NULL,
00072 NULL,
00073 init_pin,
00074 init_pad,
00075 NULL,
00076 NULL,
00077 init_arc,
00078 NULL
00079 };
00080 #endif
00081
00082 static int
00083 joinfound (int argc, char **argv, int x, int y)
00084 {
00085 int TheFlag = FOUNDFLAG;
00086
00087 changed = 0;
00088
00089
00090 #if 0
00091 TheFlag = FOUNDFLAG;
00092 SaveFindFlag (TheFlag);
00093 InitConnectionLookup ();
00094 ResetConnections (False);
00095 SelectedOperation (init_funcs, False, LINE_TYPE | ARC_TYPE | PIN_TYPE | VIA_TYPE | PAD_TYPE);
00096 DoIt (true, False);
00097 #endif
00098
00099 VISIBLELINE_LOOP (PCB->Data);
00100 {
00101 if (TEST_FLAG (TheFlag, line))
00102 {
00103 ChangeObjectJoin (LINE_TYPE, layer, line, line);
00104 changed = true;
00105 }
00106 }
00107 ENDALL_LOOP;
00108
00109 VISIBLEARC_LOOP (PCB->Data);
00110 {
00111 if (TEST_FLAG (TheFlag, arc))
00112 {
00113 ChangeObjectJoin (ARC_TYPE, layer, arc, arc);
00114 changed = true;
00115 }
00116 }
00117 ENDALL_LOOP;
00118
00119 if (PCB->PinOn)
00120 ELEMENT_LOOP (PCB->Data);
00121 {
00122 PIN_LOOP (element);
00123 {
00124 if (TEST_FLAG (TheFlag, pin))
00125 {
00126 ChangeObjectThermal (PIN_TYPE, element, pin, pin, THERMAL_STYLE);
00127 changed = true;
00128 }
00129 }
00130 END_LOOP;
00131 }
00132 END_LOOP;
00133
00134 if (PCB->ViaOn)
00135 VIA_LOOP (PCB->Data);
00136 {
00137 if (TEST_FLAG (TheFlag, via))
00138 {
00139 ChangeObjectThermal (VIA_TYPE, via, via, via, THERMAL_STYLE);
00140 changed = true;
00141 }
00142 }
00143 END_LOOP;
00144
00145
00146 #if 0
00147 ResetConnections (False);
00148 FreeConnectionLookupMemory ();
00149 RestoreFindFlag ();
00150 #endif
00151
00152 gui->invalidate_all ();
00153
00154 if (changed)
00155 IncrementUndoSerialNumber ();
00156
00157 return 0;
00158 }
00159
00160 static HID_Action joinfound_action_list[] = {
00161 {"JoinFound", NULL, joinfound,
00162 NULL, NULL}
00163 };
00164
00165 REGISTER_ACTIONS (joinfound_action_list)
00166
00167 void
00168 pcb_plugin_init()
00169 {
00170 register_joinfound_action_list();
00171 }