yoin

zone2000

Hallo,

Ik probeer de volgende IF functie uit te voeren op twee punten. De punten pt1 en pt4 zijn exact gelijk aan elkaar.
(IF (= (CAR (CDR PT1)) (CAR (CDR PT4))) "yes" "no")

Deze functie geeft "no" als uitkomst.

Dezelfde IF functie waarbij de y-waarden van pt1 en pt4 handmatig zijn ingetypt:
(IF (= 7779.48 7779.48) "yes" "no")

Dit geeft wel "yes" als uitkomst.

Volgens AutoCAD zijn '(CAR (CDR PT1))' en '(CAR (CDR PT4))' reële getallen net als 7779.48 dat ook is (Door (type (CAR (CDR PT1))) te typen geeft AutoCAD: REAL).

Wat moet ik doen om deze vergelijking tussen pt1 en pt4 wel goed te laten verlopen?

Groeten Lars

Petperm

Ik heb zo'n vermoeden.
Probeer eens die twee punten met princ naar de commandolijn te brengen. Als je precision dan 0.00(etc.. ) staat in gesteld zal je waarschijnlijk merken dan ze toch niet helemaal gelijk zijn. Je zou dan een "if" moeten gebruiken waarbij vergeleken wordt of de twee getallen bijna aan elkaar gelijk zijn.
Bvb één manier is om een deling te doen (/ (CDR PT1) 1.00) als je acuraat wilt tot 2 cijfers na de komma.
Een ander is om te kijken of PT1 tussen (PT4 - 0.01) en (PT4 +0.01) ligt.
Waarschijnlijk zijn er nog manieren maar deze twee ken ik.
PetPerm

zone2000

Bedankt voor je reactie.

Ik weet nog niet of jouw oplossing werkt, dat ga ik straks testen. Wel weet ik nog een manier om getallen af te ronden op hele getallen. Dit zou ook een mogelijke oplossing kunnen zijn. Dit doe je door 'fix' ervoor te zetten.

Dus: (fix 567.012345) maakt 567. 'fix' rondt altijd af naar beneden voor zover ik weet.
Dus: (fix 567.9385) maakt ook 567. :)

Maar ik zal eerst jouw oplossing testen.

bart

#3
Ik weet niet wat je verder met de punten moet doen.
Maar persoonlijk vind ik dat je doe oplossing beter kan zoeken in een nauwkeurigere tekening
dan door te gaan smokkelen
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

zone2000

#4
Ik heb een test gedaan waarbij ik een list heb gemaakt van pt1 en pt4 die exact gelijk aan elkaar waren.
De x-waarden van deze lists zijn volgens de IF functie niet gelijk aan elkaar.
---> Als ik de waarden als getallen in variabelen plaats, dan werkt de IF functie ineens wel weer goed. <---  Klopt niet

---EDIT---

De laatste zin is fout!!! De IF functie werkt bij mij nooit goed met variabelen. Ik moet echt numerieke waarden invullen waarover ik een IF functie op wil uitvoeren.
Heeft iemand enig idee hoe dat kan?

Joop

Citaat van: zone2000 op di 13 05 2008, 13:26:19
Bedankt voor je reactie.

Ik weet nog niet of jouw oplossing werkt, dat ga ik straks testen. Wel weet ik nog een manier om getallen af te ronden op hele getallen. Dit zou ook een mogelijke oplossing kunnen zijn. Dit doe je door 'fix' ervoor te zetten.

Dus: (fix 567.012345) maakt 567. 'fix' rondt altijd af naar beneden voor zover ik weet.
Dus: (fix 567.9385) maakt ook 567. :)

Maar ik zal eerst jouw oplossing testen.

Dit is simpel.
De computer rond altijd naar benden af.
Al sinds het begin van de persoonlijke computer cq home computer wordt er afgerond nadat 0,5 (of 0.5) erbij is opgeteld.
(fix ( + 0.5 567.9385)) >>> (fix 568.4385) >>> 568
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

Joop

Citaat van: zone2000 op di 13 05 2008, 16:25:50
Ik heb een test gedaan waarbij ik een list heb gemaakt van pt1 en pt4 die exact gelijk aan elkaar waren.
De x-waarden van deze lists zijn volgens de IF functie niet gelijk aan elkaar.
---> Als ik de waarden als getallen in variabelen plaats, dan werkt de IF functie ineens wel weer goed. <---  Klopt niet

---EDIT---

De laatste zin is fout!!! De IF functie werkt bij mij nooit goed met variabelen. Ik moet echt numerieke waarden invullen waarover ik een IF functie op wil uitvoeren.
Heeft iemand enig idee hoe dat kan?

Kun je de routine hier even plaatsen?
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

zone2000

Dit is de routine. Wat ik graag wil dat de code doet heb ik erachter gezet.

(defun c:ha (/ pt1 pt2 pt3 pt4 pt5) ;Ik wil een gesloten figuur tekenen die (zodra het figuur gesloten is) meteen gearceerd wordt via hatch.
  (command "._pline"
      (setq pt1 (getpoint "\nFirst corner: "))   ;--> Ik wil hier een onbepaald aantal punten definiëren voor het figuur, ik weet
      (setq pt2 (getpoint "\nSecond corner: "))  ;nog niet hoe ik AutoCAD een onbepaald aantal punten kan laten genereren.
      (setq pt3 (getpoint "\nThird corner: "))
      (setq pt4 (getpoint "\nFourth corner: "))

      (IF (= pt1 pt4) ;Pas bij een vierde punt kun je voor het eerst een gesloten figuur maken, ik wil dat de IF functie controleert of pt1
        "c"           ;exact gelijk is aan pt2
        (setq pt5 (getpoint "\nFifth corner: "));Zoniet dan moet er een 5e punt komen. Zoja, dan tekent AutoCAD de polyline over deze punten

      );De code moet dus eigenlijk nog zo worden dat ik een oneindig aantal punten kan invoeren
  )
  (setq a (entlast))
  (command "-hatch" "p" "u" 45 15 "n" "s" a "" "");Hier wil ik de gesloten polyline arceren via hatch
)

De roodgekleurde 'if' functie is altijd onwaar bij mij.

Bedankt voor de reacties zover. Ik hoop dat jullie me verder kunnen helpen.

Groeten, Lars

HofCAD

#8
Citaat van: zone2000 op di 13 05 2008, 12:28:11
Hallo,

Ik probeer de volgende IF functie uit te voeren op twee punten. De punten pt1 en pt4 zijn exact gelijk aan elkaar.
(IF (= (CAR (CDR PT1)) (CAR (CDR PT4))) "yes" "no")

Deze functie geeft "no" als uitkomst.

Dezelfde IF functie waarbij de y-waarden van pt1 en pt4 handmatig zijn ingetypt:
(IF (= 7779.48 7779.48) "yes" "no")

Dit geeft wel "yes" als uitkomst.

Volgens AutoCAD zijn '(CAR (CDR PT1))' en '(CAR (CDR PT4))' reële getallen net als 7779.48 dat ook is (Door (type (CAR (CDR PT1))) te typen geeft AutoCAD: REAL).

Wat moet ik doen om deze vergelijking tussen pt1 en pt4 wel goed te laten verlopen?

Groeten Lars

Beste Lars,

Bedoel je niet:


(defun C:test(/ pt1 pt2 s)
(setq pt1 (getpoint "\nLars eerste punt:\n "))
(setq pt2 (getpoint "\nLars tweede punt:\n "))
(textpage)
(IF (and (= (CAR pt1) (car pt2)) (= (CADR pt1)(CADR pt2)) (= (CADDR pt1)(CADDR pt2)))
(setq s "Yes") (setq s "No"))
(princ (strcat "\nBeste Lars de punten zijn " s " gelijk."))
(princ)
)


Gebruik bij het uittesten van het programma TEST vangfunkties(bijv. END, INT enz.).

Met vriendelijke groet, HofCAD CSI

PS 1) Topic moet verplaatst worden naar AutoLisp
     2) AutoLisp is geen VisualLisp http://www.cadsite.be/smf/index.php/topic,2560.0.html
     3) Zie ook mijn bijdrage op http://www.cadsite.be/smf/index.php/topic,2562.0.html
ACADcadabra

zone2000

Bedankt HofCAD, hier heb ik echt wat aan.

Jij bent heel erg goed met LISP of niet?

Je had een opmerking dat AutoLISP niet hetzelfde is als VisualLISP, weet je zo wat het verschil precies is?

Groeten,
Lars

HofCAD

#10
Citaat van: zone2000 op do 15 05 2008, 14:36:16
Bedankt HofCAD, hier heb ik echt wat aan.

Jij bent heel erg goed met LISP of niet?

Je had een opmerking dat AutoLISP niet hetzelfde is als VisualLISP, weet je zo wat het verschil precies is?

Groeten,
Lars

Beste Lars,

In de artikels van http://www.cadsite.be/smf/index.php/topic,2560.0.html
staan geen functies, die beginnen met vl-, vlax-, vla-  of vlr-.

VisualLisp is een uitbreiding op AutoLisp, wat toegepast kan worden sinds AutoCAD
release 14 en volledig geïmplementeerd is sinds AutoCAD 2000.
Men onderscheidt in VisualLisp de volgende functies:
vl-     Generic extensions to AutoLISP
vlax-  Generic ActiveX functions
        (vlax-get, vlax-put, vlax-invoke are from old VitalLisp)
vla-    AutoCAD-specific ActiveX properties and methods
vlr-    Visual LISP reactor related functions

Je zou kunnen zeggen dat VisualLisp objectgeoriënteerd is, en de mogelijkheid
van ActiveX geeft.
VisualLisp werkt alleen na gebruik van de functie (vl-load-com) om o.a.
de ActiveX support mogelijk te maken.
This function first checks if ActiveX support is already loaded; if so, the function does nothing.
If ActiveX support is not already loaded, vl-load-com loads ActiveX and other Visual LISP extensions
to the AutoLISP language.



Zie het artikel: http://www.dailyautocad.com/autolisp/difference-between-autolisp-and-visuallisp/
en http://www.dailyautocad.com/autocad/114/

Zie ook: http://www.mattworland.com/Tools/Customization/Lisp/lisp.htm

In onderstaande artikelen kun je zien hoe een probleem met AutoLISP
en met VisualLisp opgelost kan worden.

http://www.cadsite.be/smf/index.php/topic,767.0.html
Zie het verschil in de programma’s TABSTR2LST en STR2LST,
en kijk tevens naar de snelheidsverschillen.

http://www.cadsite.be/smf/index.php/topic,1199.0.html
Zie het verschil in de programma's AttDefLst1 en AttDefLst2

Voor een AutoLisp studie bekijk de volgende sites:
1) http://www.midpointcad.com/au/docs/lakose_The_Visual_LISP_Developers_Bible.pdf
2) http://www.afralisp.net/
3) http://www.autolisp-tutorial.mapcar.net/
   voor de 3 tutorials: Tutorial AutoLisp, Advanced AutoLisp en ActiveX AutoLisp.
4) http://ronleigh.info/autolisp/index.htm
5) http://www.asmitools.com/Files/AutoLISP_Help/AutoLISP%20Help.html
6) http://www.cadwest.com.au/Files/AutoCAD/AutoCAD%20Visual%20Lisp%20Commands.pdf
7) http://www.scribd.com/doc/52450758/72/How-to-Use-ObjectDBX-within-Visual-LISP

Zie ook het verschil van een AutoLisp-entiteit en een VisualLisp-object
met het programma INFO.

(defun C:info ( / ent)
(vl-load-com)
(setq ent (entsel))
(textpage)
(princ "\nDit is vanuit de AutoLisp-entiteit:\n")
(print (entget (car ent)))
(princ "\n\nDit is vanuit het VisualLisp-object:\n\n")
(print (vlax-dump-object (vlax-Ename->Vla-Object (car ent)) T))
(princ)
);defun


Bij een AutoLisp-entiteit van een lijn krijgt men zoiets als:
((-1 . <Entity name: 7efa06f0>) (0 . "LINE") (330 . <Entity name: 7ef9ecf8>) (5
. "216") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbLine") (10 2044.12 522.911 0.0) (11 2075.65 555.079 0.0) (210 0.0 0.0 1.0))

en bij een VisualLisp-object van dezelfde lijn zoiets als:
; IAcadLine: AutoCAD Line Interface
; Property values:
;   Angle (RO) = 0.795366
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c>
;   Delta (RO) = (31.5338 32.1687 0.0)
;   Document (RO) = #<VLA-OBJECT IAcadDocument 0185f6e8>
;   EndPoint = (2075.65 555.079 0.0)
;   Handle (RO) = "216"
;   HasExtensionDictionary (RO) = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 07d30fc4>
;   Layer = "0"
;   Length (RO) = 45.0467
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 2130314992
;   ObjectName (RO) = "AcDbLine"
;   OwnerID (RO) = 2130308344
;   PlotStyleName = "ByLayer"
;   StartPoint = (2044.12 522.911 0.0)
;   Thickness = 0.0
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 07d306f0>
;   Visible = -1
; Methods supported:
;   ArrayPolar (3)
;   ArrayRectangular (6)
;   Copy ()
;   Delete ()
;   GetBoundingBox (2)
;   GetExtensionDictionary ()
;   GetXData (3)
;   Highlight (1)
;   IntersectWith (2)
;   Mirror (2)
;   Mirror3D (3)
;   Move (2)
;   Offset (1)
;   Rotate (2)
;   Rotate3D (3)
;   ScaleEntity (2)
;   SetXData (2)
;   TransformBy (1)
;   Update ()



Met vriendelijke groet, HofCAD CSI

PS
1)  Op de vraag of ik erg goed in  LISP ben:
     Indien je een blonde haarkleur zoals ik heb,
     moet je gewoon veel geluk bij het programmeren hebben.
2)  Lars in http://www.cadsite.be/smf/index.php/topic,2562.msg13210.html#msg13210
     heb ik de programma's  HPL1, HPL2 en HPL3 toegevoegd.
3) Op 04/06-2008 is  http://ronleigh.info/autolisp/index.htm toegevoegd.
4) Zie ook de 14 tutorials van Dave Pitzer
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2309147
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2309176
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2309212
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2309242
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2309269
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2309353
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2309466
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2312293
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2312315
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2312345
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2312382
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2312545
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2312562
http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2312702
5) http://www.cadsite.be/smf/index.php/topic,2913.msg14970.html#msg14970
6) http://www.caddsoftsolutions.com/AutoLISP-VisualLISP-DCL-Books.htm
7) http://www.theswamp.org/index.php?topic=37014.0
ACADcadabra

FastFiber