Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Linie auf Polylinie trimmen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
Autor Thema:  Linie auf Polylinie trimmen (2130 mal gelesen)
bccad
Mitglied



Sehen Sie sich das Profil von bccad an!   Senden Sie eine Private Message an bccad  Schreiben Sie einen Gästebucheintrag für bccad

Beiträge: 57
Registriert: 02.11.2009

erstellt am: 01. Dez. 2009 19:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


pic1.jpg

 
Hallo,

ich bin gerade dabei ein Tool zu programmieren welches aus Koordinatenlisten und anderen Daten
relativ selbstständig diverse Zeichnungen erstellt. Das klappt soweit auch ganz gut. Was mir
noch fehlt habe ich in dem Anhang mal etwas schlicht skizziert.

Ich muss die Linie-1 nach beiden Seiten auf die Polylinie-2 trimmen und dann die Fläche unter
der Linie mit Solid füllen. Ein Kinderspiel wenn man es "von vorne" macht.
Aber wie macht man es mit VBA ?? Handle der beiden Elemente hab ich gespeichert.

Habt ihr eine Idee ???


[Diese Nachricht wurde von bccad am 01. Dez. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 01. Dez. 2009 20:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

wenn die Voraussetzungen immer die sind, dass die Linie-1 schon besteht und gesichtert auf beiden Seiten (je) einen Schnittpunkt mit Polylinie-2 hat, dann:

- Schnittpunkte zwischen Polyline und Linie ermitteln (mit der Option Extend)
- durch die Segmente der Polylinie durchbasteln bis man zum ersten Segment kommt, auf dem einer der beiden Schnittpunkte liegt
- dieser Schnittpunkt ist der Startpunkt einer neuen temporären Polylinie
- an der bestehenden Polylinie-2 weiter durch die Vertizes hüpfen und jeden dieser Vertizes der temp. Polylinie hinzufügen
- BIS man zu einem Segment auf Polylinie-2 kommt, wo der zweite Schnittpunkt (von ganz oben) gefunden wird
- den zweiten Schnittpunkt der temp. Polylinie hinzufügen
- die temp. Polylinie schliessen
- eine Schraffur erstellen auf Basis der temp. Polylinie

Eine von vielen Varianten,

HTH, - alfred -

------------------
www.hollaus.at

bccad
Mitglied



Sehen Sie sich das Profil von bccad an!   Senden Sie eine Private Message an bccad  Schreiben Sie einen Gästebucheintrag für bccad

Beiträge: 57
Registriert: 02.11.2009

erstellt am: 02. Dez. 2009 09:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo a.n.,

das hilft mir leider nicht weiter. Wenn ich die Zeichnung von Hand erstelle
nehme ich den Befehl Dehnen, klicke die Polylinie an, die Linie einmal rechts,
einmal links und fertig ist es. Das möchte ich automatisieren.
Wie ruft man die Befehle von VBA aus auf ? Mit SendCommand, aber was ?

Möglicherweise auch eine Frage an die LISP-Kundigen in diesem Forum.


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13530
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 02. Dez. 2009 09:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für bccad 10 Unities + Antwort hilfreich

Alfred meint, du sollst dir mal die Methode IntersectWith der Linie ansehen , der du als Parameter das Polylinienobjekte und acExtendThisEntity
mitgibst .... die Rückgabe sollten dann die Schnittpunkte sein, deren Koordinaten du der Linie als Start und Endpoint übergibst... zu den Sachen gibts auch Beispiele in der Entwicklerdoku...

Sub Example_IntersectWith()
    ' This example creates a line and circle and finds the points at
    ' which they intersect.
   
    ' Create the line
    Dim lineObj As AcadLine
    Dim startPt(0 To 2) As Double
    Dim endPt(0 To 2) As Double
    startPt(0) = 1: startPt(1) = 1: startPt(2) = 0
    endPt(0) = 5: endPt(1) = 5: endPt(2) = 0
    Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
       
    ' Create the circle
    Dim circleObj As AcadCircle
    Dim centerPt(0 To 2) As Double
    Dim radius As Double
    centerPt(0) = 3: centerPt(1) = 3: centerPt(2) = 0
    radius = 1
    Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPt, radius)
    ZoomAll
     
    ' Find the intersection points between the line and the circle
    Dim intPoints As Variant
    intPoints = lineObj.IntersectWith(circleObj, acExtendNone)
   
    ' Print all the intersection points
    Dim I As Integer, j As Integer, k As Integer
    Dim str As String
    If VarType(intPoints) <> vbEmpty Then
        For I = LBound(intPoints) To UBound(intPoints)
            str = "Intersection Point[" & k & "] is: " & intPoints(j) & "," & intPoints(j + 1) & "," & intPoints(j + 2)
            MsgBox str, , "IntersectWith Example"
            str = ""
            I = I + 2
            j = j + 3
            k = k + 1
        Next
    End If
End Sub

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 02. Dez. 2009 09:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

Code:
  Dim tPLine As AcadLWPolyline
  Dim tLine As AcadLine
  '...tPLine und tLine sollten durch Einleseroutine ja schon bekannt sein
  Dim tIntPnts As Variant
  tIntPnts = tLine.IntersectWith(tPLine, acExtendThisEntity)
  'und hier stehen dann die Schnittpunkte drin

>> Wie ruft man die Befehle von VBA aus auf ? Mit SendCommand, aber was ?

SendCommand ist hier absolut fehl am Platz, da Du Klicks am Bildschirm durchführen musst (um die Seite der Dehnung zu bestimmen), sollten dann aber mehrere Elemene übereinander sein, hast Du mit SendCommand keine Chance, Feedback zu bekommen, welches der Elemente jetzt selektiert wurde.

>> Möglicherweise auch eine Frage an die LISP-Kundigen in diesem Forum

Du kannst es mit beidem, mit Lisp und mit VBA, wenn Du aber Fragen im VBA-Forum stellst, dann werden wir davon ausgehen, dass Du Deine Tätigkeiten auch mit VBA lösen willst. 

- alfred -

------------------
www.hollaus.at

bccad
Mitglied



Sehen Sie sich das Profil von bccad an!   Senden Sie eine Private Message an bccad  Schreiben Sie einen Gästebucheintrag für bccad

Beiträge: 57
Registriert: 02.11.2009

erstellt am: 02. Dez. 2009 19:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo a.n. & CADmium,

das scheint zumindest mein Linienproblem zu lösen. Vielen Dank.
Gibt es für die Flächenfüllung nicht auch einen einfacheren Weg ?
Die Zeichnung entsteht auf einem leeren Blatt, doppelte Elemente
gibt es nicht. Kann man nicht ein Klick unterhalb der Linie simulieren
und ACAD den Umring alleine finden lassen ?

Zitat:

Du kannst es mit beidem, mit Lisp und mit VBA, wenn Du aber Fragen im VBA-Forum stellst, dann werden wir davon ausgehen, dass Du Deine Tätigkeiten auch mit VBA lösen willst.

Schon richtig, aber bei meinem letzten Problem war am Ende auch ein Lisp-Befehl über SendCommand
der Weisheit letzter Schluss. Mir ist die Lösung wichtiger als die reine Lehre. 


- bccad -

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 02. Dez. 2009 19:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> und ACAD den Umring alleine finden lassen ?

0.1 Cent für jede Meldung von AutoCAD, dass die Grenze nicht gefunden werden konnte (Überweisung natürlich an mich) und ich würde dies hier von der Karibik beantworten können. 
Und genau aus diesem Grunde, dass eigentlich nachfolgendes durchgehend unsicher ist, ist es auch von meiner Seite nicht zu empfehlen.

Wenn Du VBA nur des SendCommands wegen nutzt, kannst Du aber auch gleich ein Script machen, wo die Befehle untereinander stehen, das wäre dann die minimalistische Methode.

- alfred -

------------------
www.hollaus.at

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



Sehen Sie sich das Profil von wronzky an!   Senden Sie eine Private Message an wronzky  Schreiben Sie einen Gästebucheintrag für wronzky

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - ACA 2013
Arcibem
System:
Windows NT, 2000, XP
Internet-Startseite:
http://www.archi.de

erstellt am: 02. Dez. 2009 19:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für bccad 10 Unities + Antwort hilfreich

Hallo,
nur mal so ein kleiner Hinweis:
Wenn es sich bei der Form IMMER um ein Viereck handelt, könntest Du statt komplizierter Schraffurgenerationen auch einfach die Fläche mit einem SOLID (nicht 3D!) füllen.

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bccad
Mitglied



Sehen Sie sich das Profil von bccad an!   Senden Sie eine Private Message an bccad  Schreiben Sie einen Gästebucheintrag für bccad

Beiträge: 57
Registriert: 02.11.2009

erstellt am: 02. Dez. 2009 20:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi a.n.,

nein, nicht das wir uns falsch verstehen. Mein Programm ist ziemlich komplex. (ca. 2500 Codezeilen)
(Zeichnet Gewässerprofile mit dynamischen Blattrahmen, Maßbändern und georeferenziert die Fotos)
Da kommt man mit Scripten nicht hin.
Aber gegen ein SendCommand hab ich absolut nichts einzuwenden, wenn es die einfachere Lösung ist.

Wenn ich das mit der Wasserstanslinie und und der Flächenfüllung auch noch raffe
dann braucht der Anwender nur noch auf Plotten zu drücken.

- bccad -

[Diese Nachricht wurde von bccad am 02. Dez. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 02. Dez. 2009 20:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

wenn es schon 2500 Programmzeilen gibt (und diese was mit AutoCAD tun?), dann hätte ich mal vermutet, dass mit meiner Beschreibung gearbeitet werden kann. Tut's offenbar nicht, also schlecht beschrieben 

Woran scheiterst es denn bei Dir? Welcher Punkt ist nicht klar?

- alfred -

------------------
www.hollaus.at

bccad
Mitglied



Sehen Sie sich das Profil von bccad an!   Senden Sie eine Private Message an bccad  Schreiben Sie einen Gästebucheintrag für bccad

Beiträge: 57
Registriert: 02.11.2009

erstellt am: 02. Dez. 2009 20:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi a.n.,

es scheitert daran das ich kein richtiger Programmierer bin, mein Englisch zum lesen
der Doku reicht gerade mal für die Überschriften  und viel Zeit zum rumprobieren
hab ich leider auch nicht. Deshalb kann ich (und das wird möglicherweise Vielen so gehen)
mit CADmiums Tip und mit deinem 2. Beitrag mehr anfangen.
Ein Codeschnipsel sagt mehr als tausend Worte. 

Ohne Foren wie dieses wäre ich aufgeschmissen. (Lese euch schon eine ganze Weile)

- bccad -

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian Blei
Mitglied



Sehen Sie sich das Profil von Christian Blei an!   Senden Sie eine Private Message an Christian Blei  Schreiben Sie einen Gästebucheintrag für Christian Blei

Beiträge: 124
Registriert: 23.06.2008

Thinkpad T60p, 4GB
XP,Autocad 2010, ProStructures V8i 2, VBA, VB.NET,

erstellt am: 02. Dez. 2009 20:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für bccad 10 Unities + Antwort hilfreich

Hi,

da kann ich wiederum nur zu einem Stück reiner Lehre raten.
Oder es einen Profi machen lassen. Schont dann die Nerven.

Christian Blei

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 02. Dez. 2009 20:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

mach mal ein Upload von 2 oder 3 solcher Zeichnungen (damit ich ev. damit kritische Situationen vorher erkenne).

>> Ein Codeschnipsel sagt mehr als tausend Worte

nix gegen Codeschnippsel hier einzuwenden, aber bisher hat die theoretische Beschreibung nicht geholfen, der Auszug der Hilfe (von Thomas) hat nicht geholfen, also sollte wer das ganze für Dich machen?

- alfred -

------------------
www.hollaus.at

bccad
Mitglied



Sehen Sie sich das Profil von bccad an!   Senden Sie eine Private Message an bccad  Schreiben Sie einen Gästebucheintrag für bccad

Beiträge: 57
Registriert: 02.11.2009

erstellt am: 02. Dez. 2009 21:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,

also der Auszug aus der Hilfe war schon richtig. Ich wuste nicht das es diese IntersectWith-Methode gibt.
Und deine 5 Zeilen Code haben den ersten Teil des Problems doch genau getroffen. Damit komme ich klar.
Die Flächenfüllung werde ich am Ende wohl so machen müssen wie du es vorgeschlagen hast,
aber ich hatte gehofft das es auch einfacher geht.

- bccad -

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz