AutoCad - Programar Autocad

 
Vista:

Programar Autocad

Publicado por David Embry (2 intervenciones) el 10/06/2013 00:46:17
Hola, necesito una asesoría.
Desde un plano 3d que tengo dibujada una estructura estereométrica hecha con alambres rectos parecida a una torre de transmición eléctrica. Necesito diseñar un programa o comando que me permita determinar X,Y,Z de cada punto que se intersectan los alambres y desde este punto me indique los ángulos de cada alambre respecto al plano Y y el plano Z con centro en el punto dicho. Es como latitud y longitud interpretandolo como coordenadas esféricas de la tierra en que el centro de la tierra es el punto de intersección o unión de los alambres. El programa es para determinar esto para varios dibujos. Atento a un planteamienro del problema, gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Programar Autocad

Publicado por Gerardo (986 intervenciones) el 10/06/2013 03:36:37
Hola

Lo mas sencillo para entender tu consulta seria ver un dibujo real, para aclarar dudas como:

Los alambres están representados con lineas simples o con que tipo de entidades?
Las intersecciones son reales o pueden haber aparentes?
Las entidades fueron creadas todas en el plano universal o pudo haber sido desde ucs's diferentes en cada cara?

y buscar propiedades del dibujo que se presten para obtener la informacion necesaria, sobre todo adivinar a cual cara de la torre pertenecen, o si simplemente se trata de tomar el plano y,z universal y obtener coordenadas de toda entidad en ese plano.

En resumen, haria falta o que pases un dwg o que seas muy especifico con todas las caracteristicas de un dibujo tipico

Otra consulta, en que lenguaje programas? Autolisp, Visual lisp, ObjectARX, ActiveX, C++.net, C#.net?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Programar Autocad

Publicado por David Embry (2 intervenciones) el 10/06/2013 11:07:48
Muy atento Gerardo,
- El cad es una sola capa con puras lineas que forman la estructura.
-Las intersecciones son reales imaginando que esta estructura es de alambre y soldadas en los puntos de intersección (uniones).
-El cuerpo entero es un modelo 3d.
-Autolisp es lo que buscaba, que opinas?

Un ejemplo.
Dibujo un cubo de arista=10, ortogonal a los planos x,y,z partiendo del origen 0,0,0
Sus 8 vértices tendran las coordenadas
Cara inferior
V1: 0,0,0
V2:0,10,0
V3:10,10,0
V4:10,0,0

Cara superior
V5:0,10,10
V6:10,10,10
V7:10,0,10
V8:0,0,10

fijemosnos solo en el P1 y trazamos todas las diagonales que se originan a este vértice.
En este punto se uniran 3 lineas de aristas mas 4 lineas de diagonales, en total necesitare los 7 coordenadas esféricas de esta unión. Considerando que la primera coordenada esférica es el ángulo entre el eje Z a la línea (Latitud) y la segunda coordenada el ángulo entre el plano Y la línea (longitud).
Latitud : rango 0° y 180°
Longitud:rango 0° y 180°

P1: 0,0,0 (x,y,z)
Las coordenadas esféricas son:
en aristas
L1: 90°,0° línea desde P2
L2:0°,0° línea desde P8
L3: 90°,90° línea desde P4
en diagonales
L4: 45°,0° línea desde P5
L5: 54.736°,45° línea desde P6
L6:90°,45° línea desde P3
L7:45°,90° línea desde P7

Esto se repetiría para los otros vértices.
No se si este ejemplo pueda transmitirte lo necesario.
saludos
David
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Programar Autocad

Publicado por Gerardo (986 intervenciones) el 13/06/2013 06:48:42
Bien David, disculpa que no contesté antes pero he tenido mucho trabajo

Pareciera que es algo muy sencillo de resolver o que no he comprendido bien la dimensión del problema.

Igual no veo claro, porque no he visto un dibujo, porque no se cuanto sabes de autolisp o programación y porque no se que clase de interacción quieres con el usuario ni adonde quieres mandar el resultado... pero bueno, lo intento.

Como lo resolvería yo?
1-Hacer una lista de todos los pares de puntos de las lineas.
2-Hacer una lista de vértices
3-Para cada vértice localizar los segmentos que coinciden ahí, tomando el vértice como punto de origen y el otro extremo como punto de destino y entonces calcular los deltas x,y,z y con ellos los ángulos


Aun no comprendo la forma en que conceptualizas lo de longitud y latitud; por qué el rango de la longitud va de 0 a 180 y no de -180 a 180 o de 0 a 360, siendo que si no tenemos un angulo cero de referencia, los vectores pueden estar en cualquier angulo absoluto desde los vértices. Igual no se si la que llamas latitud tiene el cero en el plano xy o en el eje z... pero bueno, esa parte te la dejo a ti.

Aquí está un primer borrador que toma los vértices opuestos de las lineas que coinciden en cada punto, calcula los ángulos horizontal y vertical (tu lo ajustaras a tus conceptos de longitud y latitud) desde cualquier cero, pues los estoy sacando, el horizontal con la tangente de deltay / deltax y el vertical con la tangente de distancia plana / deltaz, y te muestra en el textscreen una lista de los ángulos calculados. O sea, ni revisé el calculo de los ángulos ni les di formato de gg°mm'ss" porque no sé cual es tu intención con ambas cosas (si necesitas ayuda con eso lo vemos luego). Lo importante es la definición de vértices.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(defun c:test ( / ss i lent pt1 pt2 lineas linea quitarepetidos vertices punto otro otros deltas)
;Hacer una lista de segmentos (pares de puntos)
	(setq ss (ssget '((0 . "LINE")))
			i 0
	)
	(repeat (sslength ss)
		(setq lent (entget (ssname ss i))
				i (1+ i)
				pt1 (cdr (assoc 10 lent))
				pt2 (cdr (assoc 11 lent))
				lineas (cons (list pt1 pt2) lineas)
		)
	)

;Hacer una lista de vertices:

	(defun quitarepetidos (L)
	  (if L (cons (car L) (quitarepetidos (vl-remove (car L) L))))
	)
	(setq vertices (quitarepetidos (apply 'append lineas)))
 
;Para cada vertice
	(foreach punto vertices
		(princ (strcat "\n\nVertice en: " (vl-princ-to-string punto)))
		(setq otros nil
				i 0
		)
		;Localizar las lineas que convergen en el y tomar el otro punto
		(foreach linea lineas
			(if (member punto linea)
				(setq otros (cons (if (zerop (distance punto (car linea))) (last linea)(car linea)) otros))
			)
		)
		;En este momento otros contiene los puntos opuestos de las lineas que convergen en punto
		(foreach otro otros
			(princ (strcat "\n\t\tLinea L" (itoa (setq i (1+ i))) " al punto: " (vl-princ-to-string otro)))
			(setq deltas (mapcar '- otro punto))
		; Calculamos e imprimimos todos los angulos en grados decimales y en valores absolutos trigonometricos
			(princ (strcat "\n\t\t\t\tAngulo horizontal: " (rtos (if (zerop (car deltas)) 0 (/ (* (atan (/ (cadr deltas)(car deltas))) 180.0) pi)) 2 2) " grados."))
			(princ (strcat "\n\t\t\t\tAngulo vertical: "	(rtos (if (zerop (last deltas)) 90 (if (and (zerop (car deltas))(zerop (cadr deltas))) 0
						(/ (* (atan (/ (distance punto (mapcar '- otro (list 0 0 (last deltas)))) (last deltas))) 180.0) pi))) 2 2) " grados."))
		)
	)
)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar