Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Civil 3D: Zugriff auf CorridorFeatureLines

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
Autor Thema:   Civil 3D: Zugriff auf CorridorFeatureLines (352 mal gelesen)
Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 2833
Registriert: 15.10.2003

Win 7/64 Prof & Win 10/64 Pro
AutoCAD 2011 - 2017, Expresstools, VPRaster
BricsCAD V16

erstellt am: 03. Aug. 2017 13:01    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

Was jemand, wie man auf die Elementkanten eines Profilkörpers, also auf die "CorridorFeatureLines", per Lisp zugreifen kann?

Scheint nicht so banal zu sein...

Peter

------------------
Für jedes Problem gibt es eine einfache Lösung.
Die ist aber meistens falsch. ;-)

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1719
Registriert: 28.04.2009

Windows 7
NVIDIA GeForce GTX 400
Intel Core CPU 3.4 GHz, 16GB RAM
64bit system
Autocad Civil3d 2017 ENGLISH
Visual Studio 2015
OpenDCL.Runtime.8

erstellt am: 09. Aug. 2017 10:16    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 Peter2 10 Unities + Antwort hilfreich

Du kannst nicht allzuviel machen mit einer Corridor featureline. Siehe
Bild

Versuch eher eine "herkömmliche" FL zu verwenden
Link FeatureLine class in .net


Jo falscher Ansatz, eine Menge Eigenschaften - ich teste gerade ob man via COM an die Eigenschaften herankommt

[Diese Nachricht wurde von cadplayer am 09. Aug. 2017 editiert.]

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1719
Registriert: 28.04.2009

Windows 7
NVIDIA GeForce GTX 400
Intel Core CPU 3.4 GHz, 16GB RAM
64bit system
Autocad Civil3d 2017 ENGLISH
Visual Studio 2015
OpenDCL.Runtime.8

erstellt am: 09. Aug. 2017 11:19    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 Peter2 10 Unities + Antwort hilfreich

Ich glaube hier stösst man an Grenzen. Bei normalen Featurelines gibt es Zugriff auf bekannte Eigenschaften, die aber nicht Zugriff in einer CorridorFeaturline haben. Ich hab hier ein Beispiel wie sich normale FL in 3dPolylinien umwandeln lassen. Vielleicht hilft es dir was...
Code:
(defun c:f2p (/ ss points)
  (defun sublist (lst start leng / n r)
    (if (or (not leng) (< (- (length lst) start) leng))
      (setq leng (- (length lst) start))
      )
    (setq n (+ start leng))
    (repeat leng
      (setq r (cons (nth (setq n (1- n)) lst) r))
      )
    )
  (defun split-list (lst n)
    (if lst
      (cons (sublist lst 0 n)
    (split-list (sublist lst n nil) n)
    )
      )
    )

; >>>>>>>>>>>>>HAUPTPROGRAMM
 
  (princ "\rSelect a feature line to return points: ")
  (if (setq ss (ssget ":S:E" '((0 . "AECC_FEATURE_LINE,AECC_AUTO_CORRIDOR_FEATURE_LINE"))))
    (setq points
  (vlax-invoke
    (vlax-ename->vla-object (ssname ss 0))
    'getpoints
    )
  )
    (princ "\n** Nothing selected ** ")
    )
  (if (setq points (split-list points 3))
    (progn
      (setq mspace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
      (vlax-invoke mspace 'add3dPoly (apply 'append points))
      )
    (princ "\n No 3dPolylines created")
    )
  (princ)
  )


------------------
Gruss Dirk
Blog

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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 2833
Registriert: 15.10.2003

Win 7/64 Prof & Win 10/64 Pro
AutoCAD 2011 - 2017, Expresstools, VPRaster
BricsCAD V16

erstellt am: 09. Aug. 2017 11:48    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

@cadplayer , danke.

In der Zwischenzeit sind Lösungsansätze und Erkenntnisse hier zu finden:
https://www.theswamp.org/index.php?topic=53293.0

------------------
Für jedes Problem gibt es eine einfache Lösung.
Die ist aber meistens falsch. ;-)

[Diese Nachricht wurde von Peter2 am 09. Aug. 2017 editiert.]

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1719
Registriert: 28.04.2009

Windows 7
NVIDIA GeForce GTX 400
Intel Core CPU 3.4 GHz, 16GB RAM
64bit system
Autocad Civil3d 2017 ENGLISH
Visual Studio 2015
OpenDCL.Runtime.8

erstellt am: 09. Aug. 2017 12:29    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 Peter2 10 Unities + Antwort hilfreich

Naja den Lösungsansätze  Der Zugriff mit Lisp ist eher beschränkt - ich fand heraus, dass gerade mal nur die Methode GetPoints() mit vlax-invoke bei einfachen FL aufgerufen werden kann. Bei Corridor FL versagt die Methode ganz FeatureLinePoints(). Also ich würde das ganze nur noch mit .net machen. Die Zeit, die ich mit Lisp verbrate, hätte ich schon längst mit .net umgesetzt in etwas Nützliches oder was meinst du dazu Peter ?
Dir geht es vielleicht genauso wie mir, dass der schnellere Weg mit Testen oft Lisp ist. Man spart sich Zeit mit compiler...

------------------
Gruss Dirk
Blog

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4032
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 09. Aug. 2017 12:40    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 Peter2 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:
...
Dir geht es vielleicht genauso wie mir, dass der schnellere Weg mit Testen oft Lisp ist. Man spart sich Zeit mit compiler...
...

nunja, wenn man aber mit Lisp oft genug an die Grenzen gestoßen ist, und auf diesem Weg viel Zeit 'verbraten' hat, dann testet man gleich in .Net.
Für so Fälle habe ich ein Testprojekt, mit dem ich die Tests und Objektanalysen durchführe.
Was ich in diesem Beitrag geschrieben habe, kann man auch auf Civil und alle anderen Verticalprodukte übertragen.

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1719
Registriert: 28.04.2009

Windows 7
NVIDIA GeForce GTX 400
Intel Core CPU 3.4 GHz, 16GB RAM
64bit system
Autocad Civil3d 2017 ENGLISH
Visual Studio 2015
OpenDCL.Runtime.8

erstellt am: 09. Aug. 2017 14:00    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 Peter2 10 Unities + Antwort hilfreich

Du hast recht Holger, nur leider gibt es einen kleinen Nachteil in .net, in meiner Firma arbeitet man mit unterschiedlichen Acad versionen. Man muss da die versionsabhängigen Referenzen genau zuordnen... sonst gibt´s Kaos.

Manchmal ist meine Sicht, man braucht nicht immer gleich .net speziell wenn es um einfache "script" funktionen in Autocad geht, anfangen
Meine Meinung ändert sich aber auch langsam, weil es einfach mehr Spass macht, in .net zu programmieren.

Bei mir war schliesslich der Auslöser, nichts grossartiges mehr in Lisp zu machen, weil es mit Civil3d-api einfach zu kompliziert wurde.
Wie gesagt, in diesem Thread habe ich wiederunm festgestellt, lass es sein mit Lisp und Civil3d!

------------------
Gruss Dirk
Blog

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4032
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 09. Aug. 2017 14:44    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 Peter2 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:
Du hast recht Holger, nur leider gibt es einen kleinen Nachteil in .net, in meiner Firma arbeitet man mit unterschiedlichen Acad versionen. Man muss da die versionsabhängigen Referenzen genau zuordnen... sonst gibt´s Kaos.
...


Ich denke, dass ich dir im Arx/.Net-Forum schon mal ein paar Screenshots gepostet hatte, wie ich meine Projekte aufbaue.
Aktuell bediene ich 15 Plattformen (unterschiedliche CAD-Systeme, unterschiedler Versionen, unterschiedlicher Frameworks)
-> AuotoCAD 2011 - 2018
-> BricsCAD c14 - v17
-> ZwCAD 14 - 16
Und du kannst dir gewiss sein, dass ich keine Code-Zeile doppelt schreibe.
Die Sache ist doch die: Die Verweise müssen geändert werden. Die Namespaces und Bezeichner (Klasse / Eigenschaften/ Methoden) sind aber unverändert. Es gibt wenige Ausnahmen, die habe ich aber mit Argumenten für die bedingte Kompilierung in den Griff bekommen.
Das bedeutet, egal, welche DLL du in den Verweisen drinnen hast ... dein Code läuft.

Natürlich gibt es in den neueren Versionen Techniken, die es in den älteren Frameworks nicht gibt ... . Darum fange ich immer in der Version an zu programmieren, die der Kunde als niedrigste Zielversion angibt.
Ich habe aber auch die Erfahrung gemacht, dass ab .Net 4.0 die Änderungen in meinem Alltag kaum eine Rolle spielen.

Kurze Anleitung, wie es geht:
Aufgabe: Von einem Programm, was du für AutoCAD 2016 programmiert hast, brauchst du nun die Versionen für 2017 und 2018.
Lösung:
1) Kopiere die *csproj Datei (im Windows-Explorer) und gib der einen versionsbezogenen Namen *_2017.csproj
2) Öffne die Projektmappe im Visual Studio
3) Füge der Projektmappe ein vorhandenes Projekt hinzu und wähle Die eben kopierte Datei: *_2017.csproj
4) Öffne in die Projekteigenschaften
--> korrektes Framework einstellen
--> ggf. Assembly-Namen ändern und/oder Ziel des Builds ändern (so dass du immer weist, welche dll nun für welche acad-Version ist.
5) Lösche die Verweise auf die 2016er AutoCAD-Dlls
6) Füge die Verweise auf die 2017er AutoCAD-Dlls hinzu (lokale Kopie = false einstellen nicht vergessen!!!)
Fertig!

Ab jetzt ist alles, was du in deinem Programm änderst, in allen Projekten geändert. Du musst lediglich für alle Versionen extra kompilieren.

Fügst du eine Klasse, einen Dialog, Bilder .. in einem Projekt hinzu, ist das natürlich in den anderen Projekten ebenfalls zu tun. Dazu kannst du dir im Projektmappenexplorer alle Dateien anzeigen lassen und kannst dann die Dateien via RMT zu den Projekten hinzufügen.

Diese Projektstruktur habe ich mir als Template-gespeichert .. so dass in wenigen Minuten ein neues Projekt aufsetzen kann, was in allen o.g. CAD-Systemen läuft.

Fazit: Das Argument --Unterschiedliche AutoCAD-Versionen-- als K.o.-Kriterium anzuführen, lasse ich nicht gelten.

Über Schulung haben wir ja bereits gesprochen ... aber genau dieses Thema "Projektorganisation" ist in meinen Schulungen ein Schwerpunkt. Klassen, Vererbung auch .. den Rest kann man im Internet lesen.

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1719
Registriert: 28.04.2009

Windows 7
NVIDIA GeForce GTX 400
Intel Core CPU 3.4 GHz, 16GB RAM
64bit system
Autocad Civil3d 2017 ENGLISH
Visual Studio 2015
OpenDCL.Runtime.8

erstellt am: 10. Aug. 2017 07:27    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 Peter2 10 Unities + Antwort hilfreich

Ja Holger ich kann mich erinnern, dass du zu dem Thema schon gepostet hast.
Jetzt ist es einleuchtender - vielen Dank für deine Mühe.

------------------
Gruss Dirk
Blog

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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 2833
Registriert: 15.10.2003

Win 7/64 Prof & Win 10/64 Pro
AutoCAD 2011 - 2017, Expresstools, VPRaster
BricsCAD V16

erstellt am: 10. Aug. 2017 09: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

Zitat:
Original erstellt von cadplayer:
... ich fand heraus, dass gerade mal nur die Methode GetPoints() mit vlax-invoke bei einfachen FL aufgerufen werden kann. Bei Corridor FL versagt die Methode ganz FeatureLinePoints()....

"Versagen" ist nicht ganz richtig - diese Methode existiert bei Corridor FL gar nicht. Trotz der Namensähnlichkeit scheinen das zwei ganz verschiedene Dinge zu sein ...

------------------
Für jedes Problem gibt es eine einfache Lösung.
Die ist aber meistens falsch. ;-)

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1719
Registriert: 28.04.2009

Windows 7
NVIDIA GeForce GTX 400
Intel Core CPU 3.4 GHz, 16GB RAM
64bit system
Autocad Civil3d 2017 ENGLISH
Visual Studio 2015
OpenDCL.Runtime.8

erstellt am: 14. Aug. 2017 16:06    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 Peter2 10 Unities + Antwort hilfreich

Es stimmt, es werden 2 Typen von FeatureLines gehandhabt. Einmal das objekt der Klasse FeatureLine mit GetPoints() und zum zweiten CorridorFeatureLine mit FeatureLinePoints(). Mit beiden Methoden erhält man die Point3d Koordinaten der FL-Punkte. Eine Demonstration leider in Schwedisch zeigt das Auslesen der FL-Points von CorridorFeatureLines, wobei ein Block mit Attribut der Höhenangabe gesetzt wird.

------------------
Gruss Dirk
Blog

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)2017 CAD.de