| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Block in Polylinie (8990 mal gelesen)
|
FlorianP Mitglied Verm.-Ing
Beiträge: 44 Registriert: 04.12.2002 AutoCAD Map 2000i
|
erstellt am: 28. Okt. 2003 11:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, hat jemand schon für folgendes Problem eine Lösung oder auch ein Konzept über die Vorgehensweise. Ich hab einige geschlossene Polylinien. Dazu Blöcke, die wild verstreut sind. Nun sollte ich wissen, welcher Block in welchem Polygon sich befindet, oder welches Polygon welche Blöcke einschließt. Gibt es für diese Problemstellung irgend eine Standardprozedur bzw. Lösungen oder bleibt mir nichts anderes übrig als über einige Auswahlsätze die entsprechenden Objekte zu suchen? Das Problem bei den Polylinien ist, dass es relativ komplexe Polylinien sein können (z.B. Kreisbögen). Gruß Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 28. Okt. 2003 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hallo Florian, anbei eine einfache Lösung, die allerdings noch keine Kreisbögen berücksichtigt. Das könnte man auch noch reinbringen, ist aber etwas aufwendiger. Zunächst mal die LISP-Datei laden. Baue Dir am besten eine Schaltfläche mit folgendem Inhalt (sel_blk). Dann startest du einfach einen Befehl Schieben/Löschen... und klickst auf die Schaltfläche .. die Polylinie wählen -> Blöcke sind ausgewählt. Code:
(vl-load-com) (defun sel_blk ( / pl) (princ "\nUmgrenzungLWPolylinie wählen:") (setq pl (ssget "_:S" '((0 . "LWPOLYLINE")))) (if pl (ssget "_WP" (mapcar 'cdr(vl-remove-if-not '(lambda (K) (= (car K) 10) ) (entget (ssname pl 0)))) '((0 . "INSERT")) ) ) )
Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD NEU: AutoLISP- Projektschulung NEU: Praxisorientierte Schulungen und Workshops durch die bekannten CAD.de Moderatoren AutoCAD, AutoCAD LT, AutoCAD Mechanical, Mechanical Desktop, Architectural Desktop Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 28. Okt. 2003 12:13 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hallo Florian, mir ist auch noch eine einfache, den Kreisbögen angenäherte Lösung eingefallen. Jede Polylinie wird nun in 100 gleichlange Segmente geteilt. Das kann nun sein, dass dies für deinen Anwendungsfall noch zu grob ist, dann setze diese Zahl einfach hoch.
Code:
(vl-load-com) (defun sel_blk ( / pl pll abst step ptli) (princ "\nUmgrenzungLWPolylinie wählen:") (setq pl (ssget "_:S" '((0 . "LWPOLYLINE")))) (if pl (progn (setq pl (vlax-ename->vla-object (ssname pl 0)) pll (vlax-curve-getDistAtParam pl (vlax-curve-getEndParam pl)) ptli (cons (vlax-curve-getStartPoint pl) ptli) abst (/ pll 100);Jede Poyllinie wird in 100 gleichlange Segmente zerlegt step abst ) (while (<= abst pll) (setq ptli (cons (vlax-curve-getPointAtDist pl abst) ptli) abst (+ abst step) ) ) (ssget "_WP" ptli '((0 . "INSERT")) ) ) ) )
Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD NEU: AutoLISP- Projektschulung NEU: Praxisorientierte Schulungen und Workshops durch die bekannten CAD.de Moderatoren AutoCAD, AutoCAD LT, AutoCAD Mechanical, Mechanical Desktop, Architectural Desktop Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FlorianP Mitglied Verm.-Ing
Beiträge: 44 Registriert: 04.12.2002 AutoCAD Map 2000i
|
erstellt am: 28. Okt. 2003 13:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, zuerst mal Vielen Dank für deine Antworten. Sie sind echt Klasse!!! Nur eins geht momentan noch nicht, und ich denke du weisst bestimmt eine Antwort drauf. Leider werden nur die Blöcke ausgewählt, die komplett im Polygon drin sind. Diejenigen, die von dem Polygon geschnitten werden sind nicht dabei. Wird bei der Option _WP nicht der Einfügepunkt des Blockes verwendet? Gibt es eine Option in der dieser Einfügepunkt ausgewertet wird? Oder funktioniert das nur über ein kreuzen? Dann noch was anderes. von der Option _:S hab ich noch nichts gehört, ich finde sie auch in der Hilfe nicht. Gibt es eine Liste in der alle möglichen Auswahloptionen enthalten sind? Vielen Dank Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 28. Okt. 2003 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 28. Okt. 2003 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hallo Florian, zuerst ein Auszug aus der Hilfe (Acad2000) zu (ssget) Zitat:
Creates a selection set from the selected object (ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list])Selection sets can contain objects from both paper and model space, but when the selection set is used in an operation, ssget filters out objects from the space not currently in effect. Selection sets returned by ssget contain main entities only (no attributes or polyline vertices). Arguments sel-method A string that specifies the object selection method. Valid selection methods are: C Crossing selection. CP Cpolygon selection (all objects crossing and inside of the specified polygon). F Fence selection. I Implied selection (objects selected while PICKFIRST is in effect). L Last visible object added to the database. P Last selection set created. W Window selection. WP WPolygon (all objects within the specified polygon). X Entire database. If you specify the X selection method and do not provide a filter-list, ssget selects all entities in the database, including entities on layers that are off, frozen, and out of the visible screen. :E Everything within the cursor's object selection pickbox. :N Call ssnamex for additional information on container blocks and transformation matrices for any entities selected during the ssget operation. This additional information is available only for entities selected via graphical selection methods such as Window, Crossing, and point picks. Unlike the other object selection methods, :N may return multiple entities with the same entity name in the selection set. For example, if the user selects a subentity of a complex entity such as a BlockReference, PolygonMesh, or old style polyline, ssget looks at the subentity that is selected when determining if it has already been selected. However, ssget actually adds the main entity (BlockReference, PolygonMesh, etc.) to the selection set. The result could be multiple entries with the same entity name in the selection set (each will have different subentity information for ssnamex to report). :S Allow single selection only.
Nun zur ersten Frage. Ist der Einfügepunkt nicht innerhalb des Polygons, dann ist auch der Block nicht vollständig enthalten, wenn das so ist, dann die Option _WP in _CP ändern. dass ist dann PolygonKreuzen. Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD NEU: AutoLISP- Projektschulung NEU: Praxisorientierte Schulungen und Workshops durch die bekannten CAD.de Moderatoren AutoCAD, AutoCAD LT, AutoCAD Mechanical, Mechanical Desktop, Architectural Desktop Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 07. Aug. 2009 17:33 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Einerseits entschuldigung, dass ich diesen alten Thread nochmals hochbringe. Andererseits gehört hier etwas für "Sucher" und "Nachleser", wie mich, ausgebessert bzw. upgedated (falls es denn früher stimmte). Und dann hab ich auch noch eine Frage. Ich hab es jedenfalls gerade ausprobiert und bei mir ist dem ssget der Einfügepunkt des Blocks vollkommen Wurscht. Es scheint doch eher NUR auf die Geometrie an sich anzukommen. Und nun noch zu meiner Frage: Früher habe ich meist mit (ssget "_W" ...) gearbeitet. Bei meinem aktuellen Programm verwende ich aber (ssget "_WP" ...). Ist da schon mal jemand der gravierende Unterschied aufgefallen? (Bei der Suche im Net fand ich nichts - unverständlich). "_W" wählt Objekte innerhalb des Fensters und auch Objekte, die das Fenster von innen aus berühren. "_WP" wählt nur Objekte, die komplett innerhalb des Fenster liegen und lässt die, die das Fenster von innen berühren, weg. Ich habe stundenlang debuggen müssen, bis ich draufkam, warum mein Proggi nicht so funkt, wie ich es will. Weiß jemand eine fertige oder einfache Lösung, wie man bei einem Polygon das Verhalten von "_W" nachbauen kann? Danke. ------------------ Gruß, Stephan www.stbartl.at "Every thing should be made as simple as possible but not simpler." - Albert Einstein Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Aug. 2009 19:01 <-- editieren / zitieren -->
Hi, wenn ich es richtig verstanden habe, dann suchst Du '_CP' (crossing polygon). Wobei ich eben nicht sicher bin, ob ich's richtig verstanden habe, denn '_W' (fenster) hat immer nur mit den Geometrieteilen funktioniert, die 'vollständig innerhalb' sind, die Selektionsmethode '_C' (kreuzen) wäre die Methode, mit der vollständig UND 'teilweise innerhalb' aufgefunden wird. - alfred - ------------------ www.hollaus.at |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 07. Aug. 2009 19:30 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hallo alfred! Danke für deinen Hilfe-Versuch. Ich muss aber wohl den Satz "_W" wählt Objekte innerhalb des Fensters und auch Objekte, die das Fenster von innen aus berühren. noch erweitern: "_W" wählt Objekte innerhalb des Fensters und auch Objekte, die das Fenster von innen aus berühren aber nicht nach außen "weiterverlaufen". Zum Beispiel Linien, die zuvor mit _trim auf das Polygon/das Fenster gestutzt wurden, werden mit "_W" gewählt, mit "_WP" aber nicht. Alles klar? Ansonsten bitte ausprobieren. Ich weiß nicht, wie ich es noch anders erklären soll. ------------------ Gruß, Stephan www.stbartl.at "Every thing should be made as simple as possible but not simpler." - Albert Einstein Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Aug. 2009 21:08 <-- editieren / zitieren -->
Hi Stephan, ich fürchte, da verläßt Du Dich auf mathematische (Un-)Genauigkeit, und diese Sonderfälle der Berührung der Grenze prüfe ich immer in einer getrennten zweien Routine (nachdem ich zuerst mit '_C' bzw. mit '_CP' selektiert habe. Die Schnittpunkte mit der Grenze bis zur letzten Dezimalstelle (und darüber hinaus) sind nun mal mit Toleranz (je nach Position der Geometrie, ob geodätisch und damit schon viele Vorkommastellen oder in der Nähe zu 0,0,0) zu überprüfen. - alfred - ------------------ www.hollaus.at |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 07. Aug. 2009 21:16 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003 If you want to help and want to respect other people's questions, then, please: Please, ALWAYS assume that I already tried to search for an answer to my question. Thx. Also, please, DON'T ask me what the "actual" goal of my question is. Please, firstly just answer it directly as stated - if you know an answer and want to give it. Only secondly, add other commments. Many, many, many thanks in advance!
|
erstellt am: 08. Aug. 2009 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Ich wollte nur noch sagen, selbst wenn es hier um mathematische (Un)Genauigkeiten geht, so ändert das doch nichts daran, dass die Optionen "_W" und "_WP" unterschiedliche Ergebnisse liefern. Dazu Abschließend noch ein kleines Code-Beispiel: Code: (defun c:WindowTest (/ osm ss1 ss2 enm) (setq osm (getvar "OSMODE")) (setvar "OSMODE" 0) (command "_.RECTANGLE" "1,0" "3,3" "") (setq enm (entlast)) (command "_.LINE" "0,1" "2,1" "") (command "_.LINE" "0,2" "2,2" "") (command "_.TRIM" enm "" (list (entlast) (cdr(assoc 10(entget(entlast))))) "") (command "_.ZOOM" "_W" "-1,-1" "4,4")(setq ss1 (ssget "_W" '(1 0) '(3 3))) (setq ss2 (ssget "_WP" '((1 0) (1 3) (3 3) (3 0)))) (princ (strcat "\nss2: " (if ss2 "something" "nothing"))) (princ (strcat "\nss1: highlighted")) (sssetfirst nil ss1) (setvar "OSMODE" osm) (princ) )
"_WP" wählt hier nichts aus. "_W" wählt die gestutzte Linie und das Rechteck aus.------------------ Gruß, Stephan www.stbartl.at "Every thing should be made as simple as possible but not simpler." - Albert Einstein Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 08. Aug. 2009 20:51 <-- editieren / zitieren -->
Hi, zugegeben, Dein Beispiel zeigt die von Dir beschriebene unterschiedliche Wirkungsweise. Ich habe auch probiert, mit normalen '_select' '_wp' und dann mit Objektfängen den Rechteckspunkten zu folgen und auch hier kommt gleiches wie in Lisp zustande (und auch in VBA probiert). Nun ist die Frage: 'was ist früher' aus Deiner Sicht als es noch funktioniert haben sollte. Ich hab's jetzt mal bis 2007 zurück probiert und da ist das Verhalten gleich wie 2010. Einzige (in diesem Fall schnell gefundene) Variante wäre (kommt wieder meine Toleranz):
Code: (setq ss2 (ssget "_WP" '((0.9999 -0.0001) (0.9999 3.0001) (3.0001 3.0001) (3.0001 -0.0001) (0.9999 -0.0001))))
Aber zugegeben, das ist für Rechtecke natürlich leichter zu finden als für beliebige Fenster-Polygone. - alfred - ------------------ www.hollaus.at |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 09. Aug. 2009 02:35 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Juhuu, endlich wurde ich (fast) verstanden. Fast, deshalb, weil mit "früher" meinte ich, dass ich früher eigentlich nur die Option "_W" benutzte (hat damals genauso funktioniert, wie jetzt) und mir daher damals der Unterschied zu "_WP" nicht auffiel bzw. ich zuerst automatisch annahm, dass "_WP" genauso funktionieren würde, wie "_W". Dass dem nicht so war, führte mich schließlich dazu, hier zu posten. - Hoffe, ich drücke mich jetzt verständlich aus. Aber egal - ich hab jetzt folgende Lösung für mich gefunden:
Code: (defun c:WP-Auswahl+Toleranz (/ osm ogt pntLL pntUR enm offsetDistance pntlst ss) ;*** VORBEREITUNGEN FÜR DAS BEISPIEL: (setq osm (getvar "OSMODE")) (setvar "OSMODE" 0) (setq pntLL '(1 0) pntUR '(3 3) );setq (command "_.RECTANGLE" pntLL pntUR "") (setq enm (entlast)) (command "_.LINE" "0,1" "2,1" "") (command "_.LINE" "0,2" "2,2" "") (command "_.ZOOM" "_W" "-1,-1" "4,4") (command "_.TRIM" enm "" (list (entlast) (cdr(assoc 10(entget(entlast))))) "") ;*** AB HIER DER HAUPTTEIL: (setq offsetDistance 0.00001 ;->hier lässt sich die Toleranz einstellen );setq (setq ogt (getvar "OFFSETGAPTYPE")) (setvar "OFFSETGAPTYPE" 0) (command "_.offset" "_e" "_n" "_l" "_s" offsetDistance enm "0,0";->dieser Punkt muss außerhalb des Polygons liegen und sollte natürlich dynamisch erzeugt werden "" );command (foreach item (entget (entlast)) (if(= 10(car item)) (setq pntlst (cons (cdr item) pntlst)) );if );foreach (entdel (entlast)) (setq ss(ssget "_WP" pntlst))(sssetfirst nil ss) (setvar "OFFSETGAPTYPE" ogt) (setvar "OSMODE" osm) )
Der Einfachheit halber hab ich jetzt nur ein Rechteck genommen. Natürlich funkt das ganze auch mit einem anderen Polygon. Bitte um Kritik und Verbesserungsvorschläge. ------------------ Gruß, Stephan www.stbartl.at "Every thing should be made as simple as possible but not simpler." - Albert Einstein Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003 If you want to help and want to respect other people's questions, then, please: Please, ALWAYS assume that I already tried to search for an answer to my question. Thx. Also, please, DON'T ask me what the "actual" goal of my question is. Please, firstly just answer it directly as stated - if you know an answer and want to give it. Only secondly, add other commments. Many, many, many thanks in advance!
|
erstellt am: 12. Aug. 2009 03:51 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
'oppala... Dass mir da niemand auf die Finger geklopft hat? Da das Rechteck eine LWPolylinie ist und das durch "_.offset" erzeugte Entity dann ja auch, ist der Codeabschnitt (foreach item (entget (entlast)) (if(= 10(car item)) (setq pntlst (cons (cdr item) pntlst)) );if );foreach doch eher gefährlich. Die Punkte gehören übersetzt, also so: Code: (foreach item (entget (entlast)) (if(= 10(car item)) (setq pntlst (cons (trans (cdr item) (entlast) 0) pntlst));WKS ist 0, aktuelles BKS wäre 1 );if );foreach
EDIT: Könnte ein Mod diesen Beitrag eventuell bitte ins LISP-Forum schieben, danke.
------------------ Gruß, Stephan www.stbartl.at "Every thing should be made as simple as possible but not simpler." - Albert Einstein [Diese Nachricht wurde von autocart am 12. Aug. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EndlessStorm Mitglied
Beiträge: 10 Registriert: 29.07.2014
|
erstellt am: 29. Jul. 2014 12:13 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hallo zusammen, bitte entschuldigt, dass ich einen so alten Post rauskrame Kann mir evtl jemand das Script so umschreiben, dass ich innerhalb eines Blocks, Linien auffinden kann zum löschen? Ich habe hier in der Zeichnung rund 2800 automatisiert freigestellte Grenzzeichen, leider blieben bei überlappungen von Grenzpunkten kurze Linien übrig. Aufgrund der Tatsache, dass ich nicht alle kurzen Linien löschen kann, ist ein einfacher Filter hier unmöglich... Im Anhang seht ihr, warum ich nicht einfach alle kurzen Linien löschen darf. Freigestellt habe ich die Blöcke, indem ich zur Hilfe einen Kreis erstellt habe und dann etrim genutzt habe aus extrim. Genutzt wird ACAD 2013 mit ExpressTools. Vielleicht hat jemand von euch eine Idee, wie das umzusetzen ist. Vielen vielen Dank im voraus. EndlessStorm Apropos: weiß zufällig jemand, warum beim Befehl "etrim" manchmal auch komplette Linien, die nicht im Mittelpunkt des Kreises enden, sondern den Kreis nur durchlaufen, komplett gelöscht werden, anstatt getrimmt zu werden?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedelzastrow Mitglied Architekt / Bauzeichner
Beiträge: 993 Registriert: 05.07.2007 Win XP AutoCAD 2006 AutoCAD 2009 AutoCAD 2012 LT
|
erstellt am: 29. Jul. 2014 13:58 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hallo und herzlich Wilkommen bei cad.de mit dem Befehl Sauswahl kannst Du nach Linien filtern, deren Länege kleiner einer bestimmten Länge ist. Damit sollte es möglich sein, die ganz kurzen Linien zu "packen". Gruß Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EndlessStorm Mitglied
Beiträge: 10 Registriert: 29.07.2014
|
erstellt am: 29. Jul. 2014 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hallo, das funktioniert leider nicht, wie im Bild zu sehen ist, werden auch Flurstücksgrenzen gelöscht werden, die zwischen zwei Grenzpunkten liegen. Gesucht sind ausschließlich die, die innerhalb eines (aller) Grenzzeichen sitzen... Wenn es mit Blöcken zu kompliziert ist, kann auch vom Zwischenschritt ausgegangen werden, wo der Kreis vorhanden ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedelzastrow Mitglied Architekt / Bauzeichner
Beiträge: 993 Registriert: 05.07.2007 Win XP AutoCAD 2006 AutoCAD 2009 AutoCAD 2012 LT
|
erstellt am: 29. Jul. 2014 14:14 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hallo EndlessStorm, da ich auf Deinem Bild nur etwas sehen kann, aber leider nicht navollziehen kann, wäre es schön, wenn Du einen Ausschnitt aus Deinem Plan zur Verfügung stellen würdest. Leere (Neue) Zeichnung mit den Elementen von Deinem Bild würde schon reichen. Gruß Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EndlessStorm Mitglied
Beiträge: 10 Registriert: 29.07.2014
|
erstellt am: 29. Jul. 2014 14:18 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
OK, habe ein Stück angefügt. Der Layer der zu löschen Linien ist stets identisch, kann also zum Filtern mit verwendet werden. Wie man erkennt, befinden sich innerhalb der gelben Blöcke (Kreise) noch Linien, DIE, und nur die müssen noch automatisiert gelöscht werden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedelzastrow Mitglied Architekt / Bauzeichner
Beiträge: 993 Registriert: 05.07.2007 Win XP AutoCAD 2006 AutoCAD 2009 AutoCAD 2012 LT
|
erstellt am: 29. Jul. 2014 14:25 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
EndlessStorm Mitglied
Beiträge: 10 Registriert: 29.07.2014
|
erstellt am: 29. Jul. 2014 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Wenn das so einfach wäre, hätte ich mich nicht hier im Forum angemeldet, also bitte erst meine Posts lesen und dann was kluges sagen. Danke. Für dein Szenario habe ich den einen Grenzpunkt mal verschoben um dir zu zeigen, dass es nach wie vor nicht durch so easy Filter zu machen ist. [edit] Ist es auch ggf möglich, alles zu löschen, was sich hinter einer gesetzten Schraffur befindet??? Dann würde ich es mir sparen mit dem Extrim, sondern Schraffuren setzen...
[Diese Nachricht wurde von EndlessStorm am 29. Jul. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedelzastrow Mitglied Architekt / Bauzeichner
Beiträge: 993 Registriert: 05.07.2007 Win XP AutoCAD 2006 AutoCAD 2009 AutoCAD 2012 LT
|
erstellt am: 29. Jul. 2014 15:01 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hallo EndlessStorm, dann mal ein paar (wie ich finde) kluge Anmerkungen. Ich würde die Linien am Kreis nicht stutzen, nachträgliches Messen und evt. verschieben wird so einfacher (mit Endpunkt fangen) Wenn ich die Linien im Kreis nicht sehen will und der Kreis ein Block ist.... Einfach den Block im Blockeditor bearbeiten und mit einer solid Schraffur (Farbe nach wahl) füllen. Gruß Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6052 Registriert: 16.09.2004 Windows 10 64bit, ACAD Rel. 14 - ACAD 2023
|
erstellt am: 29. Jul. 2014 15:15 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Zitat: Original erstellt von Fiedelzastrow: Block im Blockeditor bearbeiten und mit einer solid Schraffur (Farbe nach wahl) füllen.
Dann würde man aber bei zwei geringfügig geneneinander versetzten Kreisen (wie oben in Bild.png zu sehen) einen der beiden auch teilweise mit abdecken. (Meine erste Idee wäre auch ein im Block enthaltenes Wipeout gewesen, aber aus ebendiesem Grund verworfen). Jürgen ------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EndlessStorm Mitglied
Beiträge: 10 Registriert: 29.07.2014
|
erstellt am: 29. Jul. 2014 16:01 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Rein Optisch hätte ich mir auch was einfallen lassen können. Blöderweise ist das nur mit optischem anpassen nicht getan... Die Linien müssen unbedingt weg... Da ich den einen Schritt mit dem Freistellen rückgangig machen kann, wären denn eine andere Möglichkeit sinnvoller, einfacher, sicherer, um alle Linien innerhalb des zu erstellenden Blockes zu entfernen? Da bereits Blöcke vorhanden sind und diese durch die hier dargestellten ersetzt werden müssen, habe ich alle Optionen, wie ich vorgehe. Derzeit hole ich mir die Koordinaten des alten Blocks, setze auf diesen einen Kreis mit r=0,675 (Block-Radius) und übergebe den Kreis der Methode "etrim" (leicht Modifiziert). Dieses stellt den Kreis dann frei (leider löscht sie manchmal auch komplette Linien?!). Anschließend lösche ich den Kreis und setze den neuen Block darauf. Ich poste hier mal einen Teil des Codes, vielleicht könnt ihr mir den Code bisl anpassen. Apropo, in den beigefügten Bildern ist zu sehen, was das Tool noch so anrichtet, gelegentlich killt es komplette Linien, wenn diese nur durch den Kreis führen.
Code: ... (Prompt "\nStart: #01 Grenzzeichen") (setq ss (ssget "X" '((0 . "INSERT")(2 . "0118*,0117*")(41 . 0.375)))) (cond (ss (grenzzeichen ss "KAT04" "1019_Vermessungspunkte+Text"))(t (Prompt " ...#01 Grenzzeichen nicht gewechselt"))) (setq ss nil)(setq ss nil) ...(defun grenzzeichen (auswahl block layer) (Prompt "\n...Ersetze Grenzzeichen...") (setq count 0) (repeat (sslength auswahl) (setq temp (ssname auswahl count)) (setq daten (entget temp)) ;(setq scale (cdr(assoc 41 daten))) (setq liste (ssadd)) ; leere neue Auswahlliste (setq objekt(entmake(list '(0 . "CIRCLE")(cons 8 "0")(assoc 10 daten)(cons 40 0.675) ))) (ssadd (entlast) liste) ; add zur neuen Liste (cond (liste (mextrim liste))) (setq del (entlast)) (entdel del) (entdel temp) ;;;;; Block einfügen (entmake (list '(0 . "INSERT") (cons 2 block) (cons 8 layer) (assoc 10 daten) '(41 . 1.0); X scale '(42 . 1.0); Y '(43 . 1.0); Z ); list ) (setq count (1+ count)) ) ;;;;; evtl übrige (doppelte) Kreise entfernen (setq ss (ssget "X" '((0 . "CIRCLE")(40 . 0.675)))) (cond (ss (deleteobjekt ss))) (setq ss nil) (setq liste nil) (Prompt " ...Fertig") ) ;;;;;;;; im Netz gefunden, Urheber ist mir dezeit leider unbekannt ; ******************************************************************************************************************************************* ; MExTrim (defun MExTrim (auswahl / rnd GroupByNum ptonline ptinsideent highlight ss n en ed enA minpt maxpt dx dy pt dxx dyy ) (vl-load-com) (load "extrim.lsp") (defun rnd (/ modulus multiplier increment rand) (if (not seed) (setq seed (getvar "DATE")) ) (setq modulus 65536 multiplier 25173 increment 13849 seed (rem (+ (* multiplier seed) increment) modulus) rand (/ seed modulus) ) ) (defun GroupByNum ( l n / f ) (defun f ( a b ) (if (and a (< 0 b)) (cons (car a) (f (setq l (cdr a)) (1- b))) ) ) (if l (cons (f l n) (GroupByNum l n))) ) (defun ptonline ( pt pt1 pt2 / vec12 vec1p d result ) (setq vec12 (mapcar '- pt2 pt1)) (setq vec12 (reverse (cdr (reverse vec12)))) (setq vec1p (mapcar '- pt pt1)) (setq vec1p (reverse (cdr (reverse vec1p)))) (setq vec2p (mapcar '- pt2 pt)) (setq vec2p (reverse (cdr (reverse vec2p)))) (setq d (distance '(0.0 0.0) vec12) d1 (distance '(0.0 0.0) vec1p) d2 (distance '(0.0 0.0) vec2p)) (if (equal d (+ d1 d2) 1e-8) (setq result T) (setq result nil)) result ) (defun ptinsideent ( pt ent / msp ptt xlin int k kk tst result ) (vl-load-com) (setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))) (setq ptt (vlax-curve-getclosestpointto ent pt)) (setq xlin (vla-addxline msp (vlax-3d-point pt) (vlax-3d-point ptt))) (setq int (GroupByNum (vlax-invoke (if (eq (type ent) 'ENAME) (vlax-ename->vla-object ent)) 'intersectwith xlin acExtendBoth) 3)) (setq int (vl-sort int '(lambda (a b) (< (vlax-curve-getparamatpoint xlin a) (vlax-curve-getparamatpoint xlin b))))) (setq k 0) (while (< (setq k (1+ k)) (length int)) (if (and (eq (rem k 2) 1) (ptonline pt (nth (- k 1) int) (nth k int))) (setq tst (cons T tst)) (setq tst (cons nil tst))) ) (setq tst (reverse tst)) (setq k 0) (mapcar '(lambda (x) (setq k (1+ k)) (if (eq x T) (setq kk k))) tst) (vla-delete xlin) (if kk (if (eq (rem kk 2) 1) (setq result T) (setq result nil)) (setq result nil) ) result ) (setq highlight (getvar "HighLight")) (acet-error-init (list (list "cmdecho" 0 "highlight" highlight "regenmode" 1 "osmode" 0 "ucsicon" 0 "offsetdist" 0 "attreq" 0 "plinewid" 0 "plinetype" 1 "gridmode" 0 "celtype" "CONTINUOUS" "ucsfollow" 0 "limcheck" 0 ) T ;flag. True means use undo for error clean up. '(if redraw_it (redraw na 4)) );list );acet-error-init ;(prompt "\nSelect closed entities: ") (if (setq ss auswahl) ;(if (setq ss (ssget (append (list '(-4 . "<or") '(0 . "CIRCLE") '(-4 . "<and") '(0 . "*POLYLINE") '(-4 . "<not") '(-4 . "&=") '(70 . 8) '(-4 . "not>") '(-4 . "&=") '(70 . 1) '(-4 . "and>") '(-4 . "<and") '(0 . "SPLINE") '(-4 . "&=") '(70 . 1) '(-4 . "and>") '(-4 . "<and") '(0 . "ELLIPSE") '(41 . 0.0)) (list (cons 42 (* 2 pi))) (list '(-4 . "and>") '(-4 . "or>"))))) (progn (setq n (sslength ss)) (while (>= (setq n (1- n)) 0) (setq en (ssname ss n) ed (entget en) enA (vlax-ename->vla-object en)) (vla-getboundingbox enA 'minpoint 'maxpoint) (setq minpt (vlax-safearray->list minpoint) maxpt (vlax-safearray->list maxpoint) ) (setq dx (- (car maxpt) (car minpt))) (setq dy (- (cadr maxpt) (cadr minpt))) (setq pt '(0.0 0.0 0.0)) (while (not (ptinsideent pt en)) (setq dxx (* dx (rnd))) (setq dyy (* dy (rnd))) (setq pt (list (+ (car minpt) dxx) (+ (cadr minpt) dyy) 0.0)) ) (etrim en pt) ) ) ) (acet-error-restore) (princ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadwomen Ehrenmitglied V.I.P. h.c. Mädchen für fast alles
Beiträge: 3067 Registriert: 26.08.2002 ACAD R11 - 2022 (Plant3D) AVIS ACAD LT 2013- 2021 ZWCAD 2015 Versuch "nun ja" [s]History P3D 2012/(13) SP und Hotfix([/s]<P> Windows 10 / 64 Bit Xeon CPU 3.5GHz 16GB Ram NVIDIA Quadro P2000 3x Dell TV100 88P Monitore
|
erstellt am: 29. Jul. 2014 16:22 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
mhhh irgend wie ein ganz anderer Code jetzt anyway für sowas Bitte das nächste mal ein extra Post im LISP Forum eröffnen cu cw ------------------ Also ich finde Unities gut ... und andere sicher auch ------------------------------------------------ cadwomen™ Plant ist wie Öl suchen, je tiefer man bohrt desto mehr kommt ans Tageslicht Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadwomen Ehrenmitglied V.I.P. h.c. Mädchen für fast alles
Beiträge: 3067 Registriert: 26.08.2002 ACAD R11 - 2022 (Plant3D) AVIS ACAD LT 2013- 2021 ZWCAD 2015 Versuch "nun ja" [s]History P3D 2012/(13) SP und Hotfix([/s]<P> Windows 10 / 64 Bit Xeon CPU 3.5GHz 16GB Ram NVIDIA Quadro P2000 3x Dell TV100 88P Monitore
|
erstellt am: 29. Jul. 2014 16:24 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Zitat: Original erstellt von EndlessStorm: [B].... Ich poste hier mal einen Teil des Codes, vielleicht könnt ihr mir den Code bisl anpassen. Apropo, in den beigefügten Bildern ist zu sehen, was das Tool noch so anrichtet, gelegentlich killt es komplette Linien, wenn diese nur durch den Kreis führen. B]
auch nicht sinnig da Variabeln irgendwo im Code nochmal auftauchen könnten, also ganze Code cw
------------------ Also ich finde Unities gut ... und andere sicher auch ------------------------------------------------ cadwomen™ Plant ist wie Öl suchen, je tiefer man bohrt desto mehr kommt ans Tageslicht Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 29. Jul. 2014 16:32 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Ausgerechnet der Code der das trimmen erledigt ist nicht dabei " und übergebe den Kreis der Methode "etrim" (leicht Modifiziert). Dieses stellt den Kreis dann frei"Dann könnte man den Fehler suchen anstatt ein Bitte-entferne-mir-die-Probleme-einer-anderen-Routine.lsp zu erschaffen. Das eigentliche Vorhaben ist ja nicht schwer, durch alle Blockreferenzen oder Kreise: Suche alle Linien, deren Start und Endpunkt "kleiner-gleich Radius" vom Zentrum/Basispunkt entfernt ist, löschen. Wie sieht es nach dem copy&paste Raubzug denn nun mit deinem Wissen in Lisp aus? ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EndlessStorm Mitglied
Beiträge: 10 Registriert: 29.07.2014
|
erstellt am: 29. Jul. 2014 17:05 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Raubzug? Sorry, wenn öffentlich Code ausliegt und man nach so etwas sucht, wird man sich den doch näher anschauen/kopieren dürfen für eigene Zwecke? Ich verkaufe die Lisp ja nicht Mit der ganzen Lisp wirds gerade schwierig, bin jetzt zuhause... Also der kopierte Teil ist ausschließlich der, unterhalb des Hinweises im Code. Der Rest ist alles von mir. Da in der Llisp Layer in andere umgelegt werden sowie Texte mit passendem Winkel ersetzt und diverse Blöcke ersetzt werden, dazu nach einiger Auswahl diverse Objekte (Linien, Texte, Schraffuren, etc) gelöscht werden etc, welche ich selbst ausprogrammiert habe, bin ich schon "Fortgeschrittener" in Sachen lisp. Dennoch gibt es einige Funktionen, die ich noch nicht kann. Aber dazu liest man ja in Foren und wenn man Fragen hat, meldet man sich an und fragt nach... oder nicht? Der fehlende Code sollte bei jedem der die ExpressTools hat, vorhanden sein. Es ist die Funktion EXTRIM in der man suchen muss. Der von mir "modifizierte" Code ist ganz unten im von mir geposteten, dort sind ausschließlich zwei Zeilen mit richtigem (Originalem) Code auskommentiert (die Benutzereingabe ersetzt durch Übergebene Liste z.B.). Gut erkennbar, welche Zeilen Code ich ersetzt habe. Wie geht man denn vor, wenn ich alle Linien innerhalb eines Kreises brechen und dann entfernen möchte? Ich nehme mal an, man muss die Linie zuvor brechen, sonst bringt das Löschen recht wenig...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 29. Jul. 2014 17:33 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Zitat: Original erstellt von cadffm: ...durch alle Blockreferenzen oder Kreise: Suche alle Linien, deren Start und Endpunkt "kleiner-gleich Radius" vom Zentrum/Basispunkt entfernt ist, löschen.
Mit dem Raubzug fragte ich nur uncharmant wie fit du denn eigentlich bist, denn das ging nirgends draus hervor. Oben zitiere ich mich mal selbst zum Thema wie ein mögliches Vorgehen aussehen kann. Etrim stutzt nur, also bleiben "Reste übrig. Soweit ist das Problem erkannt und ich gehe nicht weiter darauf ein (etrim ist ja wie nun bekannt ist nicht dein Code, also belassen wir den mal so wie er ist. Die Aussage das etrim ab und an Linien löscht, dafür finde ich spontan keinen Ansatz, wenn du ein Beispiel posten könntest, dann schau ich mir das auch mal an, vorher bringt es nichts. (der einzige Punkt der mir einfiel wurde gecheckt: Das Prog zoomt entsprechenden Bereich größmöglich, daher soll es keine Probleme geben.) Probleme mit Extrim fallen mit spontan auch nicht ein um da was abzuleiten. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EndlessStorm Mitglied
Beiträge: 10 Registriert: 29.07.2014
|
erstellt am: 29. Jul. 2014 18:24 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Nun ja, Beispiele für das Verschwinden von Linien, habe auf der Arbeit Screenshots gemacht, Vorher und Nachher. Die Bilder liegen angehangen in dem Post mit dem Code etwas weiter zurück. Es betrifft aber nur die Linien, welche den Kreis nicht exakt durch die Mitte schneiden, also die, welche keinen Endpunkt im Zentrum des Kreises haben. Mit dem von mir geposteten Code kann jeder das Scenario nachstellen. Natürlich mit angepassten Namen für zu suchenden Layer und Blocknamen sowie mit zu vergebenen Layer und zu ersetzenden Block (muss in Zeichnung vorhanden sein). Ansonsten sollte an Code nichts fehlen um zu testen (ExpressTools müssen vorhanden sein). Was mir an Wissen noch fehlt, ist, wie ich Linien konstruieren kann, z.B. indem ich einen Winkel habe (aus einem Block ausgelesen), in dessen Richtung P1 gesetzt werden soll mit Entfernung m. Dann um 180° gedreht um des Blocks Mittelpunkt den P2 mit Entfernung m. Bisher habe ich mich mit anderen Dingen beschäftigt und zum laufen gebracht. Denke aber, dass ich das selbst hin bekomme mit bisl einlesen. Passend dazu muss ich sowieso Linien mit fester Länge filtern und löschen (Pfeilspitzen mit bekannter, identischer Länge). In dem Zuge, muss ich mir das mit den Längen von Linien und so eh noch einmal näher anschauen.
Mal so nebenbei, wäre es Möglich, mithilfe der von dir benannten Methode sich das extrim zu sparen? Irgendwie schafft es die kopierte Methode MExTrim ja auch, die Linien zu erkennen, welche durch den Kreis gehen... Womöglich kann ich damit irgendwie was anfangen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadwomen Ehrenmitglied V.I.P. h.c. Mädchen für fast alles
Beiträge: 3067 Registriert: 26.08.2002 ACAD R11 - 2022 (Plant3D) AVIS ACAD LT 2013- 2021 ZWCAD 2015 Versuch "nun ja" [s]History P3D 2012/(13) SP und Hotfix([/s]<P> Windows 10 / 64 Bit Xeon CPU 3.5GHz 16GB Ram NVIDIA Quadro P2000 3x Dell TV100 88P Monitore
|
erstellt am: 30. Jul. 2014 11:22 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Zitat: Original erstellt von EndlessStorm: ..Mal so nebenbei, wäre es Möglich, mithilfe der von dir benannten Methode sich das extrim zu sparen? Irgendwie schafft es die kopierte Methode MExTrim ja auch, die Linien zu erkennen, welche durch den Kreis gehen... Womöglich kann ich damit irgendwie was anfangen?[/B]
Hy wäre auch mein Ansatz gewesen Kreis d=? suchen und alles was innerhalb liegt entfernen somit würden kürzere ,aber außerhalb liegende Linien nicht gelöscht extrim da hab ich nur ne Vermutung, unterschiedliche z Werte , sowas war schonmale wo zu lesen cu cw ------------------ Also ich finde Unities gut ... und andere sicher auch ------------------------------------------------ cadwomen™ Plant ist wie Öl suchen, je tiefer man bohrt desto mehr kommt ans Tageslicht Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EndlessStorm Mitglied
Beiträge: 10 Registriert: 29.07.2014
|
erstellt am: 30. Jul. 2014 21:20 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hmm, ich nehme an, dafür müsste ich mir die Funktion "ptinsideent" näher ansehen (siehe Codeausschnitt von mir). Dort sollte, vom Methodennamen her, das richtige zu finden sein. Wobei ich mit dem vla noch gar nicht vertraut bin... Kann bitte mal jemand mit Erfahrung in Sachen VLA-Commands die Methode ansehen und mir mitteilen, was ggf geändert werden müsste, damit auf einfachem Wege die gefundenen Linien gelöscht werden können? Apropos, kann ich eigentlich diese VLA-Commands mit den Standard-Lisp-Commands ohne probleme mischen, also einfach via (entdel ename) die einzelnen Linien (wahrscheinlich via Schleife) löschen, oder muss es dann zwingend mit VLA-Commands gemacht werden? --zur Zeit habe ich wenig Zeit zum testen und ab nächste Woche bin ich im Urlaub... Danach kann ich mich wieder reindenken Muss mir wohl doch früher als gedacht die VLA-Commands anschauen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADdog Ehrenmitglied V.I.P. h.c.
Beiträge: 2280 Registriert: 30.04.2004 Intel Xeon 3,6 GHz 32 GB RAM NVIDIA Quadro P2000 Windows 10 Enterprise AutoCADmap 3D 2023 WS-Landcad 2023 QGIS 3.28.5
|
erstellt am: 31. Jul. 2014 08:48 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Zitat: Original erstellt von EndlessStorm: Rein Optisch hätte ich mir auch was einfallen lassen können. Blöderweise ist das nur mit optischem anpassen nicht getan... Die Linien müssen unbedingt weg...
Leider kann ich zur Problemlösung nichts beitragen, trotzdem sei die Frage gestattet: warum? Weil es früher beim Zeichnen so gemacht wurde ? Weil es der Arbeitgeber/Auftraggeber so will ? Ich sehe einfach keinen sinnvollen Grund in dieser Arbeitsweise sondern nur Nachteile. Interessiert mich aber. ------------------
Gruß Thomas CADdog, the dog formerly known as TR AutoCAD spricht mit einem, aber viele hören nicht zu. [Diese Nachricht wurde von CADdog am 31. Jul. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EndlessStorm Mitglied
Beiträge: 10 Registriert: 29.07.2014
|
erstellt am: 31. Jul. 2014 19:50 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Es ist der Auftraggeber, dieser legt die zu verwendenen Layer und Blöcke sowie Schriftgrößen, Stile etc alles fest in Form einer zu verwendenen Vorlage und einem Prüfprogramm, welches vor Abgabe auszuführen ist. Veränderungen an Blöcken etc sind nicht erlaubt und würden zu uns zurück gehen. Den Block editieren ist also nicht drin (Thema Solid-Schraffur im Innern) und Schraffuren frei Schnauze würde das Prüfprogramm ebenfalls erkennen und bemängeln. Somit bleibt nur der Weg, die Linien müssen freigestellt werden. Und es macht bekanntlich wenig Spaß, hunderte Kreise manuel freizustellen^^ Darum suche ich nach einem Weg, dieses automatisiert zu tun, die Methode muss lediglich gesagt bekommen können, welches Objekt freigestellt werden soll. Wie dies Programm dann aussieht, ist zweitrangig, die Idee war nur, Extrim irgendwie dazu bewegen zu können, dies zu übernehmen, weil das Programm schlichtweg ja schon existiert... Scheinbar aber läuft es nur 99%ig (Linien verschwinden teilw. ganz). Apropos: es befinden sich alle Objekte/Linien/etc auf Z=0 (andere Werte sind verboten und würde das Prüfprogramm bemängeln =) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 31. Jul. 2014 20:08 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
1. Wenn du ein ordentliches Beispiel DWG/LSP lauffähig posten würdest, dann würde man sich auch vielleicht damit beschäftigen. (Extrim.lsp ist nun genannt und braucht nicht dabei sein, das muß der Helfer einfach selber haben oder er kann nicht testen, fertig) 2. Wenn man jetzt doch nur aufräumen möchte (etrim wie bisher und im nachgang die Dreckflecken entfernen, dann habe ich dir ja schon den Rumpfaufbau genannt wie es geht, du brauchst es nur noch umsetzen. Sollte es dabei Probleme geben.. wir haben ein Lispforum auf CAD.de Und wenn du jetzt wieder nur schreibt "da kann jeder mit den hier..." Dann antwortet noch einer weniger auf diesen Thread (es ist unnötig kompliziert / Helfer müssen selbst Testumgebung schaffen / macht wenig Spaß). ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EndlessStorm Mitglied
Beiträge: 10 Registriert: 29.07.2014
|
erstellt am: 31. Jul. 2014 21:06 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
OK, Test-DWG und aufs wesentliche abgespeckte Lisp hängen anbei. Einfach die Lisp laden und in der DWG ausführen. Dann seht ihr an den drei markierten Stellen, wie es nicht aussehen soll... [edit] Scheinbar agiert die Lisp nicht immer identisch. An der Stelle, wo ich in die DWG schrieb "Ergebnis nicht wie gewünscht" hat mein letzter Testlauf alles richtig dargestellt Die beiden anderen Stellen bleiben jedoch stets identisch mit Fehlern behaftet! Notfalls, also den rechten Text ignoieren, wenn das Ergebnis nun doch gut aussieht!
[Diese Nachricht wurde von EndlessStorm am 31. Jul. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 01. Aug. 2014 13:05 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
zero007cool Mitglied
Beiträge: 10 Registriert: 08.05.2009 Windows 7 SP1 AutoCAD 2015 inkl. SP
|
erstellt am: 15. Okt. 2014 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hallo, Ich weiß der Thread ist schon älter, aber ich brauch Eure Unterstützung beim Programmieren Leider funktioniert der oben angeführte Lisp nur richtig wenn mann zuerst einen Befehl auswählt (Schieben, Drehen, etc...) und dann das Lisp aufruft. Ich möchte aber dass das Lisp ausgeführt wird ohne das ein Befehl vorher ausgeführt werden muss, d.h. das Lisp soll mir die Blöcke nur markieren ohne jeglichen Schieben oder Drehen Befehl - damit ich diese direkt in den Eigenschaften bearbeiten kann. Leider bin ich kein Programmierer und blicke den Code nicht ganz durch: Code: (vl-load-com) (defun C:sel_blk ( / pl) (princ "\nUmgrenzungLWPolylinie wählen:") (setq pl (ssget "_:E:N" '((0 . "LWPOLYLINE")))) (if pl (ssget "_CP" (mapcar 'cdr(vl-remove-if-not '(lambda (K) (= (car K) 10) ) (entget (ssname pl 0)))) '((0 . "INSERT")) ) ) )
Kann mir jemand helfen? DANKE
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 15. Okt. 2014 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
zero007cool Mitglied
Beiträge: 10 Registriert: 08.05.2009 Windows 7 SP1 AutoCAD 2015 inkl. SP
|
erstellt am: 15. Okt. 2014 12:06 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 15. Okt. 2014 12:20 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
zero007cool Mitglied
Beiträge: 10 Registriert: 08.05.2009 Windows 7 SP1 AutoCAD 2015 inkl. SP
|
erstellt am: 15. Okt. 2014 12:24 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 15. Okt. 2014 12:32 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
zero007cool Mitglied
Beiträge: 10 Registriert: 08.05.2009 Windows 7 SP1 AutoCAD 2015 inkl. SP
|
erstellt am: 15. Okt. 2014 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 15. Okt. 2014 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
zero007cool Mitglied
Beiträge: 10 Registriert: 08.05.2009 Windows 7 SP1 AutoCAD 2015 inkl. SP
|
erstellt am: 15. Okt. 2014 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
zero007cool Mitglied
Beiträge: 10 Registriert: 08.05.2009 Windows 7 SP1 AutoCAD 2015 inkl. SP
|
erstellt am: 15. Okt. 2014 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Hurra! Funktioniert hatte vorher nur einen Fehler bei der Polylinie - deswegen hat er nil ausgegeben. Aber ein kleinen Schönheitsfehler hat es noch. Es werden nur die Blöcke markiert welche auf dem Bildschirm in der Polylinie sichtbar sind, d.h. habe ich gezoomt werden nur Objekte markiert welche auch nur aus diesem Ausschnitt sehe - kann man dies beheben? DANKE Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 15. Okt. 2014 14:17 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
Zitat: Original erstellt von zero007cool: ...Es werden nur die Blöcke markiert welche auf dem Bildschirm in der Polylinie sichtbar sind, d.h. habe ich gezoomt werden nur Objekte markiert welche auch nur aus diesem Ausschnitt sehe ...
das ist bei (ssget .. ) so. Zitat: Original erstellt von zero007cool: ... - kann man dies beheben?
in dem du den Bildschirmausschnitt so einstellst, dass die ganze Polyline darauf zu sehen ist. Umhüllendes Rechteck (aus den Koordinaten, die du für den Auswahlsatz berechnest, sehr leicht zu abzuleiten) berechnen und dann einen Zoom-Befehl mit diesen Koordinaten absetzen. Grüße! Holger
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 15. Okt. 2014 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|
zero007cool Mitglied
Beiträge: 10 Registriert: 08.05.2009 Windows 7 SP1 AutoCAD 2015 inkl. SP
|
erstellt am: 15. Okt. 2014 14:42 <-- editieren / zitieren --> Unities abgeben: Nur für FlorianP
|