yoin

Manu

Ik loop tegen het volgende aan :

Aan een ellips kan je de raaklijnen tekenen mbv de snappunten 'quadrant'..
Echter, als je de ellips random roteert werkt deze methode niet meer..
In bijlage een voorbeeld waarbij de gele raaklijnen 'op het zicht' rakend zijn gerekend..
Kent iemand de correcte manier?

Manu
AutoCad 2000 - 2007 - 2008
Sketchup 4-5-6

jimpie

lukt het niet met de optie TANGENT?

Manu

Jimpie,

TANgent zou enkel lukken mocht het beginpunt van je raaklijn al correct zijn bepaald..
.. en dat is hier niet het geval.. toch bedankt voor het meedenken..

.. btw : ik kon reeds de 'brandpunten' van de ellips intekenen.. misschien dat iemand daar mee verder kan?
AutoCad 2000 - 2007 - 2008
Sketchup 4-5-6

roy_043

M.b.v. de onderstaande code kun je de boudingbox van de ellips tekenen. De gewenste "quadrant" punten zijn de intersections van de ellips met deze box.

NB1:
De code gebruikt (entmake). In sommige gevallen zijn hiermee in Bricscad dingen mogelijk die in Autocad niet werken.
NB2:
Werkt alleen voor 2D en WCS.

(vl-load-com)

(defun KGA_Geom_ObjectBoundingbox (object / ptBL ptTR)
  (vla-getboundingbox object 'ptBL 'ptTR)
  (list (vlax-safearray->list ptBL) (vlax-safearray->list ptTR))
)

(defun c:DrawBox ( / box ename)
  (if (setq ename (car (entsel)))
    (progn
      (setq box (KGA_Geom_ObjectBoundingbox (vlax-ename->vla-object ename)))
      (entmake
        (vl-list*
          '(0 . "LWPOLYLINE")
          '(70 . 1)
          (mapcar
            '(lambda (a b)
              (list 10 (car a) (cadr b))
            )
            (list (car box) (cadr box) (cadr box) (car box))
            (list (car box) (car box) (cadr box) (cadr box))
          )
        )
      )
    )
  )
  (princ)
)

Manu

Hey Roy_043,

Dank voor de input maar Acad 2008 geeft volgende error :
Error: no function definition: KGA_GEOM_OBJECTBOUNDINGBOX;
error: An error has occurred inside the *error* functionAutoCAD variable setting rejected:
"filletrad" nil

ik vrees dat een geroteerde ellips net te complex is voor acad... tja... :roll:
AutoCad 2000 - 2007 - 2008
Sketchup 4-5-6

Reimer

Ik heb de routine ook getest en merk dat er iets mis gaat met het plaatsen van de pline.
De coördinaten die worden vastgelegd in de BOX kloppen precies.

Roy, wat kan hier mis zijn?

Reimer

HofCAD

#6
Citaat van: Reimer op vr 14 09 2012, 17:06:37
Ik heb de routine ook getest en merk dat er iets mis gaat met het plaatsen van de pline.
De coördinaten die worden vastgelegd in de BOX kloppen precies.

Roy, wat kan hier mis zijn?

Reimer
Beste Reimer,

Roy geeft niet het aantal vertices op (90 . 4) of (cons 90 (length lst))

Probeer eens:
(defun c:DrawBox2 (/ @KGA_Geom_ObjectBoundingbox box ename ~osm)
  (defun @KGA_Geom_ObjectBoundingbox (object / ptBL ptTR)
    (vla-getboundingbox object 'ptBL 'ptTR)
    (list (vlax-safearray->list ptBL)
  (vlax-safearray->list ptTR)
    )
  )
  (vl-load-com)
  (if (setq ename (car (entsel)))
    (progn (setq box
  (@KGA_Geom_ObjectBoundingbox (vlax-ename->vla-object ename))
   )
   (setq ~osm (getvar "OSMODE"))
   (setvar "OSMODE" 0)
   (command "_.RECTANGLE" (car box) (cadr box))
   (setvar "OSMODE" ~osm)
    )
  )
  (princ)
)

of
(defun c:DrawBox3 (/ @LWPoly @KGA_Geom_ObjectBoundingbox ename box lst)
  (defun @KGA_Geom_ObjectBoundingbox (object / ptBL ptTR)
    (vla-getboundingbox object 'ptBL 'ptTR)
    (list (vlax-safearray->list ptBL)
  (vlax-safearray->list ptTR)
    )
  )
  (defun @LWPoly (lst cls)
    (entmakex
      (append
(list
  (cons 0 "LWPOLYLINE")
  (cons 100 "AcDbEntity")
  (cons 100 "AcDbPolyline")
  (cons 90 (length lst))
  (cons 70 cls)
)
(mapcar '(lambda (p) (cons 10 p)) lst)
      )
    )
  )
  (vl-load-com)
  (if (setq ename (car (entsel)))
    (progn (setq box
  (@KGA_Geom_ObjectBoundingbox (vlax-ename->vla-object ename))
   )
   (setq
     lst (mapcar '(lambda (a b) (list (car a) (cadr b)))
(list (car box) (cadr box) (cadr box) (car box))
(list (car box) (car box) (cadr box) (cadr box))
)
   )
   (@LWPoly lst 1)
    )
  )
  (princ)
)


Met vriendelijke groet, HofCAD CSI.

PS Osmode toegevoegt op 17/09-2012
ACADcadabra

roy_043

@ HofCAD:
Ik had al zo'n vermoeden dat Bricscad met (entmake) net iets flexibeler zou zijn dan Autocad. Eigenlijk vreemd dat AC bij het "entmaken" van nieuwere entiteit-types zo moeilijk doet.
Voor de goede orde: als je (command ...) gebruikt dan is het verstandig om de osmode tijdelijk uit te zetten (maar dat weet een oudgediende zoals jij natuurlijk allang).

HofCAD

#8
Citaat van: roy_043 op vr 14 09 2012, 22:09:47
@ HofCAD:
Ik had al zo'n vermoeden dat Bricscad met (entmake) net iets flexibeler zou zijn dan Autocad. Eigenlijk vreemd dat AC bij het "entmaken" van nieuwere entiteit-types zo moeilijk doet.
Voor de goede orde: als je (command ...) gebruikt dan is het verstandig om de osmode tijdelijk uit te zetten (maar dat weet een oudgediende zoals jij natuurlijk allang).
Beste Roy,

Dat van die Osmode is slordig van me. :oops: :oops: :oops: :oops: :oops: :oops: :oops:
Maar er is een ander probleem:
Als ik met DRAWBOX2 of met DRAWBOX3 de bounding box teken,
dan vindt ik met de Osnap INT geen intersectie in AutoCAD 2012
tussen de ellips en de box.
Wat vind je van de oplossing in de bijlage?
Eerst een ellips erboven of eronder kopiëren en daarna met XLINE
de lijn trekken.


Met vriendelijke groet, HofCAD CSI.
ACADcadabra

bart

Hofcad
Dat je bij een raaklijn geen snijpunt vind is wiskundig 100% correct.
die heeft een raaklijn ook niet
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

HofCAD

#10
Citaat van: bart op ma 17 09 2012, 20:48:34
Hofcad
Dat je bij een raaklijn geen snijpunt vind is wiskundig 100% correct.
die heeft een raaklijn ook niet
Beste Bart,

1)In de analytische meetkunde is er de methode (de Discriminantmethode) om de
raaklijn te bepalen, dat het raakpunt het punt is waar twee snijpunten samenvallen.
http://www.hhofstede.nl/modules/raaklijncirkel.htm
http://www.ikhebeenvraag.be/vraag/28471
2)Bij mijn laatste methode met het XLINE commando krijg je wel een een snijpunt.
3)Laten we het samen eens uit testen bij een raaklijn aan een cirkel. :lol: :lol: :lol: :lol: :lol: :lol:

Met vriendelijke groet, HofCAD CSI.

PS Tussen de drawbox(boundary box) methode en de XLINE methode
zit bij de tekening Ovaal.dwg een afstand van:
Distance = 1.00000079E-08,  Angle in XY Plane = 180,  Angle from XY Plane = 0
Delta X = -1.00000079E-08,  Delta Y = 0.00000000E+00,   Delta Z = 0.00000000E+00
ACADcadabra

FastFiber