This perl script might do the trick. Given two points and a radius it will return the type 1 line to draw a cylinder of radius rad between the two points.

Code:

`sub help {`

print "

Usage: CyliPoints.pl x1 y1 z1 x2 y2 z2 rad

(all points must be specified)

Returns the ldraw code for a cyli prim of radius rad

pointing from (x1,y1,z1) to (x2,y2,z2)

";

}

use Math::Trig;

$pi=3.141592635;

sub pointstr {

my ($x,$y,$z)=@_;

return sprintf("%.3f %.3f %.3f ", $x, $y, $z);

}

sub matstr {

my ($M11,$M12,$M13,$M21,$M22,$M23,$M31,$M32,$M33)=@_;

return sprintf("%.4f %.4f %.4f ", $M11, $M12, $M13)

.sprintf("%.4f %.4f %.4f ", $M21, $M22, $M23)

.sprintf("%.4f %.4f %.4f ", $M31, $M32, $M33);

}

sub dot {

my ($x1,$y1,$z1,$x2,$y2,$z2)=@_;

return ($x1*$x2+$y1*$y2+$z1*$z2);

}

sub norm {

my ($x,$y,$z)=@_;

$r=sqrt($x*$x+$y*$y+$z*$z);

if ($r>1e-5) {

return ($x/$r,$y/$r,$z/$r,$r);

} else {

return (0,1,0,0);

}

}

if ($#ARGV<6) { &help(); exit; }

my ($x1,$y1,$z1,$x2,$y2,$z2,$rad)=@ARGV;

my $dx=$x2-$x1;

my $dy=$y2-$y1;

my $dz=$z2-$z1;

$rxz=sqrt($dx*$dx+$dz*$dz);

my ($xn,$yn,$zn,$rn)=&norm($dx,$dy,$dz);

my ($xp,$yp,$zp,$rp)=&norm($rxz,$dy,0);

my ($xnp,$ynp,$znp)=&norm($dx,0,$dz);

my ($xpp,$ypp,$zpp)=&norm($xp,0,$zp);

$angxy=&acos(&dot(0,1.0,0,$xp,$yp,$zp));

$angxz=&acos(&dot($xnp,0,$znp,$xpp,0,$zpp));

printf("0 // Angle in xy plane: %.4f\n",$angxy/$pi*180.0);

printf("0 // Angle in xz plane: %.4f\n",$angxz/$pi*180.0);

$c1=cos($angxy);

$s1=sin($angxy);

$c2=cos($angxz);

$s2=sin($angxz);

$M11=$c1*$c2*$rad;

$M12=$s1*$c2*$rn;

$M13=-$s2*$rad;

$M21=-$s1*$rad;

$M22=$c1*$rn;

$M23=0;

$M31=$c1*$s2*$rad;

$M32=$s1*$s2*$rn;

$M33=$c2*$rad;

print "1 16 ".&pointstr($x1,$y1,$z1)." "

.&matstr($M11,$M12,$M13,$M21,$M22,$M23,$M31,$M32,$M33)

."4-4cyli.dat\n"