Python Forum
What is the correct syntax for list items that need to contain a quotation mark, etc? - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: What is the correct syntax for list items that need to contain a quotation mark, etc? (/thread-21102.html)



What is the correct syntax for list items that need to contain a quotation mark, etc? - KaisoArt - Sep-13-2019

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.


RE: What is the correct syntax for list items that need to contain a quotation mark, etc? - ndc85430 - Sep-13-2019

I don't understand your notation. How do you translate from one to the other? Show us what you've tried.


RE: What is the correct syntax for list items that need to contain a quotation mark, etc? - ichabod801 - Sep-13-2019

You can backslash it: '1/16"=1\'-0"'.


RE: What is the correct syntax for list items that need to contain a quotation mark, etc? - Axel_Erfurt - Sep-13-2019

items = ['1/16"', '1/8"','1/4"','3/8"','1/2"','3/4"','1-1/2"','1/6"','1:1']
print(', '.join(items))



RE: What is the correct syntax for list items that need to contain a quotation mark, etc? - buran - Sep-13-2019

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"



RE: What is the correct syntax for list items that need to contain a quotation mark, etc? - KaisoArt - Sep-13-2019

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.


RE: What is the correct syntax for list items that need to contain a quotation mark, etc? - KaisoArt - Sep-13-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()



RE: What is the correct syntax for list items that need to contain a quotation mark, etc? - buran - Sep-14-2019

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