Welcome to the COE Discussion Forums! 

 

To participate in the discussion forum, you must be logged in to the website.  If you forget your login information, please contact COE Headquarters at coe@coe.org or (800) 263-2255.

If you are new to the COE Discussion Forum and would like to participate, please register.


COE Community News

Follow COE on

COE DISCUSSION FORUM
Problem while joining elements
Last Post 21 Jan 2010 09:54 PM by vishalgawali. 7 Replies.
Printer Friendly
Sort:
PrevPrev NextNext
You are not authorized to post a reply.
Author Messages
vishalgawali
New Member
New Member
Posts:20

--
19 Jan 2010 04:51 AM  

Why does this loop execute only once for j=1.Can anyone tell what is wrong?

let i(integer)
let tempcurve(curve)

let j(integer)
let k(integer)
i = 1
j=1
k=1
k=NODTemp

Message("temp=",NODFinal )


for j while j<=NODFinal 
 
{  
 Message("j=",j)
 for i while i <= DissCurves .Size()
  
 {  
  If k ==1    
  {tempcurve = DissCurves .GetItem(i)
    
  }
  else
  {tempcurve = assemble(tempcurve, DissCurves.GetItem(i))    
  }   
  New_Curves->SetAttributeObject("Curve."+j ,tempcurve)
       
  Message("i=",i)
  
 }
}

knowledgeds
New Member
New Member
Posts:87

--
19 Jan 2010 05:14 AM  
Because you don't initialize i inside first loop but outside. So i remains > DissCurves.Size() at the second iteration and second loop is never executed
vishalgawali
New Member
New Member
Posts:20

--
19 Jan 2010 09:10 PM  
I have initialsed i inside the first loop,But it stiil excutes all values of i only for j=1

let i(integer)
let tempcurve(curve)

let j(integer)
let k(integer)

j=1
k=1
k=NODTemp

Message("temp=",NODFinal )


for j while j<=NODFinal

{
i=1
Message("initialised")
Message("j=",j)
for i while i <= DissCurves .Size()

{
If k ==1
{tempcurve = DissCurves .GetItem(i)

}
else
{tempcurve = assemble(tempcurve, DissCurves.GetItem(i))
}
New_Curves->SetAttributeObject("Curve."+j ,tempcurve)

Message("i=",i)

}
}
knowledgeds
New Member
New Member
Posts:87

--
20 Jan 2010 11:39 AM  

I'm not sure to understand completely the way you want it to work.

I don't understand where the number of curves by domain is deduced : you have to know it if you want your rule to work because you have to assemble those curves only (the assemble method allows to assemble non connected domains)

Few remarks:
- it would be easier to use assemble(list)
- I have the feeling that there is a problem around k management: in case of NODTemp <> 1, you never go in tempcurve initialization and assemble an empty curve with other curves (don't know the result).

You did not say what is DissCurves. I assume it is a list with all disassembled curves.

In this case, I think that with NODTemp = 1, the result is the same for all resulting curves : they assemble all disassembled curves with your algorithm

If the disassembled curves are sorted (curves belonging to a given domain are consecutive), I would do it something like that:

let onedomaincurves (List)
let domainindex (List)
let c (Curve)
let i (integer)
let j (integer)
let k (integer)
beginning = 1
i = 1

for i while i <= nbDomains
{
j = beginning
for j while j <= nbCurves - 1
{
c = assemble(curves->GetItem(i), curves.GetItem(i + 1)
if nbDomains(c) > 1
{
domainindex.Append(i + 1) /* domainindex will contain indexes where a new domain begins */
beginning = i + 1
j = nbCurves /* goes out the loop */
}
}
}

/* domainindex.Size() should be equal to nbDomains */

i = 1
k = 1
for i while i <= nbDomains
{
if i == 1
j = 1
else
j = domainindex.GetItem(i) - 1
for j while j < nbCurves
{
if j < domainindex.GetItem(i)
onedomaincurves->Append(curves->GetItem(j)
}

New_Curves->SetAttributeObject("Curve."+i ,assemble(onedomaincurves))
}

vishalgawali
New Member
New Member
Posts:20

--
21 Jan 2010 04:08 AM  

Hello knowledgeds,

Thanks for your efforts.I changed your given code but still couldn't succed.

I am attaching the catpart .

Could you give me the solution.

knowledgeds
New Member
New Member
Posts:87

--
21 Jan 2010 04:56 AM  

Hello,

there was some errors in my script (i in place of j, RemoveAll missing, and separators go from 1 to nbDomains - 1 and not to nbDomains). Here is the good one


let onedomaincurves (List)
let domainindex (List)
let c (Curve)
let i (integer)
let j (integer)
let k (integer)
let beginning(integer)
let nbDomains(integer)
let nbCurves (integer)
let x(integer)
let m(integer)

i = 1
beginning = 1
nbCurves =DissCurves.Size()

nbDomains=NODSketch


for i while i <= nbDomains - 1
{
    j = beginning
    for j while j <= nbCurves -1
    {   
        c = assemble(DissCurves  ->GetItem(j), DissCurves .GetItem(j +1))
       
        if nbDomains(c) > 1
        {
            domainindex.Append(j + 1) /* domainindex will contain indexes where a new domain begins */
           
            beginning = j + 1
            j = nbCurves
        }
    }
}

domainindex.Append(nbCurves + 1)


i= 1
k = 1
for i while i <= nbDomains
{
    if i == 1
        j = 1
    else
        j = domainindex.GetItem(i - 1) - 1
    for j while j < nbCurves
    {
        if j < domainindex.GetItem(i)
            onedomaincurves->Append(DissCurves->GetItem(j))
    }
   
    Assembled_Curves ->SetAttributeObject("AsmCurve."+i ,assemble(onedomaincurves))
    onedomaincurves.RemoveAll()
}

vishalgawali
New Member
New Member
Posts:20

--
21 Jan 2010 09:52 PM  

I modified the script and its now working  as per my expectations.

Thanks a lot Knowledgeds.

 

/*Rule created by agawalv 1/22/2010*/

let onedomaincurves (List)
let domainindex (List)
let c (Curve)
let i (integer)
let j (integer)
let k (integer)
let beginning(integer)
let nbDomains(integer)
let nbCurves (integer)

i = 1
beginning = 1
nbCurves =DissCurves.Size()

nbDomains=NODSketch


for i while i <= nbDomains
{
 j = beginning
 for j while j <= nbCurves -1
 {   
  c = assemble(DissCurves  ->GetItem(j), DissCurves .GetItem(j +1))
  
  if nbDomains(c) > 1
  {
   domainindex.Append(j + 1) /* domainindex will contain indexes where a new domain begins */
   
   beginning = j + 1
   j = nbCurves
   
  }
 }
}

domainindex.Append(nbCurves  + 1)

 

i= 1
k = 1

 

for i while i <= nbDomains
{
 if i == 1
  j = 1
 else
  j = domainindex.GetItem(i- 1 )
 
 
   for j while j <= nbCurves
 {
  if j < domainindex.GetItem(i)
   onedomaincurves->Append(DissCurves ->GetItem(j))
 }
 
 Assembled_Curves   ->SetAttributeObject("AsmCurve."+i ,assemble(onedomaincurves))
 Assembled_Curves.Update()
 onedomaincurves.RemoveAll()
}

vishalgawali
New Member
New Member
Posts:20

--
21 Jan 2010 09:54 PM  

Its working.

Thanks a lot knowledgeds.

 

You are not authorized to post a reply.

Active Forums 4.1