Libraries & objects
About Archicad and BIMcloud libraries, their management and migration, objects and other library parts, etc.
SOLVED!

Slopes with array

Anonymous
Not applicable
Hello everybody.

I draw roofing systems for flat roofs where we use insulation to build slopes.
Today, thank you for making the top layer it works ok. To create slanting plates, we use the wall tool with a profile. Profile has slope 1:40, 1:60 and 1: 100.
1:40 has 2 plates and 1:60 has 3 plates while 1: 100 has 6 plates.
The structure below uses the Slab tool.
See attached PDF file.

Using this method cumbersome so I thought I would create an object that we can only pull out with hotspots.

What I have made is the profile of the slant to call it in 3D, then I thought I could use the array to extend it from plate 1 and then plate 2 and on plate 3, plate 1 will reappear after plate 2. It fades almost correctly but from plate 2 it comes to plate 1 and flat 2 at once.


What I want is that I can stretch out to get one and one.

Then the question is what I'm doing wrong.

All help is of interest.
1 ACCEPTED SOLUTION

Accepted Solutions
Solution
sinceV6
Advocate
Hi.
This is only one way to solve it.

Try this:

!!!Plate 1:40 Plate nr. 1 and 2
!============================================================================================================

FOR i = 1 TO NUM
	PEN Linje1
	sect_attrs{2}Linje1
	SECT_FILL Fyll, pen_t, pen_g, pen_b
	MATERIAL smat

IF i MOD 2 # 0 then

if Plate_type = 1 then
call "Plate_macro" parameters ZZYZX = 0.02, v = 1.43, ac_bottomlevel = 0.060, X1 = X1, Y1 = Y1, B = B

endif
endif


!!!Plate nr. 2

!!ADDY AV1
	PEN Linje1
	sect_attrs{2}Linje1
	SECT_FILL Fyll1, pen_t, pen_g, pen_b
	MATERIAL smat

if i MOD 2 = 0 THEN

if Plate_type = 1 then
	call "Plate_macro" parameters   ZZYZX = 0.05, v = 1.43, ac_bottomlevel = 0.060, X1 = X1, Y1 = Y1, B = B

endif
ADDZ 0.060
endif


!!ADDZ 0.060
ADDY AV1
Next i 
Also, you should change your "NUM" parameter to an integer type.

You can also simplify the 2D script, since you are placing a project2 command inside a loop.
2D script:

HOTSPOT2 0,0
unID = 1000
HOTSPOT2 0,		0, 		unID, 	B, 	1+128: unID=unID+1  	!!! BASE
HOTSPOT2 0, 	B,		unID,	B,	2: unID=unID+1 	!!! Move
HOTSPOT2 0,		-1,		unID,	B,	3: unID=unID+1	!!! Ref	

unID = 2000
HOTSPOT2 0,		0, 		unID, 	X1, 1+128: unID=unID+1  	!!! BASE
HOTSPOT2 X1, 	0,		unID,	X1,	2: unID=unID+1 	!!! Move
HOTSPOT2 -1,		0,		unID,	X1,	3: unID=unID+1	!!! Ref	



!unID = 3000
!HOTSPOT2 0.600,		0, 		unID, 	Y1, 1+128: unID=unID+1  	!!! BASE
!HOTSPOT2 0.600, 	Y1,		unID,	Y1,	2: unID=unID+1 	!!! Move
!HOTSPOT2 0,		-1,		unID,	Y1,	3: unID=unID+1	!!! Ref	


project2{2} 3, 270, 2
Hope that's what you are after.
Best regards.

View solution in original post

11 REPLIES 11
Anonymous
Not applicable
Seriously, nobody knows how to do this.
Anonymous
Not applicable
Hello again
Perhaps I've explained badly what I want to get to.

What I'm trying to get is that I can stretch with a hotspot that started from Block No. 1 and Block No. 2 so the first flat will come up again. But what happens to me is that I will not get back Block # 1 before I have stretched the hotspot to block No. 2 to come up, then Block No. 1 and Plat No. 2 will arrive at the same time.
So what I want is that Block No. 1 should be able to come up alone before Block No. 2 comes up.

I hope you realize I need help.

Please help me because I'm completely stuck
Lingwisyer
Guru
Just clarifying. Bit confused by your definitions within your descriptions...

Your object by default shows Insulation Layer 1 that creates your incline. You stretch it and when you get to Spot X Insulation Layer 2 appears. etc.

Your issue is that Insulation Layer 1 is not appearing until your reach Spot X at which point Insulation Layer 2 appears (as it should)? Is that first layer of insulation the only one not appearing as it should or is something off when you reach Spot Y?


Ling.

AC22-23 AUS 7000Help Those Help You - Add a Signature
Self-taught, bend it till it breaksCreating a Thread
Win11 | i9 10850K | 64GB | RX6600 Win10 | R5 2600 | 16GB | GTX1660
Anonymous
Not applicable
Thank you for answering
What I want is that the blocks will appear when I stretch out hotspot Y direction will come up one and one.

That I should get up from 0 m. Block 1 and then block 1 and 2 of 1.2 m. I'll be able to get up the block 1, 2 and 3 at 2.4 m., Etc.

If you're kind of trying out what I've done, I think you understand what I'm trying to tell.
Lingwisyer
Guru
I'm not versed enough in scripting to actually solve your problem as far as I can tell, I'm just trying to break down your problem for others who might be reading though this.

Repeating my last question: Is that first layer of insulation the only one not appearing as it should or is something off when you reach Spot Y? Do Insulation Layer 3, 4, etc. appear as you keep stretching?


Ling.

AC22-23 AUS 7000Help Those Help You - Add a Signature
Self-taught, bend it till it breaksCreating a Thread
Win11 | i9 10850K | 64GB | RX6600 Win10 | R5 2600 | 16GB | GTX1660
Anonymous
Not applicable
Thanks again Ling
If you're thinking, the tile floor is different width of the tiles in the floor plan to want the possibility of stretching with hotspot in Y direction for multiple copies. To see them appear 1 and 1 and not as couple as I have got it. So it will be possible to quit the Even numbers and odd numbers of copies
sinceV6
Advocate
Hi.
After a very quick look inside, although I would rearrange some things, I think the main issue your are trying to solve seems to be related to the fact that both plates are created in the same FOR - NEXT loop. It could work this way, but I see the same condition for both plates (e.g., plate #2 inside the same FOR loop gets called IF B>=AV, but so is plate #1, effectively calling the plate macro twice).

There are many ways you could solve it, like create two different loops or testing each "i" in the loop to know if it should create plate #1 or #2, or checking the cumulative Y distance to see if plate #2 fits.

Hope that helps.
Best regards.
Anonymous
Not applicable
Thanks for the answer sinceV6

Now I've tested what you saw but get the same as before.

Perhaps you or someone else has another solution to this problem

Laurits

!!!Plate 1:40 Plate nr. 1 and 2
!============================================================================================================
!!!Plate nr. 1
FOR I = 1 TO NUM

	PEN Linje1
	sect_attrs{2}Linje1
	SECT_FILL Fyll, pen_t, pen_g, pen_b
	MATERIAL smat

if Plate_type = 1 then
	call "Plate_macro" parameters   ZZYZX = 0.02, v = 1.43, ac_bottomlevel = 0.060, X1 = X1, Y1 = Y1,
	B = B

endif
	ADDZ 0.060
	ADDY AV1*2

Next i 
Del top

!!!Plate nr. 2
	ADDY AV1
FOR K = 1 TO NUM2 
	PEN Linje1
	sect_attrs{2}Linje1
	SECT_FILL Fyll1, pen_t, pen_g, pen_b
	MATERIAL smat


if Plate_type = 1 then
call "Plate_macro" parameters ZZYZX = 0.05, v = 1.43, ac_bottomlevel = 0.060, X1 = X1, Y1 = Y1,
	B = B

endif
	ADDZ 0.0
	ADDY AV1*2
Next K 
Solution
sinceV6
Advocate
Hi.
This is only one way to solve it.

Try this:

!!!Plate 1:40 Plate nr. 1 and 2
!============================================================================================================

FOR i = 1 TO NUM
	PEN Linje1
	sect_attrs{2}Linje1
	SECT_FILL Fyll, pen_t, pen_g, pen_b
	MATERIAL smat

IF i MOD 2 # 0 then

if Plate_type = 1 then
call "Plate_macro" parameters ZZYZX = 0.02, v = 1.43, ac_bottomlevel = 0.060, X1 = X1, Y1 = Y1, B = B

endif
endif


!!!Plate nr. 2

!!ADDY AV1
	PEN Linje1
	sect_attrs{2}Linje1
	SECT_FILL Fyll1, pen_t, pen_g, pen_b
	MATERIAL smat

if i MOD 2 = 0 THEN

if Plate_type = 1 then
	call "Plate_macro" parameters   ZZYZX = 0.05, v = 1.43, ac_bottomlevel = 0.060, X1 = X1, Y1 = Y1, B = B

endif
ADDZ 0.060
endif


!!ADDZ 0.060
ADDY AV1
Next i 
Also, you should change your "NUM" parameter to an integer type.

You can also simplify the 2D script, since you are placing a project2 command inside a loop.
2D script:

HOTSPOT2 0,0
unID = 1000
HOTSPOT2 0,		0, 		unID, 	B, 	1+128: unID=unID+1  	!!! BASE
HOTSPOT2 0, 	B,		unID,	B,	2: unID=unID+1 	!!! Move
HOTSPOT2 0,		-1,		unID,	B,	3: unID=unID+1	!!! Ref	

unID = 2000
HOTSPOT2 0,		0, 		unID, 	X1, 1+128: unID=unID+1  	!!! BASE
HOTSPOT2 X1, 	0,		unID,	X1,	2: unID=unID+1 	!!! Move
HOTSPOT2 -1,		0,		unID,	X1,	3: unID=unID+1	!!! Ref	



!unID = 3000
!HOTSPOT2 0.600,		0, 		unID, 	Y1, 1+128: unID=unID+1  	!!! BASE
!HOTSPOT2 0.600, 	Y1,		unID,	Y1,	2: unID=unID+1 	!!! Move
!HOTSPOT2 0,		-1,		unID,	Y1,	3: unID=unID+1	!!! Ref	


project2{2} 3, 270, 2
Hope that's what you are after.
Best regards.