// - Helpers ------------------------------ // Some parameters for arrows: #declare ArrowHeadLength = 0.25; #declare ArrowHeadWidth = 0.05; #declare ArrowTailWidth = 0.01; #declare ArrowColor = color rgb <0.0,0.0,1.0>; // Arrow with one head at vEnd: #macro Arrow(vStart,vEnd) #local dv = vEnd-vStart; #local ldv = VDist(vStart,vEnd); union { cylinder { vStart, vStart + VWith_Len( dv, ldv-ArrowHeadLength ), ArrowTailWidth } cone { vEnd, 0.0, vEnd-VWith_Len( dv, ArrowHeadLength ), ArrowHeadWidth } texture { pigment { ArrowColor } } } #end // Arrow with two heads: #macro Arrow2(vStart,vEnd) #local dv = vEnd-vStart; #local ldv = VDist(vStart,vEnd); union { cylinder { vStart + VWith_Len( dv, ArrowHeadLength ), vStart + VWith_Len( dv, ldv-ArrowHeadLength ), ArrowTailWidth } cone { vEnd, 0.0, vEnd-VWith_Len( dv, ArrowHeadLength ), ArrowHeadWidth } cone { vStart, 0.0, vStart+VWith_Len( dv, ArrowHeadLength ), ArrowHeadWidth } texture { pigment { ArrowColor } } } #end #macro ArrowNoColor(vStart,vEnd) #local dv = vEnd-vStart; #local ldv = VDist(vStart,vEnd); union { cylinder { vStart, vStart + VWith_Len( dv, ldv-ArrowHeadLength ), ArrowTailWidth } cone { vEnd, 0.0, vEnd-VWith_Len( dv, ArrowHeadLength ), ArrowHeadWidth } } #end // Arrow with two heads: #macro Arrow2NoColor(vStart,vEnd) #local dv = vEnd-vStart; #local ldv = VDist(vStart,vEnd); union { cylinder { vStart + VWith_Len( dv, ArrowHeadLength ), vStart + VWith_Len( dv, ldv-ArrowHeadLength ), ArrowTailWidth } cone { vEnd, 0.0, vEnd-VWith_Len( dv, ArrowHeadLength ), ArrowHeadWidth } cone { vStart, 0.0, vStart+VWith_Len( dv, ArrowHeadLength ), ArrowHeadWidth } } #end