I have used both of the extensions mentioned by @Marius, and I can say that they might meet your needs. In my case, they were not robust enough for us to use.
I ended up having to write my own solution, here's the basic flow:
- Created a custom product type
- Custom product type uses it's own template for the
product_type_data block where I can include my own form fields for the user to enter dimensions.
- Custom product type main model class has a
setPrice method where I can use my own calculations to determine the price
- I have an observer on the
sales_quote_add_item event where I can take the request and pass it along to the
- The custom product type's
type model uses
_prepareProduct to add the user's choices as custom options added to the
This should be enough to get you started. Depending on your requirements, there might be additional things to code so that, for example, a user is able to edit their choices when clicking the "edit" button in the cart.