a
    ދBiWJ                    @   s  d Z de dd d ee  d ZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlmZ ddlZddlZdd	lmZ dd
lmZ ddlmZ ejddd ejZdejj_dejj_dd Zdd Zdd Zdd ZdddZdddZ dd Z!g dddfd d!Z"dd#d$Z#dd&d'Z$d(d) Z%dd*d+Z&dd,d-Z'd.d/ Z(d0d1 Z)d2d3 Z*dd4d5Z+d6d7 Z,d8d9 Z-d:d; Z.dd<d=Z/dd>d?Z0dd@dAZ1ddBdCZ2d%eeegfdDdEZ3ddFdGZ4ddHdIZ5ddJdKZ6dLdM Z7dNdO Z8dPdQ Z9dRdS Z:dTdU Z;dVdW Z<dXdY Z=dZd[ Z>d\d] Z?g Z@e@d^ddfd_d`ZAddadbZBddddeZCddfdgZDddidjZEdkdl ZFdmdn ZGdodp ZHdqdr ZIeJ dfdsdtZKg dug dvdwdddfdxdyZLddzd{ZMdd}d~ZNdddZOd ddZPd!ddZQe aRdd ZSd"ddZTd#ddZUd$ddZVdd ZWdd ZXdd ZYdd ZYd%ddZZdd Z[dd Z\e\ Z e d fddZ]e d dddfddZ^dd Z_dZ`de^e dd|    k odk n  Z`dd Zbdd Z]d&ddZce\ Zde^edd edd edd Zee\ Z dZfe d e d e d e d| e d e d dfddZgdd Zhg ddddfddZid'ddZjd(ddZkd)ddZlemddġenddġdemddǡeD ddemddġgddfddɄZoemddġenddġdemddǡeD ddemddġgddfdd˄Zpde
jvr4dZqdd΄ Zres d Ztdreu dkrejvwetrejvxetZyejzey{dѡZ|eadee
jddӅ  d  eadeTdef  e^dddփee d Z}eadee} d ee}d  d  eadۃ g dufdd݄Z~d Z Z Z Z ZZdd߄ Zd*ddZg dZg dZg dZd ZZd ZZd ZZdZdZdZdZdZdd Zg Zd+ddZedddddZd,ddZd-ddZd.ddZeddddZedddeed ddeed ed deded dedddgZeddd|dddddZdZdZedddedddedddedddggZdaeeedfddZd/ddZdg dudddfdd Zd0ddZed ddgZd1d	d
ZdS (2  z
2025 11 30z   |||  ver:   z* by _diag 4 DM1+1 @ I OI III @ TUGraz ||| z += switchList    N)datetimecombinationspermutations)productgh㈵>   )	tolerancein_model_unitsc                   C   s   t t   d S N)rsDeleteObjectsSelectedObjects r   r   D:\Chiara DM2\DM_lib.pyeS(   s    r   c                   C   s   t t   t  d S r   )r   SelectObjects
AllObjectsr   r   r   r   r   eV,   s    r   c                   C   s   t t   t   d S r   )r   r   r   Redrawr   r   r   r   eA1   s    r   c                   C   s.   t t   t t   t  t   dS )z;Deletes Absolutely All objects, incl hidden and locked
    N)r   UnlockObjectsr   ShowObjectsr   r   r   r   r   r   eAA6   s    r   c                 C   s   t  }t   tt  }t dd |rTt  rTt  D ]}||v r<|| q<t t   |rpt | | rt	d|tt   d d S )NZ_selDupFz*** eDup() deletedzobjects ***)
r   r   UnselectAllObjectslenr   Commandremover   r   print)verboseselectedZvorherobjr   r   r   eDup?   s    r$   ffffff?c                 C   s0   t jdd t dt|  d d t   d S )Nr
   allz-_zoom Factor  _enterF)r   ZoomExtentsr   strr   )Zprozr   r   r   zAS   s    r+   c                   C   s   t jdd d S )Nr
   r&   )r   ZoomSelectedr   r   r   r   zSY   s    r-   	allCoordszP:/c           
      C   s>  t   tj|st| t|| d d}||d  t| D ]\}}|dt| d  t|D ]`\}}dt|d  d t|d	  d t|d
  d }	||	 |t	|d	 k rj|d qj|d |t	| d	 k rD|d qD|d |
  tdtt	|  d t||  d tt  d  d S )Nz.pywz = [z
[ ### list_
[r   ,r
      ]z,
z
]z, ###z
] ### END
*** z coord_Lists exported to file z.py | ins)setTimeospathexistsmakedirsopenwrite	enumerater*   r   closer    getTime)
Zlist2exportZexportedListNamer9   ZfileNamefojlisticoroutr   r   r   exportCoordListsa   s"    4


rG     c                 C   sZ   t dtt| d  d t| f tdt|  d t| d d t| d S )z
    arguments:
        crv  : guid of curve (!)
        param: number - best: rs.CurveLenght(crv)
    returns:
        DOM number - rs.CurveDomain(crv)[1]
    z*** Reparameterized: DOM r
   z >> zReparameterize -selId z	 enter 0 r   F)r    r*   r   CurveDomainr   )crvparamr   r   r   Reparameterizey   s    ($rL         ?c                 C   s(   t || }t ||}t | |}|S r   )r   VectorSubtractVectorScale	VectorAdd)coord0coord1facveccoordr   r   r   pntInbetween   s    rV   c              	   C   s"   t t t | |t | |S r   )r   VectorUnitizeVectorCrossProductrN   )p0p1p2r   r   r   normVec3pnts   s    r\   c                 C   s~   g }t || }t|d D ]2}|t | t |t||  t||  q|r^t | |rnt 	||  tt
| |S )z
    return = coords
    r
   )r   rN   rangeappendrP   rO   floatr    	AddPointsAddLiner   )rQ   rR   segmentscreate_pointsZcreate_linecoordsrT   rD   r   r   r   pntsInbetween   s    "re   c                 C   sh  t | |g|}t ||}t | t t || d}t |t |d}t |t |d}t |t t ||d}	t |	t t | t ||g| d}
t |	t t | t ||g| d}||g}||
g}tt ||dt |	|
 t ||d }ds|rXt t 	|| ||| gdg d t 
|| |}t |t ||  |t || gS )z
    arguments:
        p0, p1, p2 .. 3 coords
        verbose 0/1 generate circle
    returns:
        list [center, radius]
    rM   i i`yz---r   r
   d      rg   )r   LineClosestPointrN   rP   rO   r    DistanceLineLineIntersectionObjectColorAddCurvePlaneFromPoints	AddCircle)rY   rZ   r[   r!   Zp2NZp2NvecZp0p1MZp0p1NZp0p1_NZp1p2MZp1p2NZp1p2_NZline01Zline02centerZplnr   r   r   circumcircleOfTriangle   s"    (("rq   c           	      C   sh   d}d}d}| D ](}||d 7 }||d 7 }||d 7 }qt | }|| }|| }|| }|||g}|S Nr   r
   r3   )r   )	rd   Zx_sumZy_sumZz_sumrU   numxyzr   r   r   pntCentroid   s    
rw   c                 C   sF   g }|D ]}t | |}|t| qttt|| }t|d S Nr
   )r   rj   r^   abszipsortedrC   )originrd   distsrU   distzipped_listsr   r   r   pntsSortDistancePnt   s    r   c                 C   sB   g }|D ]}t | |}|t| qttt|| }|d S rx   )r   DistanceToPlaner^   ry   rz   r{   )planerd   r}   rU   r~   r   r   r   r   pntsSortDistancePln   s    r   c                 C   s   t | |S r   )r   CurvePerpFrame)rJ   crv_parameterr   r   r   plnCurvePerp   s    r   c              
   C   s   t | t |t || S r   )r   rj   EvaluateCurveCurveClosestPoint)pntrJ   r   r   r   pntCurveDist   s    r   c                 C   s   t | t || S )z
    arguments:  pnt: [x,y,z]
               line: [point, point] 
       return: distance of nearest point on LINE from tst_pnt
    )r   rj   ri   )r   liner   r   r   pntLineDist   s    	r   c                 C   s    t || }t |t || S )z|
    arguments: pnt: [x,y,z]
               crv: ID of curve
       return: pnt [x,y,z] on curve that is closest to pnt
    )r   r   r   )r   rJ   Zparar   r   r   pntCurveClosest  s    r   c                 C   s   t | |}|d }|S Nr   )r   )rJ   r   	prepframer   r   r   r   pntCurvePerp  s    
r   c                 C   s   t | |}t|d }|S rx   r   r   rW   rJ   r   r   rT   r   r   r   vecCurvePerpX  s    
r   c                 C   s   t | |}t|d }|S )Nr3   r   r   r   r   r   vecCurvePerpY  s    
r   c                 C   s   t | |}t|d }|S N   r   r   r   r   r   vecCurvePerpZ  s    
r   c                 C   s2   t | |}t|d }t||}t|}|S r   )r   r   rW   rX   )rJ   r   Znorr   dirrT   r   r   r   vecCurvePerpNormal$  s
    

r   c                 C   s   t | |g d}|S )Nr   r   r
   r   rJ   r   rT   r   r   r   vecCurvePerpXY-  s    r   c                 C   s   t | |g d}|S )Nr   r
   r   r   r   r   r   r   vecCurvePerpXZ0  s    r   c                 C   s   t | |g d}|S )Nr
   r   r   r   r   r   r   r   vecCurvePerpYZ3  s    r   c                 C   s,   t | d d t | d  d t | d  S )Nr   r2   r
   r3   r*   r   r   r   r   pnt2str8  s    r   c                 C   s   | d | d dgS )Nr   r
   r   r   r   r   r   pnt2XY0:  s    r   c                 C   s   | d d| d gS )Nr   r3   r   r   r   r   r   pnt2XZ0<  s    r   c                 C   s   d| d | d gS rr   r   r   r   r   r   pnt2YZ0>  s    r   c                 C   s   dd | D S )Nc                 S   s   g | ]}|qS r   r   ).0valr   r   r   
<listcomp>A      zpnt2cor.<locals>.<listcomp>r   r   r   r   r   pnt2cor@  s    r   c                 C   s   dd | D S )Nc                 S   s"   g | ]}|d  |d |d gqS r   r
   r3   r   )r   r   r   r   r   r   C  r   zpnts2cors.<locals>.<listcomp>r   )pntsr   r   r   	pnts2corsB  s    r   c                 C   s
   t | S r   )r   coerce3dpoint)rE   r   r   r   cor2pntD  s    r   c                 C   sD   t | } t |}t |}d|  d | d | d }t|d d S )NzcPlane 3Point r   z enterF)r   r   r   )rY   rZ   r[   cmdr   r   r   
cPlane3ptsG  s
    r   c                 C   s   dd | D S )Nc                 S   s   g | ]}t |qS r   )r   r   rE   r   r   r   r   T  r   zpnts2XY0.<locals>.<listcomp>r   )rd   r   r   r   pnts2XY0S  s    r         ?c                 C   s   t | }tdD ]}|r"t|  tdd t| dD dd d}|rbt|dt | d	|d
 d  |d
 d |k r| |d
 d
 d
  qtdf ds|rtd|dt| d tt |  d |d
 d d  qq| S )NrH   c                 S   s$   g | ]}|t |d  |d gqS )r   r
   )r   rj   )r   Zpairr   r   r   r   ^  r   z#pntRemoveByDist.<locals>.<listcomp>r3   c                 S   s   | d S rx   r   )ZsortKeyr   r   r   <lambda>^  r   z!pntRemoveByDist.<locals>.<lambda>)keyzlen(coords)zmin r   r
   zXXX pntRemoveByDist done z: cnt =zlen(coords) vorher/nachher /z
 - minDistz
XXXXXXXXXXXXXXXXXXXXXXXX)	r   r]   randomshuffler{   	combinater    r   r*   )rd   minDistZ	randomizer!   Z	lenVorherrD   ZdistListr   r   r   pntRemoveByDistY  s    
  
<r   c           	   	   C   s   t | }t|  }}|g}tddD ]z}t  |}|}| D ]L}|d |d  |d |d   |d |d  |d |d    dk r:|}q:|| ||kr$ qq$||kr|rtd|dt|dtt|  d  |S )Nr
   i'  r   z*** convHull: i=z: len convCoords=z(from zcoords))rw   minr]   escr^   r    r   r*   )		coordListr!   Zavgstartard   rD   obr   r   r   pntConvHullv  s     D
(r   c                    s    fddt |D S )Nc                    s$   g | ]} fd dt dD qS )c                    s   g | ]}t  qS r   r   uniformr   rD   r   r   r   r   r     r   z)pntRandVec.<locals>.<listcomp>.<listcomp>r   r]   r   rB   r   r   r   r     r   zpntRandVec.<locals>.<listcomp>r   r   r   anzahlr   r   r   
pntRandVec  s    r   c                    s    fddt dD S )z
        randVec (a=-1, b=1)
        Parameters:
            a: value von
            b: value bis
        Returns:
            list: [rnd(a,b), rnd(a,b), rnd(a,b)]
    c                    s   g | ]}t  qS r   r   r   r   r   r   r     r   zrandVec.<locals>.<listcomp>r   r   r   r   r   r   randVec  s    	r   rg   c                    s    fddt |D S )Nc                    s$   g | ]} fd dt dD qS )c                    s   g | ]}t  qS r   r   r   r   r   r   r     r   z,pntRandCoords.<locals>.<listcomp>.<listcomp>r   r   r   r   r   r   r     r   z!pntRandCoords.<locals>.<listcomp>r   r   r   r   r   pntRandCoords  s    r   c                 C   s   t   t | dks$t | dkrRt dt|  d d t | }t dd t   t | dkrt | d t | }t | d |S )	N      @_solidPtOn _selID  _enter _enterF_pointsOff _enter   Tr   r   
ObjectTyper   r*   ObjectGripLocationsEnableObjectGripsobjIDrd   r   r   r   getSurfacePoints  s    

r   c                    s(   t | j  fddt jd D S )Nc                    s   g | ]}  |qS r   )	Point3dAtr   Zvertsr   r   r     r   z!getMeshPoints.<locals>.<listcomp>r
   )r   
coercemeshVerticesr]   Count)ZobjIdr   r   r   getMeshPoints  s    r   c                 C   s   t   t | dks$t | dkrTt dt|  d d t | | t dd t   t | dkrt | d t | | t | d d S )	Nr   r   r   r   r   r   r   r
   r   r   r   r   r   setSurfacePoints  s    r   c                 C   s   t | td| td| S )N
   )mathfloorpow)numberZ	nachkommar   r   r   	mathRound  s    r   c                 C   s
  |dkrt dt  f tt }tt }dt|d d dt|d d dt|d d df }dt|d d dt|d d dt|d d df }ttt d}tjt d d}|rt d|||f  tt d tt d ||gS )	Nr3   z.***
view: "%s" : [camPos], [targetPos], lens 
z
%s, %s, %sr   r   r
   )	up_vectorzTdm.setCameraTarget( [%s], [%s], lens=%s, rota=0, upVec=[0,0,1] ) # ... danke, andi !)	r    r   CurrentViewViewCameraTargetViewCameraPlaner   roundViewCameraLensViewCameraUp)viewr!   Zcamr   ZcamPosZ	targetPosZlensValupVecr   r   r   getCameraTarget  s    88r   r   r   r   r   2   c                 C   sz   t t  | | |r&t t  | |r:t t  | dsB|rZt dt| d d |rvt   tt  |d d S )Nr
   z-_viewportproperties rotation z enter enterF)r   r!   )	r   r   r   r   r   r   r*   r   r   )cameratargetZlensrotar   r!   r   r   r   setCameraTarget  s    r   c                 C   s2  t jj }|std d S g }g }t|D ]b\}}|d urB|jrB|j}|r||| || |dkr||js|td|d| |s,td  d S q,| std d S dd	 tjjD }	|	D ]D}
| D ]:}tjj|}|j}||| |
 tjj||d
 qq|r"tdt| dt||  d  tjj  d S )Nz Failed to get display mode data!r
   r3   	=z!XXX No valid display modes found!z'............XXX no objects selected XXXc                 S   s   g | ]
}|j qS r   )ActiveViewportID)r   r   r   r   r   r     r   z1SetObjDisplayModeAllViewports.<locals>.<listcomp>Fz...........zobjects set_2 DisplayMode: "")RhinoDisplayDisplayModeDescriptionGetDisplayModesr    r>   ZPipelineLocked	LocalNamer^   r   r]   r   scdocViewsObjectsFind
AttributesZSetDisplayModeOverrideModifyAttributesr*   r   )ZobjIDsZdisplaymodeXr!   Z
all_dmodesZvalid_dmodesZvalid_modenamesrD   ZdmodeZ
local_nameZvIDsZvIDr   ZobjRefattrr   r   r   SetObjDisplayModeAllViewports  s6    

 r  r   c                 C   s  t jj }|dkr td d}|dkr2t jjj}|dkrDt jjj}|dkrVt jjj}|dkrht jjj	}|dkrzt jjj
}|dkrt jjj}|d	krt jjj}|d
krt jjj}|dkrt jjj}|dkrt jjj}|dkrt jjj}|dkrt jjj}|dkrt jjj}| dkr| tt jj krt jj t|  }||j_||j_t jj| dsj|rtd|t|  jd dd  d |dt| d  n:tt|D ],} ||  }||j_||j_t jj| qt| trt| dk r|t|  }| }|r<td td td td td td t|D ]\}}|j}	ds^|rDt|}
|dk rxd|
 }
t|
d t|	dd d dd   f td!t|| jjf td"t|| jj qDdS )#a  
        arguments:
                displayModeX: int .. number of displayMode
                rad  = 3 : point radius
                styl = 3 : point style
                verbose : quasselig
                point style:
                    https://developer.rhino3d.com/api/rhinocommon/rhino.display.pointstyle
                    0 ControlPoint "square with center"
                    1 RoundControlPoint "round with center"
                    2 Simple "solid square"
                    3 RoundSimple "solid circle"
        Standard displayModes_numbers
        0 Wireframe
        1 Shaded
        2 Rendered
        3 Ghosted
        4 XRay
        5 Technical
        6 Artistic
        7 Pen
        8 Arctic
        9 Raytraced
        10 etc ! 
       z"!!! print nix style>12 > set_2 "3"r   r   r
   r3               r   	   r      r'   z*** style "z"::::::::::::::    z PointRadius =z8geaendert, danke Eszter & danke Andi fuer PointStyle = "r   zPointStyle 0: square outlinezPointStyle 1: circle outlinezPointStyle 2: square solidzPointStyle 3: circle solidz PointStyle 4: square ActivePointzPointStyle 5: round ActivePointr   z = Nz:::::::::::::::::   zpointRadius=z/ pointStyle =)r  r  r  r  r    Z
PointStyleControlPointZRoundControlPointZSimpleZRoundSimpleZActivePointZRoundActivePointZArrowTipZHeartZChevronZTriangleXZPinZAsteriskr   intZDisplayAttributesPointRadiusZUpdateDisplayModeEnglishNamer*   r]   
isinstancer>   )displayModeXradstylr!   Zdisplay_modesZstyxZselected_descriptionZdisXrD   Zenglish_namers   r   r   r   r    s\     D*r  Tr  c                 C   s@   t dd | dkr<dt| d t| d }t |d d S )Nz_PrintDisplay State=Off _enterFTz_PrintDisplay State=On Color=z  Thickness=Scale Scale=r(   )r   r   r*   )statescalecolorr   r   r   r   printDisplay^  s    r$  0r3   c                 C   s:   |t t|  }|dkr2t|D ]}|t|  } q t| S r   r   r*   r]   r   signsollLenanzrD   r   r   r   textPre0i  s    r+  c                 C   sr   t d}g }t| r\t| D ]:\}}|sF|t t|| | q|t || qntd t | |S )Nr   z ***________no list > no textDots)r   EnableRedrawr   r>   r^   
AddTextDotr*   r    )r   ZstrXZjustNameZRDstateZlisrD   ptr   r   r   textDotsp  s    

r/  c                   C   s   t   ad S r   )timetimeXr   r   r   r   r7     s    r7   c                 C   s@   t t }|t t8 }| r6tdtt|d d  t|dS )Nztim: r3   r6   )r_   r0  r1  r    r*   r   )r!   timr   r   r   r@     s
    r@   c                 C   s:   |t t|  }|dkr2t|D ]}|t|  } q t| S r   r&  r'  r   r   r   preNull  s    r3  c                 C   s\   t | | t ||  }|| }|r8|||  |k r8|S |rP|||  |krP|S |||  S r   )r_   )rD   ZiMinZiMaxZoMinZoMaxlimitZinFacZoutFacr   r   r   reMap  s    r5  c                 C   s   dd t | |D S )Nc                 S   s   g | ]}|qS r   r   )r   permr   r   r   r     r   zpermutate.<locals>.<listcomp>r   rC   rs   r   r   r   	permutate  s    r8  c                 C   s   dd t | |D S )Nc                 S   s   g | ]}|qS r   r   )r   combr   r   r   r     r   zcombinate.<locals>.<listcomp>r   r7  r   r   r   r     s    r   c                 C   s   t | d }t | }tdt| d t|  g }tt | d D ]6}g }tt | D ]}|| | |  qX|| qD|S )Nr   zlist x/y_dir = r   )r   r    r*   r]   r^   )listXZx_dirZy_dirtmprt   Zcolsru   r   r   r   
switchList  s    r<  c                    s    fddt t d D S )Nc                    s(   g | ]   fd dt tD qS )c                    s   g | ]} |  qS r   r   )r   ru   )r:  rt   r   r   r     r   z)switchList.<locals>.<listcomp>.<listcomp>r]   r   r   r:  )rt   r   r     r   zswitchList.<locals>.<listcomp>r   r=  r?  r   r?  r   r<    s    c                 C   sj   t t }|t t8 }t|d}t|}|rLt|d|d}tdt|  | r`tt|d  t|dS )z
    timeGet(verbose=0, prenull=0)
    Parameters:
        verbose: int 0/1 print
        prenull: int, textPre0(tim, "0", prenull)
    Returns:
        round(tim,2)
    r3   r%  r(  r)  ztxt r6   )r_   r0  r1  r   r*   r+  r    )r!   Zprenullr2  txtr   r   r   timeGet  s    

rB  c                 C   s   t | d }t | |d  }|dkrjt |d }t ||d  }t|dd t|d d t|d d S t|d}t|d}t|dd t|d d S )	Ng      N@<   ;   r
   :r   r   r6   )r  r+  )Zsecsr   sechorr   r   r   timeSec2Min  s    *

rH  c                  C   s$   t  } | j| j| j| j| j| jgS r   )r   nowyearmonthdayhourminutesecond)rI  r   r   r   
getDateNow  s    rP  c                 C   s,   ddt | d dk ddddddddddgS N      r  r      r  rJ  r   r   r   daysInMonth  s    rW  r  rT  c                 C   s   t | tkr(t| d | d | d ddS t| }|t| t|d  kr~|rztdt|  d t| d t| d f dS d}tdt|D ]}|||d  7 }q|t| S )Nr   r
   r3   )r!   z&*** ________no good date: date2number(, ) | return =)typerC   date2numberrW  r  r    r*   r]   )rJ  monrL  r!   monthsr   mr   r   r   r[    s    2$r[  c                 C   s$   t | d }t | | d }||gS )NrC  rU  )rs   ZminurG  r   r   r   number2minute  s    r_  i,  Z   c                 C   sb  d}d}d}d}| dkr,d}d}d}dt  }| dkrHd}d}d	}dt  }| d
krdd
}d}d}dt  }| dkrxd}d}d}| dkrd}d}d}| dkr|dk d}d}d}| dkr|dk d}d}d}| dkr|dk d}d}d}| dkr|dk d}d }d}| d!kr|d!k d"}d#}d$}| d%kr8|d%k d&}d'}d}| d(krV|d(k d)}d*}d}|||| gS )+NZguinear   ZhartgY9G@g,eX/@r
   grazgF_G@g1.@Z
schulgasseg)G@go(|.@zNYC UNg~+P_D@g6}RZ
stonehengegNI@g*7Zgizag o?@g0*=@r3   ZkoenigsberggJ4YK@giq~4@Z
sheppertong58EGI@gi o߿Z	barcelonagAfկD@g+	 @ZHONOLULUgN5@g{vwciZTIRANAg"~D@gE3@Z	STOCKHOLMgdM@gQ1@)dlSaving)ortXortZlatZlonZtimeZoner   r   r   rd    s~    


rd  c                 C   s,   ddt | d dk ddddddddddgS rQ  rU  rV  r   r   r   rW  ]  s    rR    c                 C   sd   t |}tddD ]L}| || kr2|d | g  S | || 8 } | ||d  kr|d | g  S qd S )Nr   r  r
   r3   )rW  r]   )r   rJ  r]  rD   r   r   r   number2date`  s    rg  ra  r  r  c           	      C   s  t jjj}d|_ttd |_t|_	|t
| |d  kr`|t| |||||ttd ttd  |rJtd| t|dddt|ddddtt| || d d	t|d
 t| d
 t| d t  d ttttd dd ttttd d d dtttd  	f tdtt|jdd tt|jd d  |j}|j|j|jgS tdt|  d t| d t| d f ddg dgS d S )Nr
   r3   r   z    setSun @r%  r@  z(day# )@rE  z @ z @ lat/lon =r  u   °/   °z| tZ = z| azi/alti =z!*** ________no good date: setSun(rX  rY  r   )r  r  LightsZSunEnabledrd  re  ZTimeZonerc  ZDaylightSavingMinutesrW  ZSetPositionSystemZDateTimer    r+  r*   r[  upperr   ZAzimuthZAltitudeVector)	rJ  r\  rL  rM  r   rF  r!   ZsunZsunVecr   r   r   setSunt  s    
...rp  c                   C   s   t d d S rx   )r  escape_testr   r   r   r   r     s    r   )i   rr  rr          c                 C   sx   | }t j| |dd t |r>t t | t t | t || t|g|R ||||d d t |  dS )zs
    newEmptyLayer( lay, color=[105,105,105], transe=0.0, gloss=0.0, refl=0.0 )
    new layer is set current !
    r   )parentZ_layMat)TGlossReflmatNamN)	r   AddLayerIsLayerr   ObjectsByLayerr   
LayerColor
rgbMat2LayCurrentLayer)Zlayr#  ZtranseZglossZreflZlayXr   r   r   newEmptyLayer  s    
 r     nonec           
      C   s   | rt | }ntjj }t|}t|}t|}t ||||f t ||d  t 	||d  tjj| }	||	_
tjj|	|d |dkrd|||t|d |f }t || |S )a   Adds Material to Objects.
    Parameters:
      obj_id = Guid of Geometry in RhinoDoc
      Red[opt] = 0-255
      Green[opt] = 0-255
      Blue[opt] = 0-255
      Transparency[opt] = 0.0 - 1.0, 1.0 being transparent
      Glossiness[opt] = 0.0 - 255.0, 255.0 being glossy
      Reflectivity[opt] = 0.0 - 1.0, 1.0 being fully reflectant
      matName[opt] = Materialname as String
    Returns:
      Material index
    ư>   r
   r  mat_%s_%s_%s_%s_ind_%srg   )r   AddMaterialToObjectr  r  	MaterialsAddr  MaterialColorMaterialTransparencyMaterialShineReflectivityModifyMaterialName)
Zobj_idRGBru  rv  rw  rx  indexnewMatr   r   r   
rgbMat2Obj  s    "r  c           
      C   s   | rt | }ntjj }t | t|}t|}t|}tjj| }	||	_tjj	|	|d |dkrd|||t|d |f }t 
||||f t ||d  t ||d  t || |S )a   Adds Material to LAYER.
    Parameters:
      lay_nam = layerName
      Red[opt] = 0-255
      Green[opt] = 0-255
      Blue[opt] = 0-255
      Transparency[opt] = 0.0 - 1.0, 1.0 being transparent
      Glossiness[opt] = 0.0 - 1.0, 1.0 being glossy
      Reflectivity[opt] = 0.0 - 1.0, 1.0 being fully reflectant
      matName[opt] = Materialname as String
    Returns:
      Material index
    Tr  r  rg   r  r  )r   AddMaterialToLayerr  r  r  r  ResetMaterialr  r  r  r  r  r  r  )
Zlay_namr  r  r  ru  rv  rw  rx  r  r  r   r   r   r}    s    
"r}  @   c              	   C   s  t dd}t dd}ddt ddg}g d}| }|dk rJd}td ||d 8 }| d | d dg}g }d	| }	t|D ]$}
t||	|
 g d
}|| qt |}g }||d  }tt|d d D ]<}
|d |d  ||
  |d |d  |d g}|| q|dt|d  D ]0}t	t|dg d
d|dg}|| q&|dt|d  D ]"}t|dg d
}|| qld}g d
}|r |}t d| d| t d| d| dg}||dg}t
|D ]\}
}t|||||
< qtt |t |}t|d |d }d|d< t
|D ]\}
}t	||||
< q<t|d}td tdt|  d t| d |d tdt| d t| d t| d  td ||gS )Nr  r  r   r   r  r   z&   *** anzahl coords set 8 (= minimum)rM   g     v@r   r
   r3   r`     gg?r   zD   *** *********** *********** *** DM2_w25 / hu_02 / square_&_circlez   *** setUp_hu_02(rX  z) returned 2 arrays withz(pointCoords each: [coordsCir, coordsSqu]z   *** coordsSqu are rotated u   .0° @ axis [z, 1.0]z@   *** ********* *********** *** ************************* *****)r   r   r    r]   r   VectorRotater^   choicer  rP   r>   rN   r   r*   )r   Z	rotateSquZrCircleZaCubeZmCubeZmCircler*  Z	vecRadialZ	coordsCirZdAngrD   rT   ZmovCube	coordsCubZdAr   Zrvecr   r   r   setUp_hu_02  s\    
. *

$,r  r   r   Ah  c                    sR  d9 |d  |}|  }|dks0|dkrJtd d dgg }	g t|D ]}
t|D ]}|
 d |dk   | d |dk  }|dkr d	  |d	  dg |dks|
dks|
|d ks|dks||d kr|dkr |dg |dkrf|dkrf ddg qfqZd
 d d d g }	g }|dkrfddt|D }	fddt|d D }|dkrd}|	 |	dd D  |	 fddD  |	 fddD  |	dd D  |	 fddD  |d }|fddt|D  |fddt|D  |fddt|D  |fddt|D  |dd |d D  |dd |d D  |dkr<d}|	 |	 fddD  |	 fddD  |	 fd dD  |	d!d D  |	 fd"dD  |	 fd#dD  |	 fd$dD  |	 fd%dD  |	 fd&dD  |	 fd'dD  |	 fd(dD  |fd)dt|d* D  |fd+dt|d* D  |fd,dt|d* D  d d d d |dk  gt|	D ]$\}fd-dD |	|< qj|dkrd.}|rvg }|	D ]| q|d d  }	t|	}t|	}	|t|	 }g }|D ]| q|d d  }t|}t|D ]}|	t
| q |rntd/ td0| d1 tt|	 d2  td3 ||	gS |dkrN|rFtd4 t|d5krtd0| d6 tt| d7  t|d5k r>td0| d8 tt| d9 tt|d  d: tt|	 d9 tt|	d  d; tt|	t|	d   d7  td< ||	gS d S )=Nr   r
   EF      r   rM   r  rs  LXz?;f?c                    s"   g | ]  fd dD qS )c              
      s*   g | ]"}t |d d   d  gqS r   rM   r   rP   r   dist_ptsedge_lenrD   r   r   r   6  r   z*setUp_hu_03.<locals>.<listcomp>.<listcomp>r   r>  rd   r  r  rD   r   r   6  r   zsetUp_hu_03.<locals>.<listcomp>c                    s4   g | ],}t t t t td dt  qS r  r  r   rO   rW   r  r   r   r   r   radiusr   r   r   8  r   r   "F"_acesc              
   S   s*   g | ]"}t t |d g dg dqS r`  r   r   r   rP   r  r   r   r   r   r   =  r   c              
      s,   g | ]$}t t |d g d ddgqS r`  r   r   r   r   r  r   r  r   r   r   >  r   c              
      s,   g | ]$}t t |d g dd dgqS r`  r   r   r  r   r  r   r   r   ?  r   c              
   S   s*   g | ]"}t t |d g dg dqS r`  r  r   r  r   r   r   r   r   @  r   c              
      s,   g | ]$}t t |d g dd d  gqS r   r  r  r   r  r   r   r   A  r   r3   c                    s:   g | ]2}t t t  d d gtddg d qS r   r  r  r   r   rO   rW   r  r   r   r   r  r   r   r   E  r   c                    s:   g | ]2}t t t d  d gtddg d qS r   r  r  r   r  r   r  r   r   r   F  r   c                    s:   g | ]2}t t t   d gtddg d qS r   r  r  )r
   r   r   r  r   r  r   r   r   I  r   c                    s<   g | ]4}t t t    d gtddg d qS r   r  r  )r
   r
   r   r  r   r  r   r   r   J  r   c                 S   s   g | ]}t |d g dqS -   r   r   r  r   rT   r   r   r   r   L  r   c                 S   s   g | ]}t |d g dqS ir   r  r  r   r   r   r   M  r   "E"_edgec              
      s,   g | ]$}t t |d g d ddgqS r`  r   r   r  r   r  r   r   r   R  r   c              
      s,   g | ]$}t t |d g d  dgqS r  r   r   r  r   r  r   r   r   S  r   c              
      s,   g | ]$}t t |d g dd dgqS r`  )r   r   r   r   r  r   r  r   r   r   T  r   c              
   S   s*   g | ]"}t t |d g dg dqS r  r  r   r   r   r   r   V  r   c              
      s,   g | ]$}t t |d g d ddgqS r  r  r   r  r   r   r   W  r   c              
      s,   g | ]$}t t |d g d  dgqS r  r  r   r  r   r   r   X  r   c              
      s,   g | ]$}t t |d g dd dgqS r  r  r   r  r   r   r   Y  r   c              
      s,   g | ]$}t t |d g dd d  gqS r   r   r  r   r  r   r   r   [  r   c              
      s,   g | ]$}t t |d g d d gqS r  r  r   r  r   r   r   \  r   c              
      s,   g | ]$}t t |d g d   gqS r  r   r  r   r  r   r   r   ]  r   c              
      s,   g | ]$}t t |d g dd  gqS r  r  r   r  r   r   r   ^  r   c                    s:   g | ]2}t t t  d d gtddg d qS r  r  r   r  r   r   r   a  r   r  c                    s:   g | ]2}t t t d  d gtddg d qS r  r  r   r  r   r   r   b  r   c                    s:   g | ]2}t t t  d d gtddg d qS r   r  r  r   r  r   r  r   r   r   c  r   c              	      s"   g | ]}t t | qS r   r  r   angleaxeposr   r   r   j  r   "A"_ll1   *** allInOne = 1 *****************************   *** _list :  coords each (Sph & Cub)R   *** ****************************************** DM2_w25 / hu_03 / spherification;   *** allInOne = 0 ***************************************r   | SPH == CUB ==  coords each	 | SPH = 	 lists a 	 | CUB =  == N   *** ************************************** DM2_w25 / hu_03 / spherificationrn  r   rP   r]   r^   r>   extendr   CullDuplicatePointsr   r   r  r    r*   r  Zanz_ptswhatr  r  r  ZallInOner!   r*  r  rt   ru   YZ	coordsSphptsrD   r;  lenxZdiffr   r  r  r  rd   r  r  r  r  r   setUp_hu_03  s    * 2




   &


 
 tr  c                    sR  d9 |d  |}|  }|dks0|dkrJtd d dgg }	g t|D ]}
t|D ]}|
 d |dk   | d |dk  }|dkr d	  |d	  dg |dks|
dks|
|d ks|dks||d kr|dkr |dg |dkrf|dkrf ddg qfqZd
 d d d g }	g }|dkrfddt|D }	fddt|d D }|dkrd}|	 |	dd D  |	 fddD  |	 fddD  |	dd D  |	 fddD  |d }|fddt|D  |fddt|D  |fddt|D  |fddt|D  |dd |d D  |dd |d D  |dkr<d}|	 |	 fddD  |	 fddD  |	 fd dD  |	d!d D  |	 fd"dD  |	 fd#dD  |	 fd$dD  |	 fd%dD  |	 fd&dD  |	 fd'dD  |	 fd(dD  |fd)dt|d* D  |fd+dt|d* D  |fd,dt|d* D  d d d d |dk  gt|	D ]$\}fd-dD |	|< qj|dkrd.}|rvg }|	D ]| q|d d  }	t|	}t|	}	|t|	 }g }|D ]| q|d d  }t|}t|D ]}|	t
| q |rntd/ td0| d1 tt|	 d2  td3 ||	gS |dkrN|rFtd4 t|d5krtd0| d6 tt| d7  t|d5k r>td0| d8 tt| d9 tt|d  d: tt|	 d9 tt|	d  d; tt|	t|	d   d7  td< ||	gS d S )=Nr   r
   r  r  r  r   rM   r  rs  r  r  c                    s"   g | ]  fd dD qS )c              
      s*   g | ]"}t |d d   d  gqS r  r  r   r  r   r   r     r   z(coordsCub.<locals>.<listcomp>.<listcomp>r   r>  r  r  r   r     r   zcoordsCub.<locals>.<listcomp>c                    s4   g | ],}t t t t td dt  qS r  r  r   r  r   r   r     r   r   r  c              
   S   s*   g | ]"}t t |d g dg dqS r  r  r   r   r   r   r     r   c              
      s,   g | ]$}t t |d g d ddgqS r  r  r   r  r   r   r     r   c              
      s,   g | ]$}t t |d g dd dgqS r  r  r   r  r   r   r     r   c              
   S   s*   g | ]"}t t |d g dg dqS r  r  r   r   r   r   r     r   c              
      s,   g | ]$}t t |d g dd d  gqS r  r  r   r  r   r   r     r   r3   c                    s:   g | ]2}t t t  d d gtddg d qS r  r  r   r  r   r   r     r   c                    s:   g | ]2}t t t d  d gtddg d qS r  r  r   r  r   r   r     r   c                    s:   g | ]2}t t t   d gtddg d qS r  r  r   r  r   r   r     r   c                    s<   g | ]4}t t t    d gtddg d qS r  r  r   r  r   r   r     r   c                 S   s   g | ]}t |d g dqS r  r  r  r   r   r   r     r   c                 S   s   g | ]}t |d g dqS r  r  r  r   r   r   r     r   r  c              
      s,   g | ]$}t t |d g d ddgqS r  r  r   r  r   r   r     r   c              
      s,   g | ]$}t t |d g d  dgqS r  r  r   r  r   r   r     r   c              
      s,   g | ]$}t t |d g dd dgqS r  r  r   r  r   r   r     r   c              
   S   s*   g | ]"}t t |d g dg dqS r  r  r   r   r   r   r     r   c              
      s,   g | ]$}t t |d g d ddgqS r  r  r   r  r   r   r     r   c              
      s,   g | ]$}t t |d g d  dgqS r  r  r   r  r   r   r     r   c              
      s,   g | ]$}t t |d g dd dgqS r  r  r   r  r   r   r     r   c              
      s,   g | ]$}t t |d g dd d  gqS r  r  r   r  r   r   r     r   c              
      s,   g | ]$}t t |d g d d gqS r  r  r   r  r   r   r     r   c              
      s,   g | ]$}t t |d g d   gqS r  r  r   r  r   r   r     r   c              
      s,   g | ]$}t t |d g dd  gqS r  r  r   r  r   r   r     r   c                    s:   g | ]2}t t t  d d gtddg d qS r  r  r   r  r   r   r     r   r  c                    s:   g | ]2}t t t d  d gtddg d qS r  r  r   r  r   r   r     r   c                    s:   g | ]2}t t t  d d gtddg d qS r  r  r   r  r   r   r     r   c              	      s"   g | ]}t t | qS r   r  r   r  r   r   r     r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r   r    s    * 2




   &


 
 tr  2.7c                 C   s*   dt jv rt|  ndd l}||  d S )Nr  r   )sysversionreload	importlib)whichr  r   r   r   
reload_lib  s    

r  z	DM_lib.pyWindowsz%A, %B %d, %Y %H:%M:%Sz   |||  py_ver r  zq  |||||||||||||||||||||  CC by-nc-sa  ||| 2025 11 25 += getPixxels, flowAlongSrf, exportCoordLists, getMeshPointszA   |||  DM_lib mini version imported in %ss               ||| 
%s   im  z   |||  btw: z0 tage sinds noch bis weihnachten - dh, nur noch z stunden schlafen !z>   |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||c                 C   s8   t | std dS t | |}t | | t | S )z

    z!!! curve ist not closedN)r   IsCurveClosedr    r   	CurveSeamCurveStartPoint)ZcrvIDZ	set2pointrK   r   r   r   setCrvStartPoint  s    
r  c                     s   g d} t ddg}t t dg}dt dg}g dt ddgt t dgdt dgg}dd | |||fD }|dd |D  td t d t dkpt dk  td	 t d t dkpt dk  td
 t d t dk  g  fdd|D }t|S )Nr   r   c              
   S   sN   g | ]F}t |td  t dk td  t dk td  t dk gqS )r  r   )r   rP   r  r  lowerr   r   r   r   r   1  r   z makeDummyBox.<locals>.<listcomp>c                 S   s   g | ]}t |d d tgqS )r   )r   rP   r  r   r   r   r   r   2  r   rM   fer
   r3   r   c              	      s"   g | ]}t t |tt qS r   )r   rP   r  r  r  r   ZposXr   r   r   4  r   )r  r  r  r  r  r   AddBox)rY   rZ   r[   p3rd   r   r  r   makeDummyBox+  s    


"jr  333333?r   c
           B   	      s   t dg d ttd ds&|	r>td td td |	rntd ttg d||dggg d	 d
tdd t	|d |d  t	| d |d dg}
t
t	|d |d ddgdt	d
dt	d
dg}t
t	|d |d  ddgdt	d
dt	d
dg}g }g }|rdt	| d | d dg}dt	| d | d t	|d |d g}dt	| d |d t	|d |g}dt	|d |d t	|d |d g}dt	|d |d dg}nrd| d dg}d| d t	|d |d g}ddt	|d |g}d|d t	|d |d g}d|d dg}|||||g}|	rtt|	 g }tt|d |d |  }|	rtd|d |D ]}t||
}t||}t|
|}t||d d }t||d d }|| || |	rpt|
}t|}t|}t|} t|	 t| t|  t| t| t| t|d D ](}!t|!| }"t|||"}#||# qq||g}$g }$t|d D ]F}%g }&tdD ](}'|&||'d |d  |%d    q|$|& qg }(t|D ]}%tdD ]}'||'d |d  |%d   })||'d |d  |%d   }*||'d |d  |%d   }+||'d |d  |%d   },|)|*|+|,g}-|(|- q,q ttt|||  d d }.g }/tt|d |d |  }0t|d |d t|d |d t|d |d   }1tt|0|1 }2|0|2 }3|rt|.}0t|.d }2t|.d }3|	rtd|2d|3d t|0d D ]0}4t|4|0 }"t|d |d |"}#|/|# qt|0d D ]j}4|4|3k rt|4|3 }"t|d |d |"}#|/|# n.t|4|3 |2 }"t|d |d |"}#|/|# qg }5t|0D ]\}4|/|4d  })|/|4d  }*|/|4d |0d   }+|/|4d |0d   },|)|*|+|,g}-|5|- qLg }6tt|d |d |  }7t|d |d t|d |d t|d |d   }8tt|7|8 }9|7|9 }:|r@|.}7t|.d }9t|.d }:|	rVtd|9d|:d t|7d D ]0}4t|4|7 }"t|d |d |"}#|6|# qbt|7d D ]j}4|4|:k rt|4|: }"t|d |d |"}#|6|# n.t|4|: |9 }"t|d |d |"}#|6|# qg };t|7D ]\}4|6|4d  })|6|4d  }*|6|4d |7d   }+|6|4d |7d   },|)|*|+|,g}-|;|- qg }<|<|( |<|5 |<|; |	rt|d}=|	rt|d}>|		r@t|	 t|}?t|	d  t|? t|/}?t|	d  t|? t|6}?t|	d  t|? t|=|>g |	sL|
r||dg |		rtd  ttg d gg d t|<D ] \}@}- fdd|-D |<|@< 	qt|(D ] \}@}- fdd|-D |(|@< 	qt|5D ] \}@}- fdd|-D |5|@< 	qt|;D ] \}@}- fdd|-D |;|@< 
q
t|$D ] \}@} fdd|D |$|@< 
q4 fdd|D } fd d|/D }/ fd!d|6D }6|
r|$D ] }t|d t|	d"  
qn |	
r|<|(|5|;|$||/|6g}Atd#|Ad d d d$ |<|(|5|;|$||/|6gS )%a  
    Generate a small archetypal house, distorted along perspective algorithms
    A setup for the development of individual panels
    Inspired by
      Albrecht Duerer's "Underweysung" (1525)
      #https://de.wikipedia.org/wiki/Perspektive#Geschichte
      #https://en.wikipedia.org/wiki/Albrecht_Duerer
    And
      MVRDVs "Porterlodges for the National Park De Hoge Veluwe" (1996)
      https://mvrdv.com/projects/167/hoenderloo-lodge?photo=15877
      https://www.miesarch.com/work/2994
    Parameters:
      p_width (float, optional): Approx. panel width in units
      l_dist (float, optional): Approx. length of the lodge in units
      d_dist (float, optional): Approx. depth of the lodge in units
      h_dist (float, optional): Approx. height of the lodge in units
      x_pos (float, optional): Move origin of the lodge in x
      y_pos (float, optional): Move origin of the lodge in y
      d_grid (boolean, optional): Fixed depth grid on the the small sides
      d_distord (boolean, optional): Distord basic section of the house
      demo (boolean, optional): Run demo to get an object
      verbose (int, optional): talk & sleep / Print and depict generation of the lodge
    Returns:
      list(float): list[][][] of all panels, containing groups of 4 points
      list(float): list[][][] of just the sleeve's panels
      list(float): list[][][] of just the right section's panels
      list(float): list[][][] of just the left section's panels
      list(float): list[][][] of the sections, containing groups of 5 points
      list(float): list[][] of all the cvs on the sleeve
      list(float): list[][] of all the cvs on the right section
      list(float): list[][] of all the cvs on the left section
    Example:
      import dm2_lib as dm2
      all_data = dm2.getLodge( verbose=1000, demo=1 )
      panels = all_data[0]
      panels_sleeve = all_data[1]
      panels_right = all_data[2]
      panels_left = all_data[3]
      sections = all_data[4]
      cvs_sleeve= all_data[5]
      cvs_right= all_data[6]
      cvs_left= all_data[7]
    zLODGE::demorf   r   z	                      ________z 	                     /_/_/_|__\zA	### dmLODGE          |_|_|_|__|
	########################DM2_w25z{	### return [ panels, panels_sleeve, panels_right, panels_left, sections, cvs_sleeve, cvs_right, cvs_left ] => allData[] !
r   )rh   r      r   r
   r  r  r3   r   z1	the long sides / the sleeve will be separated inz	segments.r  z'	the section on the right is devided inandzpanels.z)	the section on the other end is split inz	new origin position =)rh   r   rh   c                    s   g | ]}t | qS r   r  r   ZmovVecr   r   r   *  r   zgetLodge.<locals>.<listcomp>c                    s   g | ]}t | qS r   r  r   r  r   r   r   +  r   c                    s   g | ]}t | qS r   r  r   r  r   r   r   ,  r   c                    s   g | ]}t | qS r   r  r   r  r   r   r   -  r   c                    s   g | ]}t | qS r   r  r   r  r   r   r   .  r   c                    s   g | ]}t | qS r   r  r   rJ   r  r   r   r   /  r   c                    s   g | ]}t | qS r   r  r  r  r   r   r   0  r   c                    s   g | ]}t | qS r   r  r  r  r   r   r   1  r   r   z/	### allData[0][0][0] = panels[0][0] = "p0" = [z] etc etc etc ... )r  r   r   r{  r    rl   rm   r   randintr   PlaneFromNormalSleepr  rj   rN   rP   ra   PlaneCurveIntersectionr^   AddPointr`   DeleteObjectr]   r_   rV   r   r  r>   )BZp_widthZl_distZd_distZh_distZpos_xZpos_yZd_gridZ	d_distordZdemor!   Zfocusplane0plane1Zsection0Zsection1r   r   cdr  sectionZ
cvs_sleeveZsubdiv_lr   rT   endZcrv_idZpierce0Zpierce1Zfoc_idZpnt_idZsection0_idsZsection1_idsr6   rS   rU   sectionsur   vZpanels_sleeveZpnt0Zpnt1Zpnt2Zpnt3panelZsubdiv_dZ	cvs_rightZ	subdiv_d0Zfac_d0aZ
subdiv_d0aZ
subdiv_d0bpZpanels_rightZcvs_leftZ	subdiv_d1Zfac_d1aZ
subdiv_d1aZ
subdiv_d1bZpanels_leftZpanelsZsection0_idZsection1_idZcvs_idsrD   ZallDatar   r  r   getLodge8  sd   ,$".(* 












& <
<












*****	r  )g&?gy޿r   )gy?g&?r   )g	@g `4@r   r  (         @g     U@g      6@     c@c                 C   sl   t rL| tks4|tks4|tks4| dk s4|dk s4|dk rLtd| ||d g dS t| |t  |t t   S d S )Nr   z.*** getUnoCoord: any parameter too big or neg:z? ______________***r   )UNerrorLDHr    UnoGridCoords)lr  hr   r   r   getUnoCoord[  s    4r  c           
      C   s   ||dk 7 }t | d  }g }t|D ]|}t|D ]n}t| D ]`}t}	t|	ttt| |d  }	t|	tt|| }	t|	dd|| g}	|	|	 q<q0q$|S )Nr3   r
   r   )
lenYr]   uno0r   rP   rO   unoXlenXunoYr^   )
r  r  r  fHZslab_spacingr  rv   rt   ru   rE   r   r   r   getUnoGridCoordse  s     r!  )r  r  r  r   c                 C   s^   t t|t td  }t t| t td  }dd|t g}t 	t 	t 	t
|||}|S )Nr
   r   )r   rO   r  r  depthr  r  slabsr   rP   r  )r  r  r  ZvecXZvecYZvecZZvecXYZr   r   r   gC  s
    r$  c                 C   s  d}d}d}d}d}t t tt tt ttg d t t tt tt tt	g d t t tt tddd| gg d	 t 
 d
 }t 
 d }t 
 d }td|d D ]X}	t |t tt	| |	  | rtd|d D ]$}
t t 
 d t tt|  qqtd|d D ]}t |dd|| g q(| rtd|d D ]D}	t |t tt	| |	  t t 
 d dd||d  g qZd S )Nr   r  '   r  r  )rh   r   r   )r   rh   r   r   )r   r   rh   r3   r
   )r   rl   ra   r  rP   rO   r  r  r  r  r   r]   
CopyObject)ZshowAllr#  r"  floorsr   lenZZlinXZlinYZlinZru   rt   r  r   r   r   UN_slab  s,    ((*$r)  r%  c           #      C   s  t t tdddtddd }}t t tdddtddd }	}
g }g }g }g }g }g }t tdddtddd}t tdddtddd}t tdddtddd}t| | }t|| }t|| }|| }|| }t tdddtddd| }t|d D ]$}t|d D ]}t t tdddt |
|| dd|| g}t t tdddt |
||d  dd|| g}t t tdddt |
||d  dd||d  g}t t tdddt |
||d  dd||d  g}||||g} ||||g} |	|  |	|  q*qt|d D ]}t|d D ]}!t t tdddt |||! dd|| g}t t tdddt |||!d  dd|| g}t t tdddt |||!d  dd||d  g}t t tdddt |||!d  dd||d  g}||||g} |	|  |	|  q^qL|D ]0}"dd |"D } | 
  |	|  |	|  ql|D ]0}"dd |"D } | 
  |	|  |	|  qt|d D ]F}td|d D ].}!t t tdddt |
||d  t |||! }t t tdddt |
||d  t |||! }t t tdddt |
||d  t |||!d  }t t tdddt |
||d  t |||!d  }d	 |d
<  |d
<  |d
< |d
< ||||g} |	|  |	|  qq|rtd tdt|  d t| d t| d t| d t| d t| d t|d td td ||||||gS )Nr   r
   r   r   r%  c                 S   s0   g | ](}t t td dd td d d |qS )r   r   r   rP   rN   r  r   r   r   r   r     r   z$getUNpanelCoords.<locals>.<listcomp>c                 S   s0   g | ](}t t td ddtddd|qS )r   r   r*  r   r   r   r   r     r      r3   z7    ### ################ DM2_w24 / hu_06 / UN_panellingz    ### getUNpanelCoords( anzL=z,anzH=z,anzD=z,stepL=z,stepH=z,stepD=z) ..zpanelCoordLists generated:z]    ### allPanels = [frontPanels, backPanels, sidePanels, upSidePanels, allPanels, topPanels]zR    ### ##########################################################################)r   rW   rN   r  rj   r  r]   rP   rO   r^   reverser    r*   r   )#anzLanzHanzDstepLstepHstepDr!   ZdepthVecZdVecZ	lengthVecZlVecZfrontPanelsZ
sidePanelsZ
backPanelsZupSidePanels	topPanels	allPanelsZlenLZlenDZlenHZanzYZanzZZanzXZdeltaLZdeltaHZdeltaDrv   ru   rY   rZ   r[   r  rd   rt   r  r   r   r   getUNpanelCoords  s|    && 26::
26::


88<< 
Xr5  )r-  r.  r/  r0  r1  r2  r!   c              	   C   s  t t| dk9 a t d7 a |dkr$d}|dkr0d}t| }t|d |d |d krn| | t|d |d }| |d t|d |d |t|d |d g | t|d |d |d t|d |d |g | |t|d |d |d t|d |d g | t|d |d |t|d |d |d g |rnt	dt
tt| d  d t
t|   dt|   k r|d krn nt dk rt| |||d	 nPtt| d }t	d
t
| d t
|d d  d t
| d t
t  d  | S )zM
        arguments: maxPanels=25, minHig=4
        return: panels/coords
    r
   i  r  r   r3   r   r5   z: len recPanels = )	recPanels	maxPanelsminHigr!   z3*** ********* **********
*** recursive executions: z >> anzahl panels: z (max=z|cnt:rh  )cntr   r   r  r   rj   r   rV   r^   r    r*   r  dividePanel)r6  r7  r8  r!   r  ZpMidr  r   r   r   r:    s&    

2222,.@r:  c           
      C   sN  t   tjj| }g }t|jd ddD ]\}|| dkr*g }t|jD ]2}|| dkrH|||}	|	|	j
|	j|	jg qH|	| q*|rJtdt|   tdt|j d t| d tt|j|  d  td	t|j d
 t| d tt|j|  d tt|j| t|j|   d f tdtt  d  |S )at  
    Gets the pixel colors of an image.
    Args:
      image_path: An absolute path to an image file.
      steps_x: A number of pixels to sample in image x-direction.
      steps_y: A number of pixels to sample in image y-direction.
    Returns:
      A list of lists with a sublist of pixel *colors*
        for each sampled row of the image .. starting linx_unten
    r
   r   r   z	imagePath = z	width z / steps_x(z) >> Zpxz	hight z / steps_y(zpx .. = z pixelz/RGBsz| in r6   )r7   rm  DrawingZBitmapZFromFiler]   HeightWidthZGetPixelr^   r  r  r  r    r*   r  r@   )
Z	imagePathZsteps_xZsteps_yr!   ZbitmapZpixelsru   Z
row_pixelsrt   Zpixelr   r   r   	getPixels5  s"    8^r>  g      $@c           
   	      s  | }d| }t |ddgt |ddgdg d}|rvtd tdt|  tdt|  tdt|  td	 fd
d|ddg|d|gt |d|gdg d|d |d || gfD  dd tddD g dgfddtdD  g d g d fddtddD  g d tddg d d d    fddD  |r D ]"}t 	|d}	|rt 
|	 q S )z+
    return: allCoords = 12 coordLists
    gw?r   H   r   z%*** dodecahedron | pentagondodekaederz*** radius		 r z*** kantePentagon	 a z*** kante Cubus	 c z*** allCoords = [ rs.VectorAdd(pos, rs.VectorRotate(cor, 72.0*i, [0,0,1])) for cor in [[r,0,0], [c, 0, r], rs.VectorRotate([c,0,c], 36.0, [0,0,1] ), [c*.5,a*.5,r+c]] for i in range(5) ]c                    s8   g | ]0}t d D ]"}t t|d| g dqqS )r  g      R@r   )r]   r   rP   r  )r   rE   rD   )r  r   r   r   f  r   z"makeDodekaeder.<locals>.<listcomp>g      B@rM   c                    s   g | ]  fd ddD qS )c                    s   g | ]}| d   qS )r  r   )r   rt   r  r   r   r   g  r   -makeDodekaeder.<locals>.<listcomp>.<listcomp>)r   r
   r3   r   r  r   r>  r   r  r   r   g  r   r  )r   r
   r3   r   r  r   c              
      sd   g | ]\} d  d |   d  d|   d d|   d d |   d d |   d  d |  gqS r   r   r   )indicesr   r   r   i  r   )r  r   r     r  r  )r  r  r   r  r   r  c              	      sd   g | ]\} d  d |  d  d |  d  d |  d  d |  d  d |  d  d | gqS )r  r   r
   r3   r   r  r  r   r   )pentaIndicesr   r   r   l  r   r
   )r  r   r     rB  r  r  r  r   c                    s   g | ]} fd d|D qS )c                    s   g | ]} | qS r   r   r   r.   r   r   r   q  r   r@  r   )r   ZindlistrE  r   r   r   q  r   )r   rj   r  r    r*   r]   r  r^   r,  rm   AddPlanarSrf)
r  r  ZmakeCrvZmakeSrfr!   rr  r   rd   rJ   r   )r.   rA  rC  r  r   makeDodekaederX  s4    &L
rH  IDc                 C   s  g }t | D ]`\}}t  t|}t|}	d}
t|r`|s`t|dkr`d}
t|d tj	
|}tjjt|t|}||_|  }||rtjj| tt d | |t d  |
rt|d |	dkrtt d  tt d |	 |dkr|| dkrtdt||dk  d tt|  d tt  d  t  qd|  k rdk rn n.tdtt| d	 tt  d  t  |S )
Nr   r
   r3   z-flowed z von z in zs |z	-flowed: z	 objs in )r>   r   r   rl   ObjectMaterialIndexIsCurveCurveDegreeChangeCurveDegreer  
DocObjectsObjRefGeometryZMorphsZSporphSpaceMorphcoercesurfaceZPreserveStructure	DuplicateZMorphr  r  r	  r  r   r^   r  r    r*   r   r@   r   )objsbaser   
preserveItr!   ZflowedrD   r#   r#  ZmatIndexZchgZobjMmorphgeomr   r   r   flowAlongSrf|  s:    



:
&rX  NoYeststV  jpgc                 C   s.   dt | | d  }| d | d | } | S )NZ
0000000000_.r   )nameZframeNumberr   formatprer   r   r   makeName  s    rc  )r   )r%   )rH   )rM   )r   r   )r   )rM   )rM   )rM   )rM   )rM   )rM   )rM   )rM   )r   )r   r
   r
   )r   r
   )r   r
   rg   )r
   r
   )r   r   r   r   )Tr
   r  )r%  r3   )r   r   )r   )r%  r
   )r   )r   r   )rR  rf  )r   r  r  r  rs  r   rs  r  )r   r  r  r  rs  rs  rs  r  )r  r   )
r  r   r   r  r   r   r   r
   r   r   )r  r  r  r  )r
   r
   r
   )r   )r   r%  r   r
   r  r
   r   )r
   r
   r
   )rI  rI  r   r   )r[  r\  r  r]  )Zdatreplacer*   r  rhinoscriptsyntaxr   scriptcontextr  r  rm  r  r8   platformr   r0  r   r   	itertoolsr   r   r	   UnitAbsoluteTolerancepiApplicationSettingsAppearanceSettingsZEchoCommandsToHistoryWindowZEchoPromptsToHistoryWindowr   r   r   r   r$   r+   r-   rG   rL   rV   r\   re   rq   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rd   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r$  r+  r/  r1  r7   r@   r3  r5  r8  r   r<  rB  rH  rP  rW  r[  r_  rc  r    rd  rg  Z_2dayZdayNumber2dayre  rp  r   r  r  r}  r  r   r  r  r  r  r  getcwdlibsystemr9   isfilegetmtimeZtimsfromtimestampstrftimeZsaveDatZ
schlafTager  r  r  r  r  r  r4  r  r  r  r  r  r#  r  r"  r  r'  r  r   r  r  r(  r  r  r  r!  r$  r)  r5  r3  r  ZUnoBaseCoordsZUnoPanelCoordsr8  r7  r6  r9  r:  r>  rH  rX  r   rT  ZrugrS  r,  transrc  r   r   r   r   <module>	   s0    

	"	
	-S
&M0 $:BrBm"$  	%ZF.#$/
