
Silas
-
Posts
6 -
Joined
-
Last visited
Content Type
Profiles
Forums
Events
Articles
Marionette
Store
Posts posted by Silas
-
-
Hello
I think the best way is to create a database and link the database to a symbol.
To Update the Database use a simple script something like this:
(this one is for spaces)
import vs
c = ("(PON='Space')")
number = vs.Count(c)
vs.AlrtDialog(number)
vs.SetRecord(DATABASE,number)
In the second line you can change your search criteria.
In the last line the script write the number in your database.
greetings
Silas
-
Hello Benedick
I tryed a few possible solutions but get no results.
The main problem is that "in Python this function will NOT block execution. It will execute a callback function with the resulted point"
http://developer.vectorworks.net/index.php/VS:GetPt
So I tryed to get around with a second while loop like:
mdwn = False
mdwn, na = vs.MouseDown()
n = n + i
if mdwn == True:
continueBut it iterates over and over.
So maybe in a future version vs.GetPt() or vs.MouseDown() is like a dialog userinput.
Silas
-
Hey,
My Problem: (Static Solved Code attached)
At the moment we rotate the hatch after each DWG Import.
Normally not a big deal but because in this project we get so much input it's nearly impossible - or a full time job.
So the goal is to get this rotation with a script.
before i continue to create for each object a individual hatch, is there a function to just rotate the hatch in a object?
something like vs.RotateHatch(h, rotation) ?
My attempt at the moment: (beside recording the position and coordinates from each object - and get the rotation)
SOLVED Updated Version for Static Hatch:
------------------------------------------------------
cp = ("(T=POLY)")
cl = ("(T=POLYLINE)")input_hatch = vs.StrDialog('Schraffur Name eingeben','')
input_hatch_angle = int(vs.StrDialog('Winkel der Schraffur als Zahl angeben: Bsp: 45, 30 etc',''))
def GetRotation(h):global m
m = float()
global rotation
rotation = float()
global angle
angle = float()
for vertexNum in range(0, vs.GetVertNum(h)):
point, v_type_nil, angle_nil = vs.GetPolylineVertex(h, vertexNum)
point1, v_type_nil, angle_nil = vs.GetPolylineVertex(h,1)
point2, v_type_nil, angle_nil = vs.GetPolylineVertex(h,2)
point3, v_type_nil, angle_nil = vs.GetPolylineVertex(h,3)
point4, v_type_nil, angle_nil = vs.GetPolylineVertex(h,4)
point5, v_type_nil, angle_nil = vs.GetPolylineVertex(h,5)
point6, v_type_nil, angle_nil = vs.GetPolylineVertex(h,6)
#Richtungsvektoren:
#AB = B - A = [1, -1] - [-3, 2] = [4, -3]
ax = float(0.0)
ay = float(0.0)
bx = float(0.0)
by = float(0.0)
cx = float(0.0)
cy = float(0.0)
dx = float(0.0)
dy = float(0.0)
ex = float(0.0)
ey = float(0.0)
fx = float(0.0)
fy = float(0.0)
ab = float(0.0)
bc = float(0.0)
cd = float(0.0)
de = float(0.0)
ef = float(0.0)
de_x = float(0.0)
de_y = float(0.0)
ef_x = float(0.0)
ef_y = float(0.0)
countvert = int(vs.GetVertNum(h))
if countvert <= 4:
ax = point1[0]
ay = point1[1]
bx = point2[0]
by = point2[1]
cx = point3[0]
cy = point3[1]
dx = point4[0]
dy = point4[1]
elif countvert <= 5:
ax = point1[0]
ay = point1[1]
bx = point2[0]
by = point2[1]
cx = point3[0]
cy = point3[1]
dx = point4[0]
dy = point4[1]
ex = point5[0]
ey = point5[1]
else:
ax = point1[0]
ay = point1[1]
bx = point2[0]
by = point2[1]
cx = point3[0]
cy = point3[1]
dx = point4[0]
dy = point4[1]
ex = point5[0]
ey = point5[1]
fx = point6[0]
fy = point6[1]
if countvert <= 4:
ab_x = bx - ax
ab_y = by - ay
bc_x = cx - bx
bc_y = cy - by
cd_x = dx - cx
cd_y = dy - cy
elif countvert == 5:
ab_x = bx - ax
ab_y = by - ay
bc_x = cx - bx
bc_y = cy - by
cd_x = dx - cx
cd_y = dy - cy
else:
ab_x = bx - ax
ab_y = by - ay
bc_x = cx - bx
bc_y = cy - by
cd_x = dx - cx
cd_y = dy - cy
de_x = ex - dx
de_y = ey - dy
ef_x = fx - ex
ef_y = fy - ey
# vs.CreateText(str(de_x))
# vs.CreateText(str(de_y))
ab = vs.Sqrt(ab_x * ab_x + ab_y * ab_y)
bc = vs.Sqrt(bc_x * bc_x + bc_y * bc_y)
cd = vs.Sqrt(cd_x * cd_x + cd_y * cd_y)
de = vs.Sqrt(de_x * de_x + de_y * de_y)
ef = vs.Sqrt(ef_x * ef_x + ef_y * ef_y)
# listdist = [ab,bc,cd,de,ef]
# vs.CreateText(str(listdist))
# vs.AlrtDialog(str(dx))
# vs.AlrtDialog(str(dy))if ab > bc and ab > cd and ab > de and ab > ef:
gk = by - ay
ak = bx - ax
#vs.AlrtDialog(str(gk))
#vs.AlrtDialog(str(ak))
if ak != 0:
angle = vs.Rad2Deg(vs.ArcTan(gk/ak))
m = gk / akelif bc > cd and bc > de and bc > ef:
gk = cy - by
ak = cx - bx
if ak != 0:
angle = vs.Rad2Deg(vs.ArcTan(gk/ak))
m = gk / ak
elif cd > de and cd > ef:
gk = dy - cy
ak = dx - cxif ak != 0:
angle = vs.Rad2Deg(vs.ArcTan(gk/ak))
m = gk / ak
elif de > ef:
gk = ey - dy
ak = ex - dxif ak != 0:
angle = vs.Rad2Deg(vs.ArcTan(gk/ak))
m = gk / akelse:
gk = fy - ey
ak = fx - exif ak != 0:
angle = vs.Rad2Deg(vs.ArcTan(gk/ak))
m = gk / ak#vs.AlrtDialog(str(angle))
if gk == 0:
angle = 0
if ak == 0:
angle = 90
if angle < 0:
angle = - angle#IF Function
#0
if input_hatch_angle == 0:
if angle == 0:
rotation = 90
if angle == 90:
rotation = 0
else:
if m > 0:
rotation = - 90 + angle
if m < 0:
rotation = 90 - angle
#90
if input_hatch_angle == 90:
if angle == 0:
rotation = 0
if angle == 90:
rotation = 90
else:
if m > 0:
rotation = angle
if m < 0:
rotation = - angle#45
if input_hatch_angle == 45:
if angle == 90:
rotation = 0
if angle == 0:
rotation = 0
else:
if m > 0:
rotation = - angle
if m < 0:
rotation = 90 - angle#Hatch Control / Rotation
hatch_h = vs.GetVectorFill(h)
#vs.AlrtDialog(str(hatch_h))
# Attribute Control and Record
if hatch_h[0] == True:
if input_hatch == hatch_h[1]:
vs.CreateStaticHatchFromObject(h,input_hatch,0,0,rotation)
# vs.AlrtDialog(hatch_h)
vs.ForEachObject(GetRotation,cp)
vs.ForEachObject(GetRotation,cl)
#h = vs.LNewObj()
#vs.SelectObj(h)
#vs.SelectObj(cl)
#vs.SelectObj(cp)
-------------------------------------------thank you
Silas
-
1
-
-
It works finally
thanks a lot!
best regards -
Hello,
First sorry for my bad english I'm from Switzerland :)
I tryed to creat a multible SelectObj Script for our Spacetool.
Now I have no ideas left why my script doesnt work - i get always the error output, for my variable when i have more than one word in my input dialog.
The strange thing is, when i write my input direct in the string it works fine.
Simple Script that work:
criteria = ("('Space'.'Floor Finish'='Platten weiss')")
vs.SelectObj(criteria)
My idea for the script:
eingabe = vs.StrDialog('Material eingeben','')vs.AlrtDialog('Folgendes wird nun ausgewählt '+ eingabe)
criteria = ("('Space'.'Floor Finish'="+eingabe+")")
vs.SelectObj(criteria)
In my PY Charm the script works allready... (is that a vectorworks based bug or problem?)
Thank you
Counter for DoorID
in Python Scripting
Posted
Hello,
I try to get an automatic door ID generator.
The main part is done - but in the middle of the door ID should be a counter.
If there is a room with more than one door, we need different door IDs. That's why we should have a counter in the middle.
I tryed something (after #Number Check for Count) but just get the total count in each door and not 1,2,3 ...
Thank you
Silas