Ahora bien, aportando algo adicional que no me preguntaste pero lo dejo por si te sirve el dato o a alguien más.
La función get-pts-poly no te devuelve los puntos de una polilínea 3d porque su estructura dxf es muy diferente a la de una polilínea liviana. Pero podemos hacer una función que de una extraiga los puntos de una poli 3d
Hay dos entidades que son compuestas de otras entidades: las definiciones de bloque y las polilíneas 3D.
A diferencia de las LWPOLYLINE que se definen en una sola lista (donde por cada punto aparece un codigo 10 con las coordenadas y unos codigos 40, 41 y 42 si tiene curvatura o grosor de linea) la entidad POLYLINE tiene una lista que define propiedades gráficas pero no geométricas, y esa entidad es seguida de una serie de entidades tipo VERTEX, cada una con las coordenadas del vertice en el codigo 10. Al final de la secuencia de puntos aparece una entidad de tipo "SEQEND" que indica que termino la definición de la polilinea y el siguiente objeto ya será lo siguiente que haya en el dibujo
Imagina así la base de datos
ent ((0 . "LINE") (10 ...) (11..))
ent ((0 . "LINE") (10 ...) (11..))
ent ((0 . "ARC") (10 ...) (40..)(50..)(51..))
ent ((0 . "TEXT") (7 ...) (1 ...) (40...)(10 ...) (50..))
ent ((0 . "LWPOLYLINE") (70 ...) (90 ...) (10...)(10 ...) (10 ...)(10 ...)(10 ...)(10 ...))
ent ((0 . "POLYLINE") (70 ...) (40 ...)
ent ((0 . "VERTEX") (10 ...)
ent ((0 . "VERTEX") (10 ...)
ent ((0 . "VERTEX") (10 ...)
ent ((0 . "VERTEX") (10 ...)
ent ((0 . "SEQEND")
fijate que las primeras 5 definiciones corresponden cada una a una entidad diferente, con sus propiedades, en el caso de la LWPL tiene todos sus vértices en su lista. Pero luego las restantes 6 entidades apenas definen un solo objeto gráfico que es la poly3D. Entonces hay que complementar el (entget) con (entnext) para iterar sobre la BD tomando los vértices
Entonces, para obtener los vértices, en vez de tomar todos los códigos 10 de una lista como en get-pts-poly, tomamos el punto de cada siguiente entidad mientras esta sea de tipo vertex o mientras no sea de tipo seqend.
Esta función recorre los vertices de una polilinea 3D y retorna una lista de puntos 3D
O esta otra es lo mismo pero devuelve una lista de coordenadas solo XY
PD. Fijate que ya puedes construir una función que convierta una poly 3D en liviana. Solo extraes los vertices con una de estas funciones (y las propiedades de color capa etc de la entidad POLYLINE), borras la entidad y se los pasas a la función traza-polilinea-SC para crear la LW en el mismo sitio. Claro, esa no convierte, borra y crea otra pero es un buen inicio para aprender