FastFiber

Vraag wat er mogelijk is met Lisp

Gestart door Bolle040, ma 12 10 2015, 09:49:00

Vorige topic - Volgende topic

Bolle040

Beste lezer,

Ik ben sinds 2/3 jaar full time bezig met Cad. Daarbij heb ik gemerkt dat veel handelingen herhaald moeten worden die ik graag zou optimaliseren. Echter heb ik te weinig kennis om een goede Lisp te schrijven en wat er allemaal mogelijk is.

Is het mogelijk om meerder command is een lisp routine uit te laten voeren ? Ik wil namelijk graag het volgende verwerken in een lisp ( uiteindelijk een button)

1.  teken een rectangle ( zelf 2 punten bepalen)
- (command "rectang")

2. select last object

(setq ss1 (ssget "L"))

3. copy dat object with basepoint 0,0

(command "copybase" "0,0,0")

einde lisp.

Deze 3 dingen lukt mij wel om los in een lisp te krijgen. Echter lukt mij het niet om ze alle 3 in 1 lisp te krijgen. U zou me veel helpen om mij uit te leggen of het mogelijk is hoe het moet. Alvast bedankt.

Het probleem:

In tekening 1 ben ik aan het werk.  Dit is een gbkn tekening van een gemeente. Soms ben ik ver ingezoomd om zo bebouwing aan te passen. In tekening 1 staat niet altijd alle informatie om dat dit nie nodig is.  In tekening 2 (op andere scherm) is deze informatie zichtbaar en soms wel handig om keuzes te make. Omdat ik in tekening 1 niet altijd zie waar ik moet ik uizoomen om precies te zien waar ik ben.  Dit vertraagt en daarom lijkt mij het handig om tekening 2 meteen naar juiste punt te zoomen om extra informatie te zien.

Om dit te verwezelijke leek mij het slim om in teken 1 dus een object te tekenen en die te copieren op coordinaten.

In  tekening 2 te plakken en te zoomen naar object en dat het laatste.


Hiervoor moet ik 2 aparte lisp routines hebben. De eeste is klaar dankzij Eddybeerke

Echter lukt mij het niet om de 2de te maken met

(defun C:z2   
(command "pasteorig" "") 
(command "zoom" "o" "l" "") 
(princ))

EddyBeerke

Wat dacht je van:
; begin lisp
(defun C:Jounaamvoordezeactie ( / ss1)
  (command "rectang" (getpoint "\nEerste punt:")(getpoint "\nTweede punt: "))
  (setq ss1 (ssget "L"))
  (command "copybase" "0,0,0" "L" "")
  (princ)
)
; einde lisp
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

EddyBeerke

Misschien een verbetering...:
; begin lisp
(defun C:Jounaamvoordezeactie ( / p1)
  (setq p1 (getpoint "\nEerste punt:"))
  (command "rectang" p1 (getpoint p1 "\nTweede punt: "))
  (command "copybase" "0,0,0" "L" "")
  (princ)
)
; einde lisp
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Bolle040

#3
Harstikke bedankt voor de snelle reactie.

Was vergeten na jou code C:znp te plaatsen nu is het opgelost bedankt !

Snap zelf nog niet helemaal waarom het nu werkt maar dat zal ik eens gaan uitzoeken haha.


Ik heb zelf wat lopen puzzelen maar snap niet waarom het mij niet lukt . Ik zou nu graag een andere lisp routinne schrijven om ervoor te zorgen dat met het vorige gekopieerde object nu geplaatst wordt met coordinaten en erna gezoomd wordt naar dit object. Ik zelf dacht dat dit kan met de volgende lisp:

(defun C:z2
  (command "pasteorig" "")
  (command "zoom" "o" "l" "")
  (princ)
)
C:z2

Echter mis ik denk een belangerijke factor en bouw ik de lisp verkeerd op. Dus graag nog een keer hulp hoe ik dit moet coderen. Alvast bedankt !

roy_043

Ik denk dat de voorgestelde code problemen kan hebben met de OSMODE.
Voeg "_non" toe om dit te vermijden. Of verander de OSMODE tijdelijk.

EddyBeerke

Citaat van: Bolle040 op ma 12 10 2015, 10:39:03
Harstikke bedankt voor de snelle reactie.

Ik zelf dacht dat dit kan met de volgende lisp:

(defun C:z2
  (command "pasteorig" "")
  (command "zoom" "o" "l" "")
  (princ)
)
Echter mis ik denk een belangerijke factor en bouw ik de lisp verkeerd op. Dus graag nog een keer hulp hoe ik dit moet coderen. Alvast bedankt !
Zet die in je bestand of pas de code aan.
Ik heb er wat commentaar bijgezet:

(defun C:z2 ( / )
  (command "pasteorig" "")
  (command "zoom" "o" "l" "")
  (princ)
)

(defun C:Jounaamvoordezeactie ( / p1)
  ; alles na de / is een locate variable en nadat de lisp klaar is bestaat p1 niet meer.
  ; selecteer en bewaar het eerste punt
  (setq p1 (getpoint "\nEerste punt:"))
  ; teken de rectangle, gebruik het eerste punt voor de lijn tussen het 1e punt en 2e punt
  (command "rectang" p1 (getpoint p1 "\nTweede punt: "))
  ; copybase...
  (command "copybase" "0,0,0" "L" "")
  ; start nu de zoom object functie "Z2"
  (C:Z2)
  ; nette afsluiting van de lisp
  (princ)
)


Even nog een tip:
Geef het commando "VLISP" of "VLIDE"
Dan start er een lispeditor in acad.
Hiermee kun je makkelijker debuggen en hulp opvragen.
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Bolle040

Sorry ben vergeten te melden dat de volgende code in een andere tekening gebruik:

(defun C:z2   
(command "pasteorig" "") 
(command "zoom" "o" "l" "") 
(princ))


Het probleem:

In tekening 1 ben ik aan het werk.  Dit is een gbkn tekening van een gemeente. Soms ben ik ver ingezoomd om zo bebouwing aan te passen. In tekening 1 staat niet altijd alle informatie om dat dit nie nodig is.  In tekening 2 (op andere scherm) is deze informatie zichtbaar en soms wel handig om keuzes te make. Omdat ik in tekening 1 niet altijd zie waar ik moet ik uizoomen om precies te zien waar ik ben.  Dit vertraagt en daarom lijkt mij het handig om tekening 2 meteen naar juiste punt te zoomen om extra informatie te zien.

Om dit te verwezelijke leek mij het slim om in teken 1 dus een object te tekenen en die te copieren op coordinaten.

In  tekening 2 te plakken en te zoomen naar object en dat het laatste.


Hiervoor moet ik 2 aparte lisp routines hebben. De eeste is klaar dankzij Eddybeerke

Echter lukt mij het niet om de 2de te maken met

(defun C:z2   
(command "pasteorig" "") 
(command "zoom" "o" "l" "") 
(princ))

Bolle040

Eddy bedankt voor de uitleg, begrijp nu iets meer wat jij en ik aan het doen zijn. Vlisp was mij al bekend en daarin teste ik de volgende 2 regels:

_$ (command "pasteorig")

_$ (command "zoom" "o" "l" "")

Los van elkaar werken deze uitstekend echter als ik deze samen voeg tot een lisp:

(defun C:z2
  (command "pasteorig")
  (command "zoom" "o" "l" "")
)
C:z2

Echter krijg ik dan de volgende fout melding:

error; syntx error  + error: too few arguments

EddyBeerke

Dat komt omdat je de "( / )" bent vergeten...
(defun c:commandname ( / )
; programma
)
Dit zie je wel als je mijn code bekijkt...
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Bolle040

Citaat van: EddyBeerke op ma 12 10 2015, 13:24:05
Dat komt omdat je de "( / )" bent vergeten...
(defun c:commandname ( / )
; programma
)
Dit zie je wel als je mijn code bekijkt...

Dankje zag het verschil eerst niet ;)

Bolle040

Is het mogelijk om na het commando copybase, de rectancle te verwijderen ? Door middel van selecteren en verwijderen of eventueel knippen ?  Alvast bedankt.



(defun C:z1 ( / p1)
  (setq p1 (getpoint "\nEerste punt:"))
  (command "rectang" p1 (getpoint p1 "\nTweede punt: "))
  (command "copybase" "0,0,0" "L" "")
  (princ)
)
C:z1


EddyBeerke

Zoek de verschillen...
(defun C:z1 ( / p1)
  (setq p1 (getpoint "\nEerste punt:"))
  (command "rectang" p1 (getpoint p1 "\nTweede punt: "))
  (command "copybase" "0,0,0" "L" "")
  (command "erase" "L" "")
  (princ)
)
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

FastFiber