Hello,
I am trying to create a nice parametric zebra crossing family but am kinda stuck and can really need some help.
I want to make it so that
1. all spacings (painted and blank) are of the same width, using a MIN and MAX values for that to abide to road markings regulations.
1. the first and last spacing are always blank.
I send my current family attached.
Note: I have created it Face based so that it attaches to floor elements better regardless on whether they are flat or sloped.
Many thanks for your help
Gelöst! Gehe zur Lösung
Gelöst von tuuletin. Gehe zur Lösung
Gelöst von tuuletin. Gehe zur Lösung
Hello, dear, ![]()
check the attached. I also modified your nested family.
I have given names of new parameters starting with DDD.
To use the family, just fill "Max", "Min" (type parameters), "Crossing Width" and "Crossing Length" (instance parameters). ![]()
Hello,
Thank you very much but the revised family is still not being able to have spaces of the same size at both ends.
See image below. Grips are matching both sides of the road but there is a wider gap at the top. And the gaps between stripes are not of the same width of the stripes themselves.
have a look at this thread ;
the goal here was very similar to what you are trying to do but it's more complex than you might at first think but still very doable. Anyway have a look at the examples posted and see if it makes sense for your scenario.
k.
Yes, something has gone wrong in a project.
Have a look right now.
But if you open the family, it works perfectly in the family editor...
This works fine now, please, check the attached family.
Changed the parameter dimension and delete another parameter.
updated also, the minimum possible value or "Crossing Length" parameter is 2354.0 (or you get an error). Then, if you need smaller values, some revision of the family is needed.
Awesome!
I am struck by the simplicity of it. Even though I cannot fully understand what some bits of the formulas are doing.
Also, I believe the Second Step parameter is leftover from the previous revised version. I have removed it and it seems to be working fine as well.
Thank you very much for this. I only have one additional request.
As I am the type of person who rather "learn how to fish" than just been given the fish, could I ask you to elaborate on what was your reasoning to get to this solution?
Me and my line manager were trying to sort it out by rounding up or down numbers to get odd stripes in the middle. But only to some frustration. I am very pleased to see a clean cut solution such as yours.
Many thanks once again
That's quite nice, although as you say it breaks at certain points.
The solution I looked at before (in the linked thread) effectively takes a set stripe width and then takes up the difference at the ends. This gives a visual consistency but it is a lot more complex than this solution.
Nice work.
Hey,
there are two way to eliminate this error:
1. To modify the family. But finally you will get an error in any case, not with 2354, but with 1000, or 50, or 2.
2. To add one more intermediate parameter to protect family from incorrect parameters.
Crossing Length (manual) Crossing Length (selected)
Your desired length you put into "Crossing Length (manual)". For formula of "Crossing Length (selected)" put
if([Crossing Length (manual)] < 2354, 2354, [Crossing Length (manual)])
So, if you input something less than 2354, the value of "Crossing Length (selected)" will always be higher, than 2354 (or any number you want). This will protect you from a geometry changing error.
![]()
@Anonymous wrote:
could I ask you to elaborate on what was your reasoning to get to this solution?
Just make a plan, what you want to get ![]()
1. All stripes and blanks must be the same length.
2. For any one stripe you have one blank. For all stripes and blanks you have one additional topmost blank (or the lowest blank).
3. You need to get the number of stripes (and for a stripe you have a blank + additional blank). You ranged the length of stripes 500...715. What to do?
4. Let's find, how many stripes+blanks with the minimum length you can get — X = Crossing Length / 500.
5. Let's find, how many stripes+blanks with the maximum length you can get — Y = Crossing Length / 715.
6. You have two possible numbers (not integer) of stripes+blanks X and Y. Clearly, needed amount is integer number and somewhere in the range X...Y.
7. Let's take the amount somewhere in the middle X...Y → Z = (X + Y) / 2. This is put into integer parameter of revit (it automatically rounds). But this is the number of all stripes and blanks. So, take Z2 = (Z - 1) / 2. Z2 is the parameter of stripes array now. ("-1" to get correct down-rounding). Here, you take the amount of all stipes+blanks + 1 topmost (or the lowest) stripe, decrease by 1, and divide by 2. Now you get the number of stripes.
8. Find the needed stripe/blank length: Crossing Length / (2*Z2 + 1). 2*Z2 — length of all stripes + blanks, "+1" for the topmost (or the lowest) blank.
9. Now, you have Crossing Length/Width, the amount of stipes (for array), the length of a stripe/blank. Length of stripes/blanks is in the range 500...715.
10. Make family geometry ![]()
Once again, struck by the excelence on the solution.
Also, very thankful for taking the time to explain it.
![]()
How about this one? Full parametric - https://designdiagonal.gumroad.com/l/Pedestrian-Crosswalk-Stripe
Made that crosswalk family.
Fully parametric, has all the layout types already setup.
Layout uses a combination of the visibility parameters to make some of the shapes.
Sie finden nicht, was Sie suchen? Fragen Sie die Community oder teilen Sie Ihr Wissen mit anderen.