Skip to content

Commit 0db6563

Browse files
authored
Merge pull request #2 from wishbonesr/goodies/more-examples
Goodies/more examples
2 parents 365a01d + 001165c commit 0db6563

7 files changed

Lines changed: 178 additions & 0 deletions
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import datetime
2+
# build period names from start to end
3+
# set the periods from the beginning of the job to the end of the job
4+
SearchFolderName = 'OPD_TimeLiner'
5+
yr_beg = 2023
6+
wk_beg = 51
7+
yr_end = 2025
8+
wk_end = 9
9+
listof = []
10+
for y in range(yr_beg, yr_end + 1):
11+
if yr_beg == yr_end:
12+
wlist = [str(y)] + [str(y) + '.' + element.__str__() for element in range(wk_beg, wk_end + 1)]
13+
elif y == yr_end:
14+
wlist = [str(y)] + [str(y) + '.' + element.__str__() for element in range(1, wk_end + 1)]
15+
elif y == yr_beg:
16+
wlist = [str(y)] + [str(y) + '.' + element.__str__() for element in range(wk_beg, 53 + 1)]
17+
else:
18+
wlist = [str(y)] + [str(y) + '.' + element.__str__() for element in range(1, 53 + 1)]
19+
listof.append(wlist)
20+
21+
#confirm SearchFolderName doesn't already exist, rename _old
22+
for ss in doc.SelectionSets.RootItem.Children:
23+
if ss.DisplayName == SearchFolderName and ss.IsGroup:
24+
doc.SelectionSets.EditDisplayName(ss, SearchFolderName + "_old")
25+
# perhaps the old one should just be deleted
26+
27+
#create new "timeliner" folder at the end of the existing search sets
28+
nextIndex = doc.SelectionSets.RootItem.Children.Count
29+
savedFolder = FolderItem()
30+
savedFolder.DisplayName = SearchFolderName
31+
32+
for y in listof:
33+
yr = y[0]
34+
yearFolder = FolderItem()
35+
yearFolder.DisplayName = str(yr)
36+
for wk in y[1:]:
37+
# create another folder group for each year
38+
s = Search()
39+
# sc = SearchCondition.HasPropertyByDisplayName('OPD_LineList','SCHEDULED INSTALL')
40+
# ABOVE IS CORRECT, BELOW IS FOR TESTING AND PROOF OF CONCEPT
41+
sc = SearchCondition.HasPropertyByDisplayName('OPD_Schedule','SCHEDULED INSTALL')
42+
oData = VariantData.FromDisplayString(wk)
43+
sc = sc.EqualValue(oData)
44+
s.SearchConditions.Add(sc)
45+
s.Selection.SelectAll()
46+
s.Locations = SearchLocations.DescendantsAndSelf
47+
savedSet = SelectionSet(s)
48+
savedSet.DisplayName = wk
49+
yearFolder.Children.Add(savedSet)
50+
savedFolder.Children.Add(yearFolder)
51+
52+
doc.SelectionSets.InsertCopy(nextIndex, savedFolder)
53+
54+
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from datetime import datetime
2+
from datetime import timedelta
3+
4+
# build period names from start to end
5+
# set the periods from the beginning of the job to the end of the job
6+
yr_beg = 2023
7+
wk_beg = 51
8+
yr_end = 2025
9+
wk_end = 9
10+
listof = []
11+
for y in range(yr_beg, yr_end + 1):
12+
if yr_beg == yr_end:
13+
wlist = [str(y)] + [str(y) + '.' + element.__str__() for element in range(wk_beg, wk_end + 1)]
14+
elif y == yr_end:
15+
wlist = [str(y)] + [str(y) + '.' + element.__str__() for element in range(1, wk_end + 1)]
16+
elif y == yr_beg:
17+
wlist = [str(y)] + [str(y) + '.' + element.__str__() for element in range(wk_beg, 53 + 1)]
18+
else:
19+
wlist = [str(y)] + [str(y) + '.' + element.__str__() for element in range(1, 53 + 1)]
20+
listof.append(wlist)
21+
22+
23+
#create time timeler entries to match up with search sets and link
24+
#need to identify week beginning and ending dates for planned start/end
25+
# dtStart = datetime.datetime.strptime("")
26+
for y in listof:
27+
yr = y[0]
28+
for wk in y[1:]:
29+
d = wk
30+
# d = "2024.1"
31+
dtStart = datetime.strptime(d + '-1', "%Y.%W-%w") + timedelta(days=-1)
32+
dtEnd = dtStart + timedelta(days=6)
33+
print(dtEnd)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Search
2+
# first build a collection of objects that have an area.
3+
# in order to get a list of all the areas available
4+
# search doesn't work for custom categories, must iterate
5+
areas = dict()
6+
allItems = doc.Models.RootItemDescendantsAndSelf
7+
for item in allItems:
8+
prop = item.PropertyCategories.FindPropertyByDisplayName('OPD_LineList','Area')
9+
if prop:
10+
areaName = prop.Value.ToDisplayString()
11+
if areaName not in areas.keys():
12+
mic = ModelItemCollection()
13+
mic.Add(item)
14+
areas[areaName] = mic
15+
else:
16+
mic = areas[areaName]
17+
mic.Add(item)
18+
areas[areaName] = mic
19+
20+
for area, mic in areas.items():
21+
# remove existing viewpoint if exists
22+
vps = doc.SavedViewpoints.RootItem.Children
23+
for svp in vps:
24+
vpName = svp.DisplayName.ToString()
25+
if (vpName == area):
26+
doc.SavedViewpoints.Remove(svp)
27+
# set all of model transparency
28+
# might be worth seeing if the viewpoint can just be edited for items visibility instead of editing the model
29+
doc.Models.OverrideTemporaryTransparency(doc.Models.RootItemDescendants,50)
30+
# set for current area to no transparency
31+
doc.Models.OverrideTemporaryTransparency(mic,0)
32+
bbc = mic.BoundingBox().Center
33+
nvp = Viewpoint()
34+
nvp.Position = bbc
35+
vt = Vector3D(0,1,0)
36+
nvp.AlignDirection(vt)
37+
nvp.RenderStyle.Shaded
38+
nvp.HeightField = 0.872657
39+
svp = SavedViewpoint(nvp)
40+
svp.DisplayName = area
41+
print svp.DisplayName
42+
doc.SavedViewpoints.AddCopy(svp)
43+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Search
2+
s = Search()
3+
s.Selection.SelectAll()
4+
# variant needed for equals Value
5+
# oData = VariantData.FromDisplayString('Rooms')
6+
sc1 = SearchCondition.HasPropertyByDisplayName("Item","Name")
7+
# oSearchCondition = oSearchCondition.EqualValue(oData)
8+
sc1 = sc1.DisplayStringContains('.nwc')
9+
s.SearchConditions.Add(sc1)
10+
a = s.FindAll(doc,False)
11+
12+
# Create Collection and fill it with the items found
13+
modelItems = ModelItemCollection()
14+
a.CopyTo(modelItems)
15+
16+
# Loop through collection of found items
17+
for item in modelItems:
18+
# Get some properties to build the view name later
19+
# This would change for OPD use case
20+
#number = item.PropertyCategories.FindPropertyByDisplayName('Element', 'Number')
21+
#strnumb = number.Value.ToDisplayString()
22+
name = item.PropertyCategories.FindPropertyByDisplayName ('Item', 'Name')
23+
strname = name.Value.ToDisplayString()
24+
# This next pert is locating the camera, so if we're focusing on an item,
25+
# then OPD will again need to tweak this section to put the camera
26+
# in the correct location and orientation
27+
bbc = item.BoundingBox().Center
28+
nvp = Viewpoint()
29+
nvp.Position = bbc
30+
vt = Vector3D(0,1,0)
31+
nvp.AlignDirection(vt)
32+
nvp.RenderStyle.Shaded
33+
nvp.HeightField = 0.872657
34+
# Save the settings to a view
35+
svp = SavedViewpoint(nvp)
36+
#svp.DisplayName = strnumb + " " + strname
37+
svp.DisplayName = strname
38+
print svp.DisplayName
39+
doc.SavedViewpoints.AddCopy(svp)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
for model in doc.Models.First.RootItem.Children:
2+
print(model.DisplayName)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
for model in doc.Models:
2+
print(model.FileName)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
for model in doc.Models.First.RootItem.Children:
2+
prop = model.PropertyCategories.FindPropertyByDisplayName("Item","Source File Name")
3+
sourcefile_long = prop.Value.ToString()
4+
sourceFileName = sourcefile_long.Replace("DisplayString:", "")
5+
print(sourceFileName)

0 commit comments

Comments
 (0)