Gestione Font/Testo

Buongiorno, sono qui a scrivervi per richiedere se potreste implementare e migliorare l’inserimento di testo/font all’interno di Rhinoceros, spesso mi trovo a inserire testi con font diversi e quando devo tornare a inserire del testo con del font inserito in precedenza non ricordo il tipo di font e quindi si perde molto tempo alla ricerca del font utilizzato in precedenza; potreste creare un sistema di copia formato font o qualcosa di similare? Inoltre l’inserimento di testo ha un bug cioè quando inserisco un testo parte l’inserimento già con il corsivo attivo, se provo a cambiarlo nella casella di preview lo cambia in normale, quando clicco ok per inserirlo torna corsivo… inoltre spesso solo andando a cambiare da corsivo a normale mi si blocca Rhinoceros e sono costretto a riavviarlo.
Grazie per l’attenzione.
Matteo S.

Ecco il SystemInfo di Rhino:
Rhino 8 SR6 2024-4-10 (Rhino 8, 8.6.24101.05001, Git hash:master @ 32c244aa711e0034e75bec2e87d093c764820b96)
License type: Commerciale, build 2024-04-10
License details: Cloud Zoo

Windows 10 (10.0.19045 SR0.0) or greater (Physical RAM: 32GB)
.NET 7.0.18

Computer platform: DESKTOP

Standard graphics configuration.
Primary display and OpenGL: NVIDIA Quadro P2200 (NVidia) Memory: 5GB, Driver date: 2-15-2024 (M-D-Y). OpenGL Ver: 4.6.0 NVIDIA 551.61
> Accelerated graphics device with 4 adapter port(s)
- Windows Main Display attached to adapter port #0
- Secondary monitor attached to adapter port #1

Secondary graphics devices.
Intel(R) UHD Graphics 630 (Intel) Memory: 1GB, Driver date: 4-3-2022 (M-D-Y).
> Integrated graphics device with 3 adapter port(s)
- There are no monitors attached to this device!

OpenGL Settings
Safe mode: Off
Use accelerated hardware modes: On
Redraw scene when viewports are exposed: On
Graphics level being used: OpenGL 4.6 (primary GPU’s maximum)

Anti-alias mode: 4x
Mip Map Filtering: Linear
Anisotropic Filtering Mode: High

Vendor Name: NVIDIA Corporation
Render version: 4.6
Shading Language: 4.60 NVIDIA
Driver Date: 2-15-2024
Driver Version: 31.0.15.5161
Maximum Texture size: 32768 x 32768
Z-Buffer depth: 24 bits
Maximum Viewport size: 32768 x 32768
Total Video Memory: 5 GB

Ciao Matteo e benvenuto!
Hai ragione sul bug del corsivo che è segnalato e in fase di correzione.
Una soluzione tampone è scrivere nella riga di comando _-TextObject (invio). Questo sbloccherà il corsivo quando riapri la finestra del comando Testo.

Sull’individuazione del font per un testo che ne contiene possibilmente diversi e una volta che questi diventano curve o srf o solidi… la vedo dura.

Grazie Giuseppe per la risposta velocissima, allora rimango in attesa di una release di correzione e utilizzo la soluzione tampone per il testo.
Per quanto riguarda il riconoscimento dei font non è possibile interfacciare in maniera automatica Rhinoceros con sistemi come WhatTheFont sul web o similari o visto che siamo nell’era dell’implementazione delle IA o che dir si voglia AI svilupparne una che riesca a riconoscere il font anche da curve o srf o solidi (parlo da ignorante ovviamente, non conoscendo cosa ci sta dietro a livello di linguaggio di programmazione software)!
Grazie ancora per il supporto.
Saluti
Matteo

Un’opzione è quella di assegnare un nome al gruppo di lettere.
Non so quanto sia complicato rendere la cosa automatica, forse con uno script.
img1

4 Mi Piace

E’ un’ottima alternativa, non saprei come farlo in automatico perchè non ho idea di come si faccia uno script però farlo a mano è già un qualcosa che lascia una traccia di riferimento.
Grazie.

Era la stessa cosa che volevo consigliare.
Forse ancora meglio se si assegna una “Attribute User Text” dato che rimane “appiccicata” agli oggetti anche dopo esplosione in curve.

1 Mi Piace

Uno scriptino al volo per settare la chiave con il tipo di font potrebbe essere questo.

! -_Runscript (

Option Explicit
'Script written by Lucio Zadra
'Script copyrighted by Zadra Giuseppe
'Script version venerdì 3 maggio 2024 12:41:18

Call Main()
Sub Main()

	Dim strObject, TxtFont, txtStyle

	strObject = Rhino.GetObject("Selecttext")

	If Rhino.IsText(strObject) Then

		TxtFont = Rhino.TextObjectFont(strObject)
	
		Rhino.SetUserText strObject, "Font", TxtFont
		
	End If
	
End Sub

)

Copi e incolli in un pulsante e poi lo esegui.
Semplicemente, una volta selezionato il testo verifica il tipo di font associato e lo riporta in una chiave che trovi nelle proprietà dell’oggetto.
Anche se esplodi il testo in curve, la chiave viene mantenuta.

1 Mi Piace

Buongiorno Lucio e grazie mille per questo suggerimento e lo script che ho già provato a inserire come pulsante in Rhino8.0 però aihmè credo di non capire come farlo funzionare…
Come vedi mi sono creato un pulsantino con nome Record Font e all’interno ho incollato il tuo script; non capisco come farlo funzionare, ovvero se inserisco il testo rhino lo trasforma in automatico in curve o superfici o solidi quindi in realtà non riesco a selezionare il testo e utilizzare il bottoncino con lo script?!? Forse intendi utilizzare il bottoncino nella casella di inserimento testo? Aihmè ho provato anche questo ma seleziono il testo prima di premere ok premo il bottoncino e non succede nulla…
Grazie mille per l’interesse e il suggerimento di scrivere negli attributi dell’oggetto composto dal testo.

[//cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com/mcneel/uploads/mcneel_it/original/3X/3/f/3fcd4891bd3dcc5be0c1310d9dffdd424d486b0d.jpeg]

Ciao Matteo,
avevo capito male la procedura che seguivi… credevo che tu volessi inserire dei testi come annotazioni e poi convertirli in curve ricordando il font.
Tu invece inserisci proprio il testo come oggetti (curve o superfici) e quindi bisognerebbe estrarre il nome del font dalla finestra di dialogo (mi pare ci sia una chiave che ricorda l’ultimo font utilizzato… ma non vorrei dire eresie… devo controlllare).
Ci do un occhio e se trovo qualcosa ti avviso (un’altra soluzione è quella di fare un comando che faccia l’inserimento del testo dall’inizio ma si perderebbe l’interfaccia del comando originale… )

2 Mi Piace

Ciao Lucio

Nel caso servisse, pensavo anche ad un’alternativa …
… A meno che sia quello che hai appena detto tu, non ho capito di quale chiave parli … :confused: :blush:

Dicevo:
Ho visto (almeno su Rhino 6) che lanciando il comando in modo testo (col meno davanti), mostra le opzioni in command area e propone l’ultimo font utilizzato.
Quindi eseguendo, dopo aver inserito l’oggetto, il comando

-TextObject -Enter -Enter

… E poi recuperando la CommandHistory, si dovrebbe poter estrarre il nome del font.
Almeno credo :confused:

@Matteo_Sardara
A me quello che chiedi sembra una cosa ragionevole, quindi comunque lancerei un bel wish. :slight_smile:

1 Mi Piace

Ho dato un occhio se tra le chiavi presenti nelle opzioni avanzate ci fosse una che riportava l’ultimo font utilizzato… mi ricordavo di averlo visto da qualche parte ma credo di confondermi… forse era nei file .xml dove ci sono le impostazioni di Rhino… ricereca che non ha portato a nulla.
Servirebbe qualcosa che funzionasse direttamente dal comando originale; non credo darebbe fastidio a qualcuno assegnare una usertex con salvato il tipo di font, dimensione ed eventuali stili (grassetto, corsivo…).

1 Mi Piace

Eh, per quello mi sa che serve un wish. :wink:

Intanto, se ci si accontenta, ho provato con uno script che permette, volendo, di selezionare un oggetto (costruito in precedenza sempre tramite lo script), per ‘copiare’ il font.
Poi lancia il comando normale.
E infine setta il nome degli oggetti disegnati col nome del font.

Ma non so se funziona con Rhino in italiano …

Comunque questo e’ lo script:
( Come ho accennato, funziona col nome degli oggetti.
Come dici giustamente, volendo si potrebbero salvare piu’ dati tramite gli UserText )

import rhinoscriptsyntax as rs

def main():
  refob = rs.GetObject( 
      'Reference object for Font (or Enter) ?', preselect = True )
  if refob:
    font = rs.ObjectName( refob )
    rs.Command( '_-TextObject _Font="' + font + '" _Enter _Enter' )
  rs.Command( '_TextObject' )
  gids = rs.LastCreatedObjects()
  rs.Command( '_-TextObject _Enter _Enter' )
  ch = rs.CommandHistory().strip()
  chls = ch.split( '\n' )
  chls.reverse()
  opts = chls[ 3 ].split( '  ' )
  for opt in opts:
    if opt.startswith( 'Font=' ):
      font = opt[ 5: ]
      break
  for gid in gids:
    rs.ObjectName( gid, font )
  print( 'Name <' + font + '> given to ' + str( len( gids ) ) + ' objects' )

main()
2 Mi Piace