Posts: 3
Threads: 1
Joined: Sep 2019
Sep-13-2019, 06:42 PM
(This post was last modified: Sep-13-2019, 06:43 PM by KaisoArt.)
A script I have has this line:
items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']
This displays as 1/16", 1/8", etc.
I'd like it to display as architectural scales 1/16"=1'-0", 1/8"=1'-0" etc.
What is the correct syntax for that? Nothing I've tried so far works.
Posts: 1,838
Threads: 2
Joined: Apr 2017
I don't understand your notation. How do you translate from one to the other? Show us what you've tried.
Posts: 4,220
Threads: 97
Joined: Sep 2016
You can backslash it: '1/16"=1\'-0"' .
Posts: 1,025
Threads: 16
Joined: Dec 2016
items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']
print(', '.join(items))
Posts: 8,151
Threads: 160
Joined: Sep 2016
items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']
scales = [f'{item}=1\'-0"' for item in items]
print(scales)
for scale in scales:
print(scale) Output: ['1/16"=1\'-0"', '1/8"=1\'-0"', '1/4"=1\'-0"', '3/8"=1\'-0"', '1/2"=1\'-0"', '3/4"=1\'-0"', '1-1/2"=1\'-0"', '1/6"=1\'-0"', '1:1=1\'-0"']
1/16"=1'-0"
1/8"=1'-0"
1/4"=1'-0"
3/8"=1'-0"
1/2"=1'-0"
3/4"=1'-0"
1-1/2"=1'-0"
1/6"=1'-0"
1:1=1'-0"
Posts: 3
Threads: 1
Joined: Sep 2019
Sep-13-2019, 08:44 PM
(This post was last modified: Sep-13-2019, 09:13 PM by KaisoArt.)
This is a script to run in Rhino 3D Ver6. The script works. However, the selection windows comes up as the first pic. I would like it to be as in the second pic. I had found a thread that addressed using quotes by putting them within a mixture of slashes, quotes and apostrophes. I just could not get it to work.
[Image: Scale_opt.jpg]
[Image: Scale_opt_imp.jpg]
(Sep-13-2019, 07:03 PM)buran Wrote: items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1'] scales = [f'{item}=1\'-0"' for item in items] print(scales) for scale in scales: print(scale) Output: ['1/16"=1\'-0"', '1/8"=1\'-0"', '1/4"=1\'-0"', '3/8"=1\'-0"', '1/2"=1\'-0"', '3/4"=1\'-0"', '1-1/2"=1\'-0"', '1/6"=1\'-0"', '1:1=1\'-0"'] 1/16"=1'-0" 1/8"=1'-0" 1/4"=1'-0" 3/8"=1'-0" 1/2"=1'-0" 3/4"=1'-0" 1-1/2"=1'-0" 1/6"=1'-0" 1:1=1'-0"
This is the answer I think. However, I don't know how to incorporate your scales = [f'{item}.... with the scale = rs.ListBox...in the script I'm trying to edit. The full code is below.
[python]
import Rhino
import rhinoscriptsyntax as rs
import scriptcontext as sc
def setDetailScale():
"""
this script changes the scale of a detail to a selected scale from a listbox
version 1.0
www.studiogijs.nl
"""
detail = rs.GetObject("select detail", filter = 32768)
if not detail:
return
detail = rs.coercerhinoobject(detail)
if not detail.DetailGeometry.IsParallelProjection:
return
#modify the scale
items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']
scale = rs.ListBox(items, "Select scale", "Scale detail")
if not scale:
return
if scale == '1/16"':
intScale = 120
elif scale == '1/8"':
intScale = 96
elif scale == '1/4"':
intScale = 48
elif scale == '3/8"':
intScale = 36
elif scale == '1/2"':
intScale = 24
elif scale == '3/4"':
intScale = 12
elif scale == '1-1/2"':
intScale = 8
elif scale == '1/6"':
intScale = 6
elif scale == '1:1':
intScale = 1
detail.DetailGeometry.SetScale(intScale, sc.doc.ModelUnitSystem, 1, sc.doc.PageUnitSystem)
#lock detail
items = ["YES","NO"]
lock = rs.ListBox(items,"Lock Detail/s","YES","NO")
if lock == "YES":
detail.DetailGeometry.IsProjectionLocked = True
elif lock == "NO":
detail.DetailGeometry.IsProjectionLocked = False
detail.CommitChanges()
sc.doc.Views.Redraw()
if __name__ == '__main__':
setDetailScale()
[python]
Obviously I have not mastered posting the code here correctly. This should be a link to the file. Rhino script.
(Sep-13-2019, 06:52 PM)ichabod801 Wrote: You can backslash it: '1/16"=1\'-0"' .
I tried this. It worked for the first, 1/16"=1'-0". But when I changed the second the script crashed.
Posts: 3
Threads: 1
Joined: Sep 2019
Apologies for the post mess. I'm now getting the hang of posting here. Mods fix as necessary.
The code for the script:
import Rhino
import rhinoscriptsyntax as rs
import scriptcontext as sc
def setDetailScale():
"""
this script changes the scale of a detail to a selected scale from a listbox
version 1.0
www.studiogijs.nl
"""
detail = rs.GetObject("select detail", filter = 32768)
if not detail:
return
detail = rs.coercerhinoobject(detail)
if not detail.DetailGeometry.IsParallelProjection:
return
#modify the scale
items = ['1/16"','1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']
scale = rs.ListBox(items, "Select scale", "Scale detail")
if not scale:
return
if scale == '1/16"=1\'-0"':
intScale = 120
elif scale == '1/8"-1\'-0"':
intScale = 96
elif scale == '1/4"':
intScale = 48
elif scale == '3/8"':
intScale = 36
elif scale == '1/2"':
intScale = 24
elif scale == '3/4"':
intScale = 12
elif scale == '1-1/2"':
intScale = 8
elif scale == '1/6"':
intScale = 6
elif scale == '1:1':
intScale = 1
detail.DetailGeometry.SetScale(intScale, sc.doc.ModelUnitSystem, 1, sc.doc.PageUnitSystem)
#lock detail
items = ["YES","NO"]
lock = rs.ListBox(items,"Lock Detail/s","YES","NO")
if lock == "YES":
detail.DetailGeometry.IsProjectionLocked = True
elif lock == "NO":
detail.DetailGeometry.IsProjectionLocked = False
detail.CommitChanges()
sc.doc.Views.Redraw()
if __name__ == '__main__':
setDetailScale()
Posts: 8,151
Threads: 160
Joined: Sep 2016
Sep-14-2019, 05:26 AM
(This post was last modified: Sep-14-2019, 05:26 AM by buran.)
import Rhino
import rhinoscriptsyntax as rs
import scriptcontext as sc
def setDetailScale():
"""
this script changes the scale of a detail to a selected scale from a listbox
version 1.0
www.studiogijs.nl
"""
detail = rs.GetObject("select detail", filter = 32768)
if not detail:
return
detail = rs.coercerhinoobject(detail)
if not detail.DetailGeometry.IsParallelProjection:
return
#modify the scale
scales = {'1/16"=1\'-0"':120, '1/8"=1\'-0"':96, '1/4"=1\'-0"':48,
'3/8"=1\'-0"':36, '1/2"=1\'-0"':24, '3/4"=1\'-0"':12,
'1-1/2"=1\'-0"':8, '1/6"=1\'-0"':6, '1:1=1\'-0"':1}
scale = rs.ListBox(scales.keys(), "Select scale", "Scale detail")
if not scale:
return
intScale = scales.get[scale]
detail.DetailGeometry.SetScale(intScale, sc.doc.ModelUnitSystem, 1, sc.doc.PageUnitSystem)
#lock detail
items = ["YES","NO"]
lock = rs.ListBox(items,"Lock Detail/s","YES","NO")
detail.DetailGeometry.IsProjectionLocked = lock == 'YES'
# if lock == "YES":
# detail.DetailGeometry.IsProjectionLocked = True
# elif lock == "NO":
# detail.DetailGeometry.IsProjectionLocked = False
detail.CommitChanges()
sc.doc.Views.Redraw()
if __name__ == '__main__':
setDetailScale() If not using python3.7+ scales should be collections.OrderedDict
|