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

Lisp, um Polylinea in doppelt geschlossener Linie mit gestricheltem Einsatz zu konvertieren

  • Ersteller Ersteller brizzo1982
  • Erstellt am Erstellt am
Ich habe die letzte Liste versucht, aber es funktioniert nicht

; Fehler: Automatisierungsfehler. ungültiger Streitabstand in Offset-Methode
 
affinché il comando funzioni le polilinee devono avere uno spessore costante, solo così può venire creato l'offset sulla polilinea, altrimenti con spessore=0.00 mi dà errore. Ich lege das condizione se la polilinea ha spessore 0.00, il programma passa alla polilinea sukzessivea nella selezione.
Wenn Sie canrebbe anche ein reattore per fare in modo che la polilinea doppia einfügen, wenn Sie automatisch manipolando quella centrale, ma questa è eine andere storia ändern. .

(defun c:pl2can (/gru index modelspace spessore ent1 ent2 coord1 coord2)
(setvar "peditaccept" 1)
(Setvar "cmdecho" 0)
(setq gru(ssget '(0 . "lwpolyline"))))
Index
modelspace(vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object))))
)
(Repeat)
(setq spessore(vla-get-constantwidth (vlax-ename->vla-object (ssname gru (setq index(1+ index))))))))))

(falls (> spessore 0.00)
(Progn)

(vla-put-constantwidth (vlax-ename->vla-object (sname gru index) 0.0)
(setq ent1(car(vlax-safearray->list (vlax-variant-value)))
ent2(car(vlax-safearray->list (vlax-variant-value (vla-offset (vlax-ename->vla-object (ssname gru index)))))))))
coord1 (variant2list (vla-get-Koordinaten ent1) 2)
coord2 (variant2list (vla-get-Koordinaten ent2)
)
(cond)
(eq (vla-get-closed ent1)
(vl-cmdf "_-hatch" "p" "ansi31" 2.0 0 "_s" (vlax-vla-object->ename ent1)
)
(eq (vla-get-closed ent1):vlax-false)
(vla-addline modelspace (vlax-3d-point (car coord1))
(vl-cmdf "_pedit" (entlast) "_j" (vlax-vla-object->ename ent1)(vlax-vla-object->ename ent2) "_cl" "")
(vl-cmdf "_-hatch" "p" "ansi31" 2.0 0 "_s" (entlast) ""_a" "_a" "_y" """)
)
)
)
)

)
(princ)
)

;; **************************************************************************************************************************************************************************************************************************************************************** ****************************************************************************************************************************************************************************************************************************************************************
;; transformiert eine Variante in einer Listea a gruppi con numero elementi per gruppo
(defun variant2lista (listavariant numero / listaparz listafin)
(setq listaparz)
Listafin '()
)
(foreach elemento (vlax-safearray->list)
(setq listaparz)
(if (= Längenlisteaparz) numero)
(setq listafin (append listafin (list listaparz)))
Listeaparz '()
)
)
)
Listafin
)
 
Abgesehen von der Tatsache, dass es auch an geschlossenen Polylinien arbeiten sollte, aber welcher Fehler gibt es Ihnen?
 
Entschuldigung Unwissenheit, aber wie sind die Polylinien des neuen Typs? Aber ich kann keine Polylinien mit Breite 1 zeichnen, mein Feld würde mich stören. Ich dachte, dass man ein geschlossenes Rechteck aussuchte, war für das, was ich interessierte.
 
die Dicke der Polylinea die Breite des Rechtecks bildet, damit sie mit einer von 0 verschiedenen Zahl eingestellt werden soll. andernfalls müssen Sie den Befehl ändern und so wird die Dicke manuell eingefügt.
 
(refun c:pl2sp (/ gru index modelspace spesore ent1 ent2 koordinate1 koordinate2)
(setvar "peditaccept" 1)
(Setvar "cmdecho" 0)
(Initget 7)
(setq spessore (getdist "\ninserire spessore: ")
(gru(ssget '((0 . "lwpolyline"))))
modelspace(vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object)))
)

(Repeat (setq index(sslength gru)))
(vla-put-constantwidth (vlax-ename->vla-object (sname gru (setq index(1- index))))) 0,0)
(setq ent1(car(vlax-safearray->list (vlax-variant-value (vlax-ename->vla-object (sssname gru index)))))))
ent2(car(vlax-safearray->list (vlax-variant-value (vlax-ename->vla-object (ssname gru index)))))))
koordinate1 (vlax kurven-getstartpoint ent1)
koordinate2 (vlax kurven-getstartpoint ent2)
)

(Fortsetzung)
(eq (vla-get-closed ent1):vlax-true)
(vl-cmdf "_-hatch" "p" "ansi31" 2.0 0 "_s" (vlax-vla-object->ename ent1)(vlax-vla-object->ename ent2) "_a" "_a" "_y" "")
)
(eq (vla-get-closed ent1):vlax-false)
(fla-addline modelspace (vlax-3d-point koordinate1)(vlax-3d-point koordinate2))
(vl-cmdf "_pedit" (entlast) "_j" (vlax-vla-object->ename ent1)(vlax-vla-object->ename ent2) "_cl" ")
(vl-cmdf "_-hatch" "p" "ansi31" 2.0 0 "_s" (entlast) "_a" "_a" "_y" """")
)
)

)
(princ)
)
 
große Lippe.
Es wäre interessant, ihn zu ändern, um die Position des Retinos (z.B. intern, mittel oder extern zur ausgewählten Polylinie) wählen zu können.
Ich weiß leider nicht, dass der Vlisp sehr gut ist.
 
Hallo, alle.
super lisp, wirklich, aber leider auf meinem 2011 italienische autocad funktioniert nicht.
nach dem Einfügen der Dicke und der Auswahl der Polylinea sagt mir:

; Fehler: keine Funktionsdefinition: vlax-get-acad-object

Was soll ich tun? Vielen Dank!
 
Guten Morgen.

Der Befehl ist fantastisch.

Es gibt einen Weg zu folgenLinie Typ Trend ?

d.h. statt eine einzelne Scheibe zu machen viele Boxen für wie viele sind die Stifte der eingestellten Linienart

Danke im Voraus
 

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