RhinoShack-login   RhinoShack-login   Rhino 3d help   RhinoShack-login

 

Probleme dans mon script

Plus d'informations
il y a 1 an 4 mois #172 par onlyforpeace
onlyforpeace a créé le sujet : Probleme dans mon script
Bonjour,

pourquoi mon script ne veux pas fonctionner:
Call Main()
Sub Main()

Dim layerp,arrlayerf,strlayerf
Dim strobj, surfobj
Dim objmesh,objarea,objaream
Dim tableau,n
layerp = rhino.getlayer
arrlayerf = rhino.layerchildren(layerp)
n = 0
ReDim tableau (n,1)
For Each strlayerf In arrlayerf

ReDim Preserve tableau (n,1)
'selection de l'objet
strobj = Rhino.ObjectsByLayer(strlayerf)
tableau(n, 0) = strlayerf

'calcul de la surface
objmesh = Rhino.MeshObjects(strobj, -1)
objarea = Rhino.MeshArea(objmesh)
objaream = Round(objarea(1) / 1000000, 2)
Rhino.DeleteObject objmesh(0)
tableau(n, 1) = objaream
n = n + 1
Next
End Sub

il ne veux pas redimensionner mon array "tableau" avec la fonction "redim preserv"

suite à ce script, j'aimerais exporter ce tableau vers un tableur excel, pensez vous que cela soit possible?

je pensais passer par la fonction copytoclipboard, puis coller ça sous excel...

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois - il y a 1 an 4 mois #173 par SwissRhino
SwissRhino a répondu au sujet : Probleme dans mon script
Bonjour,
Plusieurs problèmes…

Tout d’abord, en VB script, avec des tableaux (arrays) “dynamiques” multidimensionnels, on ne peut pas redimensionner que le dernier « étage »… Les outils pour travailler avec des arrays en VB script sont très pauvres, une bonne raison de passer sur Python.

Mais dans votre cas, comme vous savez déjà la taille de « arrlayerf », un tableau multidimensionnel est inutile. Vous pouvez travailler simplement avec un « nested array » c.-à-d. un tableau des tableaux.
Call Main()
Sub Main()
	Dim layerp,arrlayerf,strlayerf
	Dim arrobjs, surfobj
	Dim objmesh,objarea,objaream
	Dim tableau,nest(1), i
	layerp = rhino.getlayer
	arrlayerf = rhino.layerchildren(layerp)
	If IsArray(arrlayerf) Then
		ReDim tableau(Ubound(arrlayerf))
		For i=0 To Ubound(arrlayerf)
			nest(0) = arrlayerf(i)
			'selection de l'objet
			arrobjs = Rhino.ObjectsByLayer(arrlayerf(i))
			'calcul de la surface
			objmesh = Rhino.MeshObjects(arrobjs, -1)
			objarea = Rhino.MeshArea(objmesh)
			objaream = Round(objarea(1) / 1000000, 2)
			Rhino.DeleteObjects(objmesh)
			nest(1) = objaream
			tableau(i) = nest
		Next		
	End If
End Sub

Pour le reste, il est possible de communiquer directement avec Excel depuis Rhino, mais c’est un peu compliqué. Autrement, soit copier sur le clipboard avec « ClipboardText », soit ouvrir une fenetre « TextOut » et copier le texte, soit écrire un fichier texte avec « WriteTextFile » et importer depuis Excel. Le formattage est critique dans tous les cas afin que le fichier soit correctement importé en Excel.

--Mitch
Dernière édition: il y a 1 an 4 mois par SwissRhino.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois - il y a 1 an 4 mois #174 par onlyforpeace
onlyforpeace a répondu au sujet : Probleme dans mon script
merci pour tout mitch.;... mais comment tu connais tous ça... c'est quoi ton taf pour maitriser à ce point ...

merci encore...

mais je rencontre un nouveau problème... le nimbre de sous calque étant variable d'un projet à un autre, je ne sais pas comment gérer la chaine de carcatère....
si je veu utiliser une chaine de carc=atère type:

Calque 1 ";"surface calque 1 "àla ligne" calque2 " ;" surface calque 2" à la ligne" ...calque Ubound(arrlayerf) ";" surface calque Ubound(arrlayerf)

je ne vois pas comment gérer ce truc là....
Dernière édition: il y a 1 an 4 mois par onlyforpeace.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois #175 par SwissRhino
SwissRhino a répondu au sujet : Probleme dans mon script

c'est quoi ton taf pour maitriser à ce point

Bon, ben, je fais un peu près ça presque tous les jours… depuis un certain nombre d’années… B)

je ne sais pas comment gérer la chaine de carcatère...

Pour chaque sous-calque, je suppose vous aurez une ligne comme « nom_du_sous-calque, chiffre »
Pour créer une chaine de characteres (« string » ) multiligne, il faut rajouter des sauts-de-ligne (« carriage returns »). En VBscript, on peut utiliser vbNewLine pour forcer un saut de ligne. Exemple:
Option Explicit
Call Test()
Sub Test()
	Dim names(3),dates(3),myString,i
	names(0) = "John"
	names(1) = "Paul"
	names(2) = "George"
	names(3) = "Ringo"
	dates(0) = "09.10.40"
	dates(1) = "18.06.42"
	dates(2) = "25.02.43"
	dates(3) = "07.07.40"
	
	myString = ""
	For i=0 To 3
		myString = myString & names(i) & ": " & dates(i) & vbNewLine
	Next
	Rhino.TextOut myString	
End Sub

--Mitch

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois #176 par onlyforpeace
onlyforpeace a répondu au sujet : Probleme dans mon script
merci j'ai réussi à avoir ce que je voulais....

mais maintenant j'ai un souci hors rhino... j'ai bien la fenêtre qui s'ouvre avec la bonne chaine de charcactère, mais quand je copie/colle vers excel, il ne trouve pas le changement de colonne....

si je copie/colle vers un document text ( bloc note), puis re copie /colle vers excel, il trouve le changement de colonne .
mais en direct ça marche pas...
une idée?

pour info le script:
Option Explicit
'Script written by <insert name>
'Script copyrighted by <insert company name>
'Script version vendredi 5 février 2016 15:36:22
Call Main()
Sub Main()
	Dim layerp,arrlayerf,strlayerf
	Dim arrobjs, surfobj
	Dim objmesh,objarea,objaream
	Dim tableau,nest(1), i
	Dim mytext
	layerp = rhino.getlayer
	arrlayerf = rhino.layerchildren(layerp)
	If IsArray(arrlayerf) Then
		ReDim tableau(Ubound(arrlayerf))
		For i=0 To Ubound(arrlayerf)
			nest(0) = arrlayerf(i)
			'selection de l'objet
			arrobjs = Rhino.ObjectsByLayer(arrlayerf(i))
			'calcul de la surface
			objmesh = Rhino.MeshObjects(arrobjs, -1)
			objarea = Rhino.MeshArea(objmesh)
			objaream = Round(objarea(1) / 1000000, 2)
			Rhino.DeleteObjects(objmesh)
			nest(1) = objaream
			tableau(i) = nest
		Next		
	End If
	mytext = ""
	For i=0 To Ubound(arrlayerf)
		mytext = mytext & tableau(i)(0) & "; " & tableau(i)(1) & vbNewLine
	Next
	Rhino.TextOut mytext
End Sub

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois #177 par SwissRhino
SwissRhino a répondu au sujet : Probleme dans mon script

mais maintenant j'ai un souci hors rhino... j'ai bien la fenêtre qui s'ouvre avec la bonne chaine de charcactère, mais quand je copie/colle vers excel, il ne trouve pas le changement de colonne....

si je copie/colle vers un document text ( bloc note), puis re copie /colle vers excel, il trouve le changement de colonne .
mais en direct ça marche pas...
une idée?


Non, ici, même en passant par bloc-notes, les colonnes ne marchent pas avec copier/coller... Il faut importer un fichier pour que le resultat soit correcte. Par contre on peut corriger le problème facilement après en Excel... Mon Excel est en anglais, mais c'est dans l'onglet "Data">"Text to columns"...



À+, --Mitch
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Modérateurs: SwissRhinoJenniferlocaJoao
Temps de génération de la page : 0.216 secondes
Propulsé par Kunena

Powered by


 









3d design training








cadlantique.com









swissrhino.com