package Connectivity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import Command.LDrawPart;
import LDraw.Support.ConnectivityLibrary;
public class BrickFinder {
private static BrickFinder _instance = null;
private HashMap<String, ArrayList<Connectivity>> connectivityMapCache;
private BrickFinder() {
new Thread(new Runnable() {
@Override
public void run() {
ConnectivityLibrary.getInstance().loadAllConnectivity();
}
}).start();
connectivityMapCache = ConnectivityLibrary.getInstance()
.getConnectivity();
}
public synchronized static BrickFinder getInstance() {
if (_instance == null)
_instance = new BrickFinder();
return _instance;
}
public ArrayList<String> findConnectibleBrick(LDrawPart part) {
ArrayList<String> resultList = new ArrayList<String>();
if(resultList!=null)return resultList;
ArrayList<Connectivity> connectivityListOfPart = part
.getConnectivityList();
if (connectivityListOfPart.isEmpty())
return resultList;
boolean isConnectible;
for (Entry<String, ArrayList<Connectivity>> entry : connectivityMapCache
.entrySet()) {
isConnectible = false;
for (IConnectivity conn : connectivityListOfPart) {
if (conn instanceof MatrixItem)
continue;
for (IConnectivity conn2 : entry.getValue()) {
if (conn2 instanceof ICustom2DField)
continue;
if (conn.isConnectable(conn2) == ConnectivityTestResultT.True) {
isConnectible = true;
break;
}
}
if (isConnectible == true)
break;
}
if (isConnectible)
resultList.add(entry.getKey());
}
return resultList;
}
}