Orientamento hatch
Mi è capitato di recente di dover disegnare un tetto a falde complesso, con profili molto irregolari, e dovevo piazzare il retino delle tegole con un sacco di orientamenti diversi. Ho trovato quattro modi diversi per farlo.

Primo metodo
…il più faticoso:
si misura l'angolo dell'oggetto a cui mettersi paralleli e poi lo si copia nelle proprietà dell'hatch.
Secondo metodo
Si copia l'angolo della linea (dalle proprietà - non si può fare con il segmento di una polilinea) e lo si copia nelle proprietà dell'hatch.
Terzo metodo
Si passa sul grip centrale dell'hatch e si sceglie hatch angle

Nota che c'è anche Origin Point per cambiare rapidamente l'origine.
Quarto metodo:
Questo funziona solo nella versione full: ho chiesto aiuto online e mi è stato subito proposto un autolisp funzionante:
(defun c:hatchalign (/ prompt_ aligning_edge_ename_data picked_point picked_point_parameter
previous_parameter previous_parameter_point next_parameter next_parameter_point
aligning_angle hatch_to_align
)
;***************************************************************************************************************************
(defun round_ (float_number up / whole_number)
(setq whole_number (fix float_number))
(if up
(1+ whole_number)
whole_number
)
)
;***************************************************************************************************************************
(setq prompt_ (princ "\nPick pline edge to align hatch to: ")
aligning_edge_ename_data (ssnamex (ssget "_:S" '((0 . "lwpolyline"))))
picked_point (vlax-curve-getclosestpointto (setq aligning_object (vlax-ename->vla-object (cadar aligning_edge_ename_data)))
(cadr (last (car aligning_edge_ename_data)))
)
picked_point_parameter (vlax-curve-getparamatpoint aligning_object picked_point)
previous_parameter (round_ picked_point_parameter nil)
previous_parameter_point (vlax-curve-getpointatparam aligning_object previous_parameter)
next_parameter (round_ picked_point_parameter t)
next_parameter_point (vlax-curve-getpointatparam aligning_object next_parameter)
aligning_angle (angle previous_parameter_point next_parameter_point)
prompt_ (princ "\nPick hatch to align pattern: ")
hatch_to_align (ssname (ssget "_:S" '((0 . "hatch"))) 0)
)
(vla-put-patternangle (vlax-ename->vla-object hatch_to_align) aligning_angle)
(princ)
)
Offset dell'angolo
Manca ancora la possibilà di un offset (ruotare di un angolo rispetto a quello dell'oggetto di riferimento: 90°?) ma cercheremo di porvi rimedio.
Al momento bisogna sommarlo/sottrarlo dalla proprietà angolo dell'hatch, con ognuno dei suddetti metodi.
Avete altre proposte?