• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Erkennen eines Rechtecks

  • Ersteller Ersteller Angelo2449
  • Erstellt am Erstellt am

Angelo2449

Guest
Hallo alle,
mit Code :

Code:
 (vl-load-com)
(setq Entityta (entsel "\nsel select item")
(seq object (vlax-ename->vla-object)))
(setq l: Objekt (vlax-curve-getdistatparam Objekt (vlax-curve-getendparam Objekt))

(setq list (entget))
(setq first (nth 1 list))
(setq Namensgebung (cdr first)

(princ "\n")
(princ "named xxxxxxxxxxxxxx ")
(princ nomeentita)
(princ "\n")

(cond)
((= Name "lwpolyline")
(princ "\n")
(Setq-Name "Polyline")
(princ "ist ein Polylinea")
(princ "\n")
)

((= Name "Zeile")
(princ "\n")
(Setq Name "linea")
(princ "ist eine Zeile")
(princ "\n")
)

((= Name "Circle")
(princ "\n")
(Setq Name "Circle")
(princ "ist ein Kreis")
(princ "\n")
)
;
Ich erkenne die verschiedenen Arten von Objekten, wie kann ich ein Rechteck erkennen (geschlossene Polylinie) und den Wert der beiden Seiten extrahieren?
Danke.
 
extrahiert die Koordinaten der Wirbel der Polylinea, wenn sie 4 den Abstand der 2 Diagonalen vergleichen, wenn sie gleich ein Rechteck sind.
 
aber wie ich die 4 oder mehr Vertikale extrahiere (es könnte ein Polygon sein).
Ich sollte auch feststellen, ob es sich um eine geschlossene Polylinie handelt.
Danke rpor66.
 
extrahiert die Koordinaten der Wirbel der Polylinea, wenn sie 4 den Abstand der 2 Diagonalen vergleichen, wenn sie gleich ein Rechteck sind.
aber wie extrahiere ich die 4 oder mehr Vertices (kann ein Polygon sein)? ?
Ich sollte auch feststellen, ob es sich um eine geschlossene Polylinie handelt.
Danke rpor66.
 
ein Flöz von Lee-Mac könnte Ihnen helfen: ermöglicht es Ihnen, den Gipfel in der unteren linken und oben rechts bei der Auswahl einer Polylinie zu finden.
 
ein Flöz von Lee-Mac könnte Ihnen helfen: ermöglicht es Ihnen, den Gipfel in der unteren linken und oben rechts bei der Auswahl einer Polylinie zu finden.
Ich habe diese Funktion bereits ausprobiert, konnte sie aber erst jetzt anwenden.
Ich habe die Befehle > vlax-curve < erforscht und habe den Code neu geschrieben, jetzt kenne ich den Anfangspunkt des Objekts, den Endpunkt und wenn das Objekt aus einem geschlossenen oder offenen Polylinea besteht:
Code:
 (seq object (vlax-ename->vla-object)))
(setq l: Objekt (vlax-curve-getdistatparam Objekt (vlax-curve-getendparam Objekt))
(setq piniz (vlax-curve-getstartpoint object))
(setq pfine (vlax-curve-getendpoint object))
(Sectq-Zustand (vlax-curve-isclosed object) ;
Ich kann den Befehl nicht finden, der alle Polylinea vertices auflistet, ich bin mir fast sicher, dass es existiert!
 
(vl-load-com)
;
; Untergebühr, um Koord zu erhalten. min und max der Auswahl:
(falls (null lm:ssboundingbox)(load "ssboundingbox"))

;
(prompt "\nselect a polyline ")
(setq selpol (ssget))

; finden Sie Koord. niedrig links und hoch rechts:
(setq coor (lm:ssboundingbox selpol))
;

in der Coor-Variable erhalten Sie etwas wie:
(2515.91 5895.91 0.0) (2565.91 5945.91 0.0)
die Koordinaten unten links und oben rechts

Wenn Sie die anderen zwei bekommen wollen, tun Sie eine "collage" mit entsprechend Auto cadr oder nth und dann mit einer Liste verbinden: nehmen Sie die x der ersten mit y der secona und umgekehrt. .
 
Code:
; lista koordinate polilinea lw
(defun fnlwcoord10(ent / e count coord)
(setq count 0)
(while (setq e)
(falls = (Auto e) 10)
(Einstellungen)
)
(setq zählt (1+ zählt)
)
(Liste (cdr (assoc 70 ent)))
)
ent ist der Eintrag des Namens des ausgewählten Unternehmens
rufen Sie die Funktion zurück: (setq list (fnlwcoord10 ent)
zurück die Liste: (1(1465.6 1512.97) (2262.97 2055.93) (2558.77 1680.03) (1726.03 1207.76))
wobei (Autoliste) 1 geschlossen ist, 0 geöffnet
(setq listcoord (cadr list) ist die Koordinatenliste
Vergleiche zwischen Koordinatenabständen 0-2 und 1-3:
(Abstand (nth 0 listcoord) (nth 2 listcoord)
(Abstand (n. 1 Listenkoord) (n. 3 Listenkoord)
wenn sie gleich sind, ist ein Rechteck
 
Code:
Trash-förmige Variable Tipo-Variante in Liste
(defun fnvarianttolisp(var)
(cond)
(=Typ war) „
(fnvarianttolisp (vlax-variant-value)))
(Typ wo) Safearray
(mapcar 'fnvarianttolisp (vlax-safearray->list)
)
(t war)
)
)

Flagge polilinea lw chiusa e koordinate
(defun fncoordslw(n/vlaobj geschlossen)
(setq vlaobj (vlax-ename->vla-object))
(setq geschlossen (vlax-get-property vlaobj "closed")
(Liste geschlossen (fnvarianttolisp (vlax-get-property vlaobj 'Koordinaten)))
)
Es tut das gleiche, aber die Koordinatenliste ist nicht durch Punkte geteilt, ich finde es unangenehmer.
 
danke euch, aber mit all diesen Antworten gehe ich in Verwirrung (ich bin kein Experte).
Heute gelang es mir, diesen Code zu schreiben:
Code:
 (Defun c:cdrs)
(cdrs)
)

(Defun c:trovapunti)
(trovapunti)
)

; -----------------

(defun trovapunti)
(setq vertici (cdrs 10 (entget (car)))))
; defun

; -----------------

(defun cdrs (key lst / pair rtn)

(while (setq pair)
(setq rtn (cons (cdr pair) rtn) lst (cdr (member pair lst))

(princ "\n")
(princ "rtn xxxxxxx")
(princ rtn)
(princ "\n")

> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
(172.908 143.763) (246.282 143.763) (246.282 208.436) (172.908 208.436)

;

(Reverse rtn)
; defun

; -----------------
Ich wäre dankbar, wenn Sie es ändern könnten, um eine Liste von Koordinaten zu verwalten.
Im Wesentlichen möchte ich das haben:
172.908,208,436 246.282,208,436 246.282,143.763 172.908,143.763"
Danke.
 
Hallo, Leute.
Ich habe etwas Gutes bekommen!
Code:
 (Defun c:cdrs)
(cdrs)
)

(Defun c:trovapunti)
(trovapunti)
)

; -----------------

(defun trovapunti)
(setq vertici (cdrs 10 (entget (car)))))
; defun

; -----------------

(defun cdrs (key lst / pair rtn primo cx cy stringa cont)

(setq stringa ")
(setq cont 0)

(while (setq pair)
(setq rtn (cons (cdr pair) rtn) lst (cdr (member pair lst))
(setq primo (car rtn))
(setq cont (1+ cont))

(setq cx (car primo))
(setq cy (cadr primo))

(princ "\n")
(princ "cx xxxxxxx")
(princ cx)
(princ "\n")
(princ "cy xxxxxxx")
(princ cy)
(princ "\n")

(setq stringa (strcat stringa (rtos cx 2 3) "," (rtos cy 2 3) "#)

;

(Reverse rtn)

(setq stringa (strcat stringa (itoa cont)))

(princ "string xxxxxxx")
(princ stringa)
(princ "\n")

; defun

; -----------------
string > string < enthält alle Daten, die ich brauche
Wenn es möglich ist, es zu verbessern, wäre ich dankbar.
Danke.
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben