FastFiber

Vierkant tekenen

Gestart door phineas, di 26 07 2011, 18:24:57

Vorige topic - Volgende topic

phineas

Hallo,

Hoe kan je met Lisp een vierkant tekenen?

Groet Phineas.

roy_043

Er zijn verschillende mogelijkheden. 3 voorbeelden:

(defun c:VK1 ()
  (command "_.rectangle" '(0 0) '(100 100))
  (princ)
)

(defun c:VK2 ()
  (command "_.polyline" '((0 0) (100 0) (100 100) (0 100)) "_close")
  (princ)
)

(defun c:VK3 ()
  (entmake
    '(
      (0 . "LWPOLYLINE")
      (90 . 4)
      (70 . 1)
      (10 0.0 0.0)
      (10 100.0 0.0)
      (10 100.0 100.0)
      (10 0.0 100.0)
    )
  )
  (princ)
)

EddyBeerke

Je zou het interactief kunnen maken door een beginpunt te vragen en een richting en een lengte.

(setq punt (getpoint))
(setq hoek (getangle))
(setq afstand (getdist))


Of korter:


(setq punt (getpoint)
      hoek (getangle)
      afstand (getdist)
); end setq

Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

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

HofCAD

#3
Beste Phineas,

Ik ben er vanuit gegaan dat je het vierkant 60x60 wil tekenen vanuit de linker onderhoek
(20,30) in een niet gedraaide toestand.
In de attachment zit een plaatje met wat uitleg over co�rdinaten en
er zijn 2 Lisp bestanden:
Draw Square Lisp.LSP met 15 oplossingen in AutoLisp
Draw Square Vlisp.LSP met 5 oplossingen in Visual Lisp

Met vriendelijke groet, HofCAD CSI.

Citaat van: roy_043 op di 26 07 2011, 22:12:48
Er zijn verschillende mogelijkheden. 3 voorbeelden:

(defun c:VK1 ()
  (command "_.rectangle" '(0 0) '(100 100))
  (princ)
)

(defun c:VK2 ()
  (command "_.polyline" '((0 0) (100 0) (100 100) (0 100)) "_close")
  (princ)
)

(defun c:VK3 ()
  (entmake
    '(
      (0 . "LWPOLYLINE")
      (90 . 4)
      (70 . 1)
      (10 0.0 0.0)
      (10 100.0 0.0)
      (10 100.0 100.0)
      (10 0.0 100.0)
    )
  )
  (princ)
)

Beste Roy_043,

Bij mij werkt alleen VK1. :oops: :oops: :oops:
Zoals je zeker weet, is er in AutoCAD geen commando POLYLINE
en de punten moeten niet in gezamelijke lijst zitten.
Dus:
(defun c:VK2 ();Simpel en traag
  (command "_.PLINE" '(0 0) '(100 0) '(100 100) '(0 100) "_Close")
  (princ)
)


Moet je ook niet in VK3 deze veranderingen aanbrengen:
(defun c:VK3();Snel
  (entmake
    '(
      (0 . "LWPOLYLINE")
      (100 . "AcDbEntity")
      (100 . "AcDbPolyline")
      (90 . 4)
      (70 . 1)
      (10 0.0 0.0)
      (10 100.0 0.0)
      (10 100.0 100.0)
      (10 0.0 100.0)
    )
  )
  (princ)
)

Het probleem was zeker te triviaal. :mrgreen: :mrgreen:

Met vriendelijke groet, HofCAD CSI.

PS Voor entmake voorbeelden zie: http://www.cadtutor.net/forum/archive/index.php/t-44768.html
ACADcadabra

phineas

Bedankt,

Voor de overkill aan mogelijkheden, maar hoe kan men het interactief maken?

Groet Phineas.

roy_043

Citaat van: HofCAD op wo 27 07 2011, 14:08:49
Het probleem was zeker te triviaal. :mrgreen: :mrgreen:
Vreemde opmerking. Voor alle duidelijkheid: de 3 voorbeelden die ik gaf heb ik getest en ze werken alle drie op Bricscad.

@ phineas: misschien moet je iets meer vertellen over jouw eigen kennis en ervaringen met lisp. En ook even aangeven wat jouw doel is. Als je nog helemaal geen ervaring hebt dan kun je beter eerst een cursus volgen.

EddyBeerke

#6
Citaat van: EddyBeerke op wo 27 07 2011, 11:21:01
Je zou het interactief kunnen maken door een beginpunt te vragen en een richting en een lengte.

(setq punt (getpoint))
(setq hoek (getangle))
(setq afstand (getdist))


Of korter:


(setq punt (getpoint)
     hoek (getangle)
     afstand (getdist)
); end setq



Kijk ook eens bij:
http://www.cadsite.be/lisp/lisp.php
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

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

HofCAD

#7
Citaat van: roy_043 op do 28 07 2011, 15:02:04
Vreemde opmerking. Voor alle duidelijkheid: de 3 voorbeelden die ik gaf heb ik getest en ze werken alle drie op Bricscad.

@ phineas: misschien moet je iets meer vertellen over jouw eigen kennis en ervaringen met lisp. En ook even aangeven wat jouw doel is. Als je nog helemaal geen ervaring hebt dan kun je beter eerst een cursus volgen.
Beste Roy_043,

Het tekenen van een rechthoek met Lisp is een van de eerste opdrachten
in een AutoLisp cursus, en kan daarom triviaal genoemd worden.
In AutoCAD krijg ik bij het niet veranderde VK2 programma als ik al iets
getekend heb:
Command: vk2
_.polyline Unknown command "POLYLINE".  Press F1 for help.

Command:
Command: _close Really want to discard all changes to drawing? <N> Really want
to discard all changes to drawing? <N>

Als ik nog niets getekend heb, wordt de tekening afgesloten.

In AutoCAD krijg ik bij het niet veranderde VK3 programma dat er niets gebeurt.

Mijn gedachte was, dat er tussen AutoLisp en Bricscad Lisp geen grote verschillen
bestonden en het bovenstaande aan een slordigheidje was te wijten.
Mijn excuses daarvoor.

Met vriendelijke groet, HofCAD CSI.

Citaat van: phineas op do 28 07 2011, 13:01:08
Bedankt,

Voor de overkill aan mogelijkheden, maar hoe kan men het interactief maken?

Groet Phineas.

Beste Phineas,

In de attachment zit een plaatje met wat uitleg over de 3 commando's
van het Lisp bestand Square.lsp.

Met vriendelijke groet, HofCAD CSI.

PS Voor wat meer uitleg zie bijv.: 'Fifteen lessons including sample programs'
in http://ronleigh.com/autolisp/index.htm
ACADcadabra

roy_043

Om te vermijden dat er een verkeerd beeld ontstaat over Bricscad:

1.
De door HofCAD gewijzigde functies c:VK2 en c:VK3 (bericht #3) werken ook in Bricscad.

2.
"PL" en "POLYLINE" zijn in Bricscad standaard aliassen voor het commando dat, net als in AutoCAD, "PLINE" heet. Dat dit commando in Bricscad ook een lijst met punten accepteert is alleen maar nuttig.

3.
Het beleid van AutoCAD v.w.b. (entmake) is niet consequent. Voor veel "ouderwetse" entiteiten hoef je group code 100 niet mee te sturen. Voor een LWPOLYLINE zou eenzelfde soepelheid in principe mogelijk zijn.

Dus Bricscad is hier WEL "compatible" met AutoCAD. Maar het omgekeerde geldt niet. :wink:

HofCAD

#9
Beste Roy_043,

Bedankje voor de uitleg, hopelijk bestaat er nu geen misverstand meer.

Met vriendelijke groet, HofCAD CSI. :pintje:

PS1 Voor de duidelijkheid voor anderen: In AutoCAD is "PL" ook een standaard alias, maar in
tegenstelling met Bricscad Lisp accepteert AutoLisp geen aliassen.
PS2 Phineas in SquareDia.lsp heb je o.a. de mogelijkheid om in een dialoogbox de keuze te maken
tussen de drie uitgewerkte mogelijkheden.
ACADcadabra

phineas

Hallo Roy, Eddy en HofCAD,

Bedankt voor de tips.
Ik ben slechts een beginner in AutoLISP, en uit AutoLISP_les04.pdf
van http://www.cadsite.be/lisp/lisp.php had ik slechts:
(defun c:Rechthoek ()
(setq Hoek1 (getpoint "\nKies hoek linksonder: "))
(setq Hoek3 (getcorner Hoek1 "\nKies hoek rechtsboven: "))
(setq Hoek2 (list (car Hoek1) (cadr Hoek3)))
(setq Hoek4 (list (car Hoek3) (cadr Hoek1)))
(command "line" Hoek1 Hoek2 Hoek3 Hoek4 "c")
)

Ik wilde daar wat mee gaan experimenteren, zoals Phineas en Ferb
in hun vakantie dat doen.
Dat ik daarbij zo'n overkill aan mogelijkheden zou krijgen,
had ik niet verwacht.
Ook de mogelijkheden om het interactief maken zoals in SquareDia
overdonderen me.
Via de tip van Hofcad vond ik in http://ronleigh.com/autolisp/ales06.htm
het programma squangle.

Dat je door Lisp 'vierkante ogen' kan krijgen, moet ik nog bestuderen.

Groet Phineas.

HofCAD

#11
Citaat van: phineas op za 30 07 2011, 11:59:12
Dat je door Lisp 'vierkante ogen' kan krijgen, moet ik nog bestuderen.
Beste Phineas,

In de attachment zit een plaatje met de dialoogbox van het commando SQUAREDIA1
en van het commando SQUAREDIA2 van het nieuwe bestand SquareDia.lsp.
In dit bestand is er ook het commando SQUAREDIA3 met een dialoogbox.

Met vriendelijke groet, HofCAD CSI.

PS 3/08-2010 Er zat een foutje in: $HofSqDia2Dcl is veranderd naar @HofSqDia2Dcl.
ACADcadabra

FastFiber