Typical airplane contains many different openings in its fuselage and wings. Blender has some Boolean commands. You can use them, to create a hole in a mesh, but they can sometimes produce unwanted results. Usually there are problems with the faces around the new edge of intersection. I have found myself many times on deleting the ones, originally created by the Boolean operation. After their removal, I had to create manually a more "regular" face pattern around such a hole.

Ultimately, I concluded, that I need a tool, which would create the common edge of two arbitrary meshes. It was more practical to create the new faces around it manually, not spending time on removing the automatically created ones. So, here is such tool. I have found it useful, maybe you also utilize it.

Since Blender 2.72 there is a similar, standard Intersection (Boolean) command. (Actually in Blender 2.8 you can find it in Edit Mode, in the Faces menu). It resembles this add-on and produces similar results. The difference is that it splits the original faces along the newly created intersection edge, or removes one of the dissected mesh parts.

However, the standard Intersect command and the plugin presented below provide the user different result options. I suggest to use both of them. (This plugin add its commands to a different menu, so there is no conflict). In my daily work I use the standard command when I want to split the mesh faces, and the plugin command when I want to rearrange the mesh topology around the intersection edge.

Here you can download the object_intersection.py add-on file for Blender 2.8.

Here you can download the object_intersection.py add-on file for previous Blender versions (2.5..2.7).

To follow this tutorial, you should install this Intersection add-on into your Blender environment. (Here is the the description, which explains how to do this).

Add-on activation
To use the Intersection command, activate Intersection add-on (you will find it in the Object category) (Fig.1):
Fig. 1. Activation of the Intersection add-on.
Add-on usage (Object Mode)
In Object Mode select two objects for which you want to find the edge of intersection (Fig. 2), in Blender 2.8 open the Object menu (in Blender 2.7: press [W] key, to open the Specials menu):
Fig. 2. Invoking the Intersection command (Blender 2.7).

Select the Intersect command (you can find it at the top of this menu). It opens a dialog box with the options of this operation (Fig. 3):

Fig. 3. The options and result of the Intersect command.

When you click the [OK] button, this script switches Blender into the Edit Mode. It adds the intersection edge loop(s) to the mesh of the active object. This new edge is not connected to any of the mesh faces, and its vertices are selected. Thus, if you are not happy with the result, just press the [X] key to remove it and try again.

Add-on usage (Edit Mode)
This add-on exposes its command also in the Edit Mode. In this mode it intersects the selected and unselected mesh faces (Fig. 4):
Fig. 4. Using the Intersect command in Edit Mode (Blender 2.7)

In Edit Mode , select the faces you want to cut with the others, and then: in Blender 2.8 open the Edges menu (in Blender 2.7 press the [W] key to open the Specials menu). Select the Intersect Faces (in Blender 2.7: Intersect) command from there, so it will add the new edge loop (or loops) to the mesh. You can alter this result using the command options from the Tool options panel.

"Use both meshes" option
The result edge runs through the points where the edges of one mesh intersect the faces of the other. By default the program uses two sets of points. First is built from intersections of active object edges with the faces of the second mesh. The second — from the edge intersection of the second mesh with the faces of the active object. Then both result sets are combined together in one edge (Fig. 5a):
Fig. 5. Comparing results — option Use both meshes turned on (a) and off (b).

If you want to get the edge consisting only points lying on the edges of the active object - turn off the default option Use both meshes. You will get the result that is generally less accurate (Fig. 5b). However, it will be easier to integrate it into the existing grid, because there will be less triangular faces.

"Use selected faces" option
In the case of meshes with a large number of faces, it is worth to select a smaller area for processing (this reduces the computation time). If this command is invoked when the mesh has some marked faces, the script will process only this selected area. (If nothing is selected — whole mesh is processed). This is the default behavior of this plugin, when the option Use selected faces is turned on (Fig. 6):
Fig. 6. Limiting the processed area by selection of the mesh faces.

Use selected faces is enabled by default. If you do not want to limit the scope of the processed meshes - disable it.

In Edit Mode this option is not available. If you want to exclude some faces from this operation - hide them before, using the Hide Selected command ([H]). After completing thei command, you can unhide them ([Alt]-[H] – Show Hidden)

"Use diagonals" option
Fig. 7. An example of incomplete result edge.

The hardest part of the algorithm, used in this plugin, is the fragment responsible for connecting the intersection points into one or more continuous edges. Usually it works fine, but sometimes the errors occur. The chance for such errors is higher, when the result contains several separate edges (Fig. 7):

Fig. 8. Special case — the algorithm for connecting intersection points failed here.

Of course, if there are just a few such errors, you can just quickly correct it, connecting the vertices by hand. Be aware the situations, where the edges of one mesh exactly intersect the edges of the second mesh. That can happen, for example, when you try to find the intersection of two identical cylinders (Fig. 8):

Fig. 9. The correct result, obtained for similar case.

In this particular case, as in Fig. 8, all intersection points have been found, but the script failed to join them into one edge. Of course, if you will use two different cylinders, you will get the correct result (Fig. 9):

In case of problems - remember, usually just a small rotation or displacement of one of the meshes allows the script to connect the edge points properly. As a precaution, I have added to the parameters of the script the Use diagonals option.

During the processing program converts each quadrilateral face mesh into two triangles, connected along the diagonal. The intersection of this diagonal with the mesh faces of the opposite object is calculated, as for the other edges. However, these "diagonal" points are used as helper information, and are not included into the ultimate result - the edge. Neverthless, sometimes we can get in the result an incomplete edge - as on Fig. 10:
Fig. 10. Another example of incomplete result edge.

Sometimes you can improve the result, just turning the Use diagonals option on (Fig. 11):

Fig. 11. The effect of turning Use diagonals option on.
Fig. 12. Result, obtained on the same shapes, but with more mesh faces.

On the other hand - the obtained edge is less "handy" for further work, because now it has twice as many vertices than before. In fact, I left this option "just in case." In this and similar cases can also improve the result by adding additional edges to the meshes (Fig. 12):