We value your input! Please participate in Archicad 28 Home Screen and Tooltips/Quick Tutorials survey
2023-09-10 05:59 PM
How to obtain the X and Y coordinates of vertices on a curve or line segment in GDL writing, and drive a point on another line segment through these coordinates?
I am planning to use the REVOLVE command to create a jar model. The upper and lower materials of the jar model are different, and the REVOLVE command cannot allocate different materials for the weft part. Therefore, I need to use two REVOLVE commands to create the upper and lower parts of the jar separately, in order to meet the requirements of attaching different materials. As the jar model is parameterized, the upper and lower parts will be linked and seamlessly connected, This requires the vertex at the end of the lower part to drive the starting vertex of the upper part. I think so, but I haven't found a feasible method yet.
Please advise
Solved! Go to Solution.
2023-09-12 03:44 AM
Only the first and last (base & top) surfaces.
Not surfaces in between.
But if you could there would be a gap and you could see into the bottle.
So I am not sure why you would want to do that?
I am lazy.
If you have the REVOLVE for the bottle, post it here and I will show you how to do the cap.
Barry.
2023-09-12 10:43 AM - edited 2023-09-12 10:45 AM
You have a very wide neck on your bottle - I did not alter this.
What I did was took your polylines and paste in the 2d script.
Viewed those in the 2D view.
Placed a marquee around it and copied.
Pasted this in the 2D symbol window.
Created a fill from the result but left a small gap above the y-axis - mask values in REVOLVE can close this gap.
Manually draw the fill from the start working anti-clockwise - this will give you the proper start and end point in the correct order.
Otherwise if you magic wand the fill, you will have to figure out the start and end points and re-arrange them in the script.
I made a fill to represent the neck of the bottle (as I said it is a bit wide, but just went with what you had drawn).
Now select those fills and drag them into the 2D script - this will create code for those polygons.
I could have probably worked from your polygons, but I would have had to work out the order of the points - and as I said before I am lazy!
The polygon generated this way is what you need for the REVOLVEs.
You only need the x,y co-ordinates, so copy then to the 3D script and add the actual REVOLVE command instead of the POLY2
What you should end up with is this.
!!!neck
REVOLVE 7, 360, 1*0+2*0+4*1+8*1+16*1+32*1+64*0,
-0.1553553390593, 0.02035533905933, 1, !!!bottom of cap
-0.1773274563337, 0.02035533905933, 1,
-0.1773274563337, 0.02329906375881, 1,
-0.1773274563337, 0.02329906375881, 1,
-0.1872900866456, 0.02329906375881, 1,
-0.1872900866456, 0.01835533905933, 1,
-0.1553553390593, 0.01835533905933, 1
!!!bottle
REVOLVE 24, 360, 1*1+2*1+4*1+8*1+16*1+32*1+64*0,
-0.009992499015367, 0.001, 1, !!!start point
0.01857142857143, 0.0002857142857143, 900,
0, -48.02837615769, 4001,
0, 0.027, 1,
-0.008, 0.027, 900,
0, 90, 4001,
-0.12, 0.035, 1,
-0.12, 0.005, 900,
0, 45, 4001,
-0.1553553390593, 0.04035533905933, 900,
0, -45, 4001, !!!top of bottle
-0.1553553390593, 0.02035533905933, 1, !!!bottom of cap
-0.1553553390593, 0.01835533905933, 1,
-0.1553553390593, 0.04035533905933, 900,
0, 45, 4001,
-0.1397989898732, 0.02479898987322, 1,
-0.12, 0.005, 900,
0, -45, 4001,
-0.02, 0.033, 1,
-0.02, 0.023, 900,
0, -90, 4001,
-0.01, 0.022, 1,
-0.001708278580815, 0.0002329172141919, 900,
0, 67.25948321345, 4001 !!!end point
Adjusting the masking values to show the top and base for the bottle, but hide for the neck as you want that open.
If you want to close the top, then rearrange the co-ordinates so the first and last points are the 2 co-ordinates for the top of the neck and leave the top and bottom surface mask values as '1'.
You should have a bottle with a wide neck.
Add another REVOLVE for the liquid inside.
If you want to make the bottle size parametric, that is a bit more involved.
You will have to work out the co-ordinates that you want to be parametric and replace them with parameters.
Or you can just use the MUL command to stretch x, y, and/or z axis.
Or just use the bottle objects in the default library?
Have a look at the scripts for the champagne bottle - that is all they have done for that one - REVOLVEs and MULs.
Barry.
2023-09-11 03:10 AM
I am not quite sure I understand your problem.
You must give the coordinates for the curve profile, so you already know them.
So if it was all one material, there would be no issue.
If using two materials, you just break the curve profile into two separate REVOLVEs.
The last point of the first REVOLVE is the first point of the second REVOLVE.
They will both be using the same center (axis) for the revolve, so there should be no issues.
Otherwise can you provide an image showing the problem?
Barry.
2023-09-11 07:30 AM
Hello: Thank you for your attention. That's what you mean, but I don't know how to operate it. Attached are the pictures below.
The length, diameter, and inclination of the bottle cap should all be linked with the bottle body, and when the bottle body changes, the cap also needs to change. To drive the first vertex of the bottle cap with the last vertex of the bottle body.
2023-09-11 08:02 AM
The bottom coordinate for the cap is the same for the top of the glass.
So it would be as if you have one profile, but you just break it where the glass and cap meet.
Barry.
2023-09-11 08:09 AM
Hi @baixiaodong ,
Why not just drawing it in your 2D plan view and drag and dropping the linework in your 2D script ? Then you could just make it parametric by changing the coordinates accordingly. Don't forget to base the sketch around the origin of your plan view.
2023-09-11 10:41 AM
When drawing lines in a plan view, the data of the points is too large and irregular, often exceeding ten decimal places. Additionally, it is not very convenient to parameterize
2023-09-11 04:51 PM
Or is there a possibility that the REVOLVE command can hide rotating faces that do not need to be displayed, and hide the faces generated between two vertices
2023-09-12 03:44 AM
Only the first and last (base & top) surfaces.
Not surfaces in between.
But if you could there would be a gap and you could see into the bottle.
So I am not sure why you would want to do that?
I am lazy.
If you have the REVOLVE for the bottle, post it here and I will show you how to do the cap.
Barry.
2023-09-12 09:34 AM - last edited on 2023-09-13 01:53 AM by Laszlo Nagy
Water needs to be placed inside, and the water and bottle body will interact under the influence of parameters
poly2_ 11,15,
-0.025,0,1,
-0.01,1,800,
-0.01,0.022,1001,
-0.01,0.023,1,
0.01,90,2001,
-0.1,0,301, !Bottle height
-0.1-0.02,0.005,900,
0,45,4001,
0.022,- 45,2001,
0,0,300, ! Bottle mouth height
0,0,-1
poly2_ 10,15, ! Outer bottle
-0.01,0,1,
-0.01,1,800,
0,0.022,1001,
0,0.022+0.005,1,
0.008,90,2001,
-0.1-0.012,0,301,
-0.1-0.02,0.005,900,
0,45,4001,
0.022-0.002,- 45,2001,
0,0,300 ! Bottle mouth height
2023-09-12 10:43 AM - edited 2023-09-12 10:45 AM
You have a very wide neck on your bottle - I did not alter this.
What I did was took your polylines and paste in the 2d script.
Viewed those in the 2D view.
Placed a marquee around it and copied.
Pasted this in the 2D symbol window.
Created a fill from the result but left a small gap above the y-axis - mask values in REVOLVE can close this gap.
Manually draw the fill from the start working anti-clockwise - this will give you the proper start and end point in the correct order.
Otherwise if you magic wand the fill, you will have to figure out the start and end points and re-arrange them in the script.
I made a fill to represent the neck of the bottle (as I said it is a bit wide, but just went with what you had drawn).
Now select those fills and drag them into the 2D script - this will create code for those polygons.
I could have probably worked from your polygons, but I would have had to work out the order of the points - and as I said before I am lazy!
The polygon generated this way is what you need for the REVOLVEs.
You only need the x,y co-ordinates, so copy then to the 3D script and add the actual REVOLVE command instead of the POLY2
What you should end up with is this.
!!!neck
REVOLVE 7, 360, 1*0+2*0+4*1+8*1+16*1+32*1+64*0,
-0.1553553390593, 0.02035533905933, 1, !!!bottom of cap
-0.1773274563337, 0.02035533905933, 1,
-0.1773274563337, 0.02329906375881, 1,
-0.1773274563337, 0.02329906375881, 1,
-0.1872900866456, 0.02329906375881, 1,
-0.1872900866456, 0.01835533905933, 1,
-0.1553553390593, 0.01835533905933, 1
!!!bottle
REVOLVE 24, 360, 1*1+2*1+4*1+8*1+16*1+32*1+64*0,
-0.009992499015367, 0.001, 1, !!!start point
0.01857142857143, 0.0002857142857143, 900,
0, -48.02837615769, 4001,
0, 0.027, 1,
-0.008, 0.027, 900,
0, 90, 4001,
-0.12, 0.035, 1,
-0.12, 0.005, 900,
0, 45, 4001,
-0.1553553390593, 0.04035533905933, 900,
0, -45, 4001, !!!top of bottle
-0.1553553390593, 0.02035533905933, 1, !!!bottom of cap
-0.1553553390593, 0.01835533905933, 1,
-0.1553553390593, 0.04035533905933, 900,
0, 45, 4001,
-0.1397989898732, 0.02479898987322, 1,
-0.12, 0.005, 900,
0, -45, 4001,
-0.02, 0.033, 1,
-0.02, 0.023, 900,
0, -90, 4001,
-0.01, 0.022, 1,
-0.001708278580815, 0.0002329172141919, 900,
0, 67.25948321345, 4001 !!!end point
Adjusting the masking values to show the top and base for the bottle, but hide for the neck as you want that open.
If you want to close the top, then rearrange the co-ordinates so the first and last points are the 2 co-ordinates for the top of the neck and leave the top and bottom surface mask values as '1'.
You should have a bottle with a wide neck.
Add another REVOLVE for the liquid inside.
If you want to make the bottle size parametric, that is a bit more involved.
You will have to work out the co-ordinates that you want to be parametric and replace them with parameters.
Or you can just use the MUL command to stretch x, y, and/or z axis.
Or just use the bottle objects in the default library?
Have a look at the scripts for the champagne bottle - that is all they have done for that one - REVOLVEs and MULs.
Barry.