Support Board
Date/Time: Fri, 07 Feb 2025 20:14:13 +0000
sc.DeleteUserDrawnACSDrawing affecting sc.GetUserDrawnChartDrawing
View Count: 1154
[2019-05-06 07:22:09] |
@sstfrederik - Posts: 406 |
Hi, I just came across something odd. When I run a while loop on sc.GetUserDrawnChartDrawing and delete a drawing that fits my criteria with sc.DeleteUserDrawnACSDrawing inside that while loop, it seems that the next linenumber is skipped. See code snippet and log output below. Am I missing something? Frederik little codesnippet below: while( sc.GetUserDrawnChartDrawing(sc.ChartNumber, DRAWING_HORIZONTAL_RAY, ChartDrawing, DrawingIndex) ){
aap.Format("LineNumber = %d, DrawingIndex = %d", ChartDrawing.LineNumber, DrawingIndex); sc.AddMessageToLog(aap,1); if(FirstLineNr < 0 && (ChartDrawing.LineNumber > FirstLineNr || ChartDrawing.LineNumber < LastLineNr )){ sc.DeleteUserDrawnACSDrawing(sc.ChartNumber, ChartDrawing.LineNumber); aap.Format("Deleted LineNumber = %d", ChartDrawing.LineNumber); sc.AddMessageToLog(aap,1); } DrawingIndex++; } message log output: Chart: CLM19 5 Min #1 | Study: test | FirstLineNr = -108 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | LastLineNr = -113 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | LineNumber = -102, DrawingIndex = 0 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | Deleted LineNumber = -102 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | LineNumber = -104, DrawingIndex = 1 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | Deleted LineNumber = -104 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | LineNumber = -106, DrawingIndex = 2 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | Deleted LineNumber = -106 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | LineNumber = -108, DrawingIndex = 3 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | LineNumber = -109, DrawingIndex = 4 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | LineNumber = -110, DrawingIndex = 5 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | LineNumber = -111, DrawingIndex = 6 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | LineNumber = -112, DrawingIndex = 7 | 2019-05-06 03:03:25 * Chart: CLM19 5 Min #1 | Study: test | LineNumber = -113, DrawingIndex = 8 | 2019-05-06 03:03:25 * |
[2019-05-06 19:28:34] |
Ackin - Posts: 1865 |
FirstLineNr = -108 LastLineNr = -113 LineNumber = -102, DrawingIndex = 0 | Deleted LineNumber = -102 | LineNumber = -104, DrawingIndex = 1 | Deleted LineNumber = -104 | LineNumber = -106, DrawingIndex = 2 | Deleted LineNumber = -106 | LineNumber = -108, DrawingIndex = 3 | LineNumber = -109, DrawingIndex = 4 | LineNumber = -110, DrawingIndex = 5 | LineNumber = -111, DrawingIndex = 6 | LineNumber = -112, DrawingIndex = 7 | LineNumber = -113, DrawingIndex = 8 | Hi, numbers are negative, condition LineNumber > FirstLineNr || LineNumber < LastLineNr is true, there is no other number that meets the condition If do you think that is bad loading getfunction because lines are missing "-107, -105, -103" try you to see if those lines actually exist on the chart, I had recently solved similar, when the index of already stored IDs has been shifted Date Time Of Last Edit: 2019-05-06 19:44:40
|
[2019-05-06 19:49:32] |
@sstfrederik - Posts: 406 |
The lines exist. That is my point. When delete is called the linenumber of the next drawing is skipped. The lines with linenumber "-107, -105, -103" are still on the chart, but should be deleted.
Date Time Of Last Edit: 2019-05-06 20:36:41
|
[2019-05-06 20:39:32] |
@sstfrederik - Posts: 406 |
Solved the issue. Maybe documentation can be adjusted. When delete is done do not update the DrawingIndex. Below code works fine. Thanks @Ackin. You gave me an idea about the indexing. while( sc.GetUserDrawnChartDrawing(sc.ChartNumber, DRAWING_HORIZONTAL_RAY, ChartDrawing, DrawingIndex) ){
aap.Format("LineNumber = %d, DrawingIndex = %d", ChartDrawing.LineNumber, DrawingIndex); sc.AddMessageToLog(aap,1); if(FirstLineNr < 0 && (ChartDrawing.LineNumber > FirstLineNr || ChartDrawing.LineNumber < LastLineNr )){ sc.DeleteUserDrawnACSDrawing(sc.ChartNumber, ChartDrawing.LineNumber); aap.Format("Deleted LineNumber = %d", ChartDrawing.LineNumber); sc.AddMessageToLog(aap,1); continue; } DrawingIndex++; } |
[2020-06-08 15:51:25] |
darksaber - Posts: 8 |
Thank you a lot @sstfrederik and @Ackin. The documentation should be indeed adjusted. Not obvious behavior of sc.DeleteUserDrawnACSDrawing at all that costed me a couple of sleepless nights. :(
|
[2020-06-09 06:23:36] |
|
We would think it should be understood that if a Chart Drawing is removed, the internal storage of the Chart Drawings is affected and the indexes of those Chart Drawings would be affected. However, we have done a documentation update about this.
Sierra Chart Support - Engineering Level Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy: https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service: Sierra Chart Teton Futures Order Routing |
To post a message in this thread, you need to log in with your Sierra Chart account: