As I commented, this is totally doable in tikz:
The simpler part is to pick the points where you want to draw in the vectors. For instance, once you have the coordinate the (Origin), (Bone) and (Btwo) defined you could simple draw the vector as \draw (Origin) -- (Bone);. Then the vector from the origin to 2b1+b2 would simply be \draw ($2*(Bone)+(Btwo)$).
The harder part is to figure out how you want to specify where the black circles are located. One way would be to do some sort of loop. Alternatively, you could specify a family of straight lines draw them dashed, and compute the intersections with the others to place the small circles. Or, it seems that the lattice points are draw along the sum of the vectors. So you could do something like:
\coordinate (vec) at ($(Bone)+(Btwo)$);
\foreach \i in {-1, 0, 1, 2, 3} {
\draw [fill = black]($\i*(vec)$) circle (3pt);
}
where the numbers were chosen to determine what multiples of (vec) that I wanted to place the circles.
Now just need to add some logic to determine how to draw the dashed lines. I'd recommend using a toggle from the etoolbox package to determine if you are at the first point in the list, and use a \draw [dashed] from the last point to the current point (if you are not at the first point in the sequence). There are many other ways to do conditionals, and a good reference is available at this question: LaTeX conditional expression

Code:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}% neded for coordinate calculations
\begin{document}
\begin{tikzpicture}
\coordinate (Origin) at (0,0);
\coordinate (XAxisMin) at (-3,0);
\coordinate (XAxisMax) at (5,0);
\coordinate (YAxisMin) at (0,-2);
\coordinate (YAxisMax) at (0,5);
\coordinate (Bone) at (1,2);
\coordinate (Btwo) at (2,-1);
\draw [thin, gray,-latex] (XAxisMin) -- (XAxisMax);% Draw x axis
\draw [thin, gray,-latex] (YAxisMin) -- (YAxisMax);% Draw y axis
% Latice points along b1+b2
\coordinate (vec) at ($(Bone)+(Btwo)$);
\foreach \i in {-1, 0, 1, 2, 3} {
\draw [fill = black]($\i*(vec)$) circle (3pt);
}
% Draw the vectors
\draw [ultra thick,-latex,red] (Origin) -- (Bone) node [above left] {$b_1$};
\draw [ultra thick,-latex,red] (Origin) -- (Btwo) node [below right] {$b_2$};
\draw [ultra thick,-latex,red] (Origin) -- ($(Bone)+(Btwo)$) node [below right] {$b_1+b_2$};
\draw [ultra thick,-latex,red] (Origin) -- ($2*(Bone)+(Btwo)$) node [above left] {$2b_1+b_2$};
\draw [thin,-latex,red, fill=gray, fill opacity=0.3] (Origin) -- ($2*(Bone)+(Btwo)$) --
($3*(Bone)+2*(Btwo)$) -- ($(Bone)+(Btwo)$) -- cycle;
\end{tikzpicture}
\end{document}
TikZ. It comes down to how do you want to specify the points. I they can be specified within a loop that would be great. Then it is a simple matter of connecting the dots. If you make a start am sure that you can get help here if you get stuck. – Peter Grill Jan 28 '12 at 03:50