Programacion Autolisp cuadros de dialogo
El cuarto argumento de la función new_dialog es un punto en la pantalla donde se ubicará la esquina superior izquierda de tu dialogo
Si estas llamando con algo asi:
(new_dialog "TUDIALOGO" ID )
utiliza esto:
(new_dialog "TUDIALOGO" ID "" punto )
Si punto es '(-1 -1) el autocad calculará la posicion centrada del dialogo en la pantalla
La función done_dialog retorna las coordenadas de la posicion que tiene el dialogo al momento de cerrarlo, así que lo único que debes hacer para que un diálogo se abra de nuevo donde se cerro la ultima vez es guardar el valor que retorna done_dialog para pasarselo como cuarto argumento a new_dialog
Eso si, debes tener cuidado de no poner unidades arbitrarias porque como hay variedad de resoluciones de monitores y equipos multipantalla puedes abrirlo fuera del area visible. Es mejor que almacenes las ultimas coordenadas donde estuvo el dialogo, ya sea en un archivo de texto, en el registro de windows (así lo trabaja el propio autocad con algunos de sus dialogos) o en una variable global (esto implicaría de que la primera vez que lo uses en cada sesion aparecera en el centro y debas acomodarlo y de ahi en adelante cada vez que lo invoques de nuevo dentro de esa misma sesion aparecerá donde lo cerraste)
Entonces cada vez que tu funcion lisp se apresta a crear el dialogo con newdialog debes traer a una variable las coordenadas guardadas, y si no existen dichas coordenadas (porque no hay un uso anterior del dialogo todavia) darle un valor por defecto de '(-1 -1)